الأغاني

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

لاختيار المقطع الصوتي، توفّر "حزمة تطوير البرامج (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")، أو التعريف بأربعة أحرف (مثل "en-us" أو "es-es" أو "fr-ca").

إذا كان بيان الوسائط يتّبع معيارًا مختلفًا لرمز اللغة، يجب أن يحوّله تطبيق Web الاستلام إلى رمز لغة متوافق مع معيار 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).

تتيح واجهة برمجة التطبيقات التحكّم في WebVTT وTML و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").

إذا كان بيان الوسائط يتّبع معيارًا مختلفًا لرمز اللغة، يجب أن يحوّل تطبيق Web Receiver أي طلبات واردة إلى ذلك المعيار. تستخدم هذه الطلبات، مثل الطلبات الصوتية، رموز لغة 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. وعندما تلتقط حزمة تطوير البرامج (SDK) للمقاطع الصوتية هذه المسارات، ستحدّدها كشرح مُفرض. لن يحتاج المُرسِل إلى العمل لأنّ حزمة تطوير البرامج (SDK) للبث ستفصل بين ميزة الترجمة والشرح والترجمة والشرح. يعني ذلك أنّ المشاهد لن يتمكّن من اختيار الترجمة والشرح المفروضة.

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