الأغاني

المقاطع الصوتية

بالنسبة إلى اختيار المقطع الصوتي، توفر حزمة تطوير البرامج (SDK) لجهاز الاستقبال على الويب AudioTracksManager تعمل على تبسيط اختيار المسارات وتبسيطها، ما يمنحك مزيدًا من التحكم وإمكانية وصول أفضل إلى المواقع الإلكترونية، مثل الاسم وعنوان URL واللغة هذا الصف وأفضل استخدام لها في معالج الأحداث cast.framework.events.EventType.PLAYER_LOAD_COMPLETE فعالية.

توفّر واجهة برمجة التطبيقات طرقًا مختلفة لطلب المقاطع الصوتية النشطة واختيارها. هنا مثال على كيفية اختيار مسار ليكون نشطًا من خلال تحديد رقم تعريفه:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const audioTracksManager = playerManager.getAudioTracksManager();

    // Get all audio tracks
    const tracks = audioTracksManager.getTracks();

    // Choose the first audio track to be active by specifying its ID
    audioTracksManager.setActiveById(tracks[0].trackId);
  });
context.start();

توفّر الفئة AudioTracksManager أيضًا طريقة. getActiveTrack()

إليك مثال على كيفية اختيار أول مقطع صوتي لأغنية محددة اللغة، وهي في هذه الحالة الإنجليزية:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const audioTracksManager = playerManager.getAudioTracksManager();

    // Set the first matching language audio track to be active
    audioTracksManager.setActiveByLanguage('en');
  });
context.start();

توفّر الفئة AudioTracksManager أيضًا طريقة. getTracksByLanguage(language) تعرض جميع المسارات للغة المحددة.

يتم استرداد رمز لغة الصوت من بيان الوسائط ويجب أن يتّبع RFC 5646. يمكن تقديم رموز اللغة في تسمية مكونة من حرفين (مثل "es" أو "en" أو "de")، أو تسمية مكونة من 4 أحرف (مثل "en-us" أو "es-es" أو "fr-ca").

إذا كان بيان الوسائط يتبع معيارًا لرمز لغة مختلف، فإن محتوى الويب يحتاج تطبيق الاستقبال إلى تحويله إلى رمز لغة متوافق مع RFC 5646. محتوى مخصّص للويب توفّر حزمة تطوير البرامج (SDK) الخاصة بالمستلم اعتراض EDIT_AUDIO_TRACKS لتنفيذ التعديلات:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Intercept the EDIT_AUDIO_TRACKS request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_AUDIO_TRACKS, request => {
  // write logic to convert language codes here
});
context.start();

عند استخدام الفواصل الإعلانية، أي مقطع صوتي محدّد، مثل اللغة قبل الفاصل الزمني، سيستمر ظهور المحتوى نفسه بعد الفاصل، حتى إذا تكون الإعلانات بلغة مختلفة.

مقاطع الترجمة والشرح

بالنسبة إلى اختيار مسار الترجمة والشرح، توفر حزمة تطوير البرامج (SDK) لجهاز الاستقبال على الويب TextTracksManager تعمل على تبسيط اختيار المسارات وتبسيطها، ما يمنحك مزيدًا من التحكم وإمكانية وصول أفضل إلى المواقع الإلكترونية، مثل الاسم وعنوان URL واللغة

ومن الأفضل استخدام الفئة TextTracksManager في معالج الأحداث cast.framework.events.EventType.PLAYER_LOAD_COMPLETE فعالية.

تبسيط وتبسيط اختيار مقاطع الترجمة والشرح في حزمة تطوير البرامج (SDK) الخاصة باستقبال الويب مع أجزاء أخرى من حزمة SDK.

تتيح واجهة برمجة التطبيقات التحكّم في WebVTT وTTML وCEA-608.

توفّر الفئة TextTracksManager طرقًا مختلفة لطلب البحث عن علامة مغلقة واختيارها. تنشيط مسار الترجمة والشرح. إليك مثال على كيفية اختيار المسار الأول نشطًا من خلال تحديد المعرف:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const textTracksManager = playerManager.getTextTracksManager();

    // Get all text tracks
    const tracks = textTracksManager.getTracks();

    // Choose the first text track to be active by its ID
    textTracksManager.setActiveByIds([tracks[0].trackId]);
  });
context.start();

توفّر الفئة TextTracksManager أيضًا طريقة. getActiveTracks()

إليك مثال على كيفية تحديد أول مسار نصي لعبارة محددة اللغة:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const textTracksManager = playerManager.getTextTracksManager();

    // Set the first matching language text track to be active
    textTracksManager.setActiveByLanguage('en');
  });
context.start();

توفّر الفئة TextTracksManager أيضًا طريقة. getTracksByLanguage(language) تعرض جميع المسارات للغة المحددة.

تم استرداد رمز اللغة النصية من بيان الوسائط ويجب أن يتبع RFC 5646. يمكن تقديم رموز اللغة في تسمية مكونة من حرفين (مثل "es" أو "en" أو "de")، أو تسمية مكونة من 4 أحرف (مثل "en-us" أو "es-es" أو "fr-ca").

إذا كان بيان الوسائط يتبع معيارًا لرمز لغة مختلف، فإن محتوى الويب يحتاج تطبيق المُستلِم إلى تحويل أي طلبات واردة إلى هذا المعيار. هذه الطلبات الصوتية، مثل الأوامر الصوتية، استخدم رموز اللغات RFC 5646. مستقبل الويب توفّر حزمة تطوير البرامج (SDK) أداة اعتراض "EDIT_TRACKS_INFO" لترجمة الطلبات إلى معيار البيان:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// intercept the EDIT_TRACKS_INFO request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_TRACKS_INFO, request => {
  // write logic to convert language codes here
});
context.start();

تسمح واجهة برمجة التطبيقات للمطوِّر بإضافة مسارات ترجمة وشرح جديدة ديناميكيًا، في حالات للغات المختلفة والمقاطع الصوتية خارج النطاق، ثم حدد مسارًا ستكون المسار النشط الجديد:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {

    // Create text tracks object
    const textTracksManager = playerManager.getTextTracksManager();

    // Create track 1 for English text
    const track1 = textTracksManager.createTrack();
    track1.trackContentType = 'text/vtt';
    track1.trackContentId = 'http://example.com/en.vtt';
    track1.language = 'en';

    // Create track 2 for Spanish text
    const track2 = textTracksManager.createTrack();
    const track2Id = track2.trackId;
    track2.trackContentType = 'text/vtt';
    track2.trackContentId = 'http://example.com/spa.vtt';
    track2.language = 'spa';

    // Add tracks
    textTracksManager.addTracks([track1, track2]);

    // Set the first matching language text track to be active
    textTracksManager.setActiveByLanguage('en');
  });
context.start();

عند استخدام الفواصل الإعلانية، يجب تحديد أي مقطع نصي محدّد، مثل اللغة. قبل الفاصل الإعلاني بعد الفاصل الإعلاني للمحتوى نفسه، حتى إذا تكون الإعلانات بلغة مختلفة

الترجمة والشرح الإجبارية

إن التسميات التوضيحية الإجبارية أو السرد الإجباري عبارة عن تراكب نصي يتم عرضه بحيث يمكن للمشاهد فهم حالات استخدام لغة بديلة أو توضيح المحتوى الصوتي. على عكس مقاطع الترجمة والشرح، لا يحتاج المشاهد إلى تفعيل مقاطع الترجمة والشرح لأنها يتم اختيارها تلقائيًا استنادًا إلى الإعدادات الصوتية المفضّلة لدى المشاهد.

لإضافة ترجمة تلقائية إلى تطبيق البث، يجب تضمينها باعتبارها كجزء من بيانك. في البيان، حدِّد دور الأغنية forced-subtitle عندما تلتقط حزمة تطوير البرامج Cask هذه المسارات، فإنها ستحدد كترجمات مفروضة. ليس هناك حاجة إلى أي إجراء من جانب المُرسِل حيث سيتم تحديث حزمة تطوير البرامج (SDK) الخاصة بالبثّ وفصل مقاطع الترجمة والشرح المفروضة على الفيديو. وهذا يعني أنّ المُشاهد لن قادرًا على تحديد تسمية توضيحية إجبارية.

عند تفعيل الترجمة والشرح، يتم إيقاف الترجمة والشرح الإجباريَين لمنع عرض الترجمة والشرح. تداخل في التسميات التوضيحية. عند إيقاف الترجمة والشرح في حال فرض ترجمة في البيان، ثم يتم عرض الترجمة والشرح الإجبارية بناءً على اللغة التي يفضّلها المُشاهِد