แทร็ก

แทร็กเสียง

สําหรับการเลือกแทร็กเสียง SDK ตัวรับเว็บมีคลาส AudioTracksManager ที่ช่วยให้การลดความซับซ้อนของแทร็กเรียบง่ายขึ้น และช่วยให้ควบคุม สิทธิ์เข้าถึงพร็อพเพอร์ตี้ เช่น ชื่อ, URL และภาษาได้ดีขึ้น คลาสนี้จะใช้ได้ดีที่สุดในเครื่องจัดการเหตุการณ์สําหรับเหตุการณ์ cast.framework.events.EventType.PLAYER_LOAD_COMPLETE

API นําเสนอวิธีต่างๆ ในการค้นหาและเลือกแทร็กเสียงที่ใช้งานอยู่ ต่อไปนี้เป็นตัวอย่างวิธีการเลือกแทร็กที่จะทําให้ใช้งานได้โดยระบุรหัส

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) ที่ส่งคืนแทร็กทั้งหมดสําหรับภาษาที่ระบุด้วย

รหัสภาษาเสียงจะดึงมาจากไฟล์ Manifest ของสื่อและควรเป็นไปตาม RFC 5646 รหัสภาษาอาจแสดงในอักขระ 2 ตัว (เช่น "es", "en" หรือ "de") หรือคําที่มีอักขระ 4 ตัว (เช่น "en-us", "es-es" หรือ "fr-ca")

หากไฟล์ Manifest ของสื่อเป็นไปตามมาตรฐานภาษาที่ต่างออกไป แอป Web Receiver จะต้องแปลงเป็นรหัส 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

API รองรับการควบคุม 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) ที่ส่งคืนแทร็กทั้งหมดสําหรับภาษาที่ระบุด้วย

ระบบจะดึงรหัสภาษาข้อความจากไฟล์ Manifest ของสื่อและควรเป็นไปตาม RFC 5646 รหัสภาษาอาจแสดงในอักขระ 2 ตัว (เช่น "es", "en" หรือ "de") หรือคําที่มีอักขระ 4 ตัว (เช่น "en-us", "es-es" หรือ "fr-ca")

หากไฟล์ Manifest ของสื่อเป็นไปตามมาตรฐานโค้ดภาษาอื่น แอป Web Receiver จะต้องแปลงคําขอที่เข้ามาใหม่ให้เป็นมาตรฐานนั้น คําขอเหล่านี้ เช่น คําสั่งเสียง ให้ใช้รหัสภาษา RFC 5646 Web Receiver SDK ให้ผู้รับบริการ EDIT_TRACKS_INFO แปลคําขอเป็นมาตรฐานไฟล์ Manifest ของคุณ ดังนี้

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();

API ช่วยให้นักพัฒนาซอฟต์แวร์เพิ่มแทร็กคําบรรยายใหม่แบบไดนามิกสําหรับเคสนี้สําหรับภาษาต่างๆ และแทร็กนอกขอบเขตได้ จากนั้นเลือกแทร็กให้เป็นแทร็กใหม่ที่ใช้งานอยู่

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();

เมื่อเล่นผ่านช่วงพักโฆษณา การเลือกแทร็กข้อความ เช่น ภาษาที่สร้างก่อนการหยุดพักจะยังคงอยู่หลังจากช่วงพักโฆษณาเนื้อหาเดียวกัน แม้ว่าโฆษณาจะเป็นภาษาอื่นก็ตาม