แทร็ก

แทร็กเสียง

สําหรับการเลือกแทร็กเสียง 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 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();

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

คําบรรยายที่บังคับ

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

หากต้องการเพิ่มคําบรรยายที่บังคับลงในแอปพลิเคชัน Cast คุณจะต้องใส่คําบรรยายดังกล่าวเป็นส่วนหนึ่งของไฟล์ Manifest กําหนดแทร็กเป็น forced-subtitle ในไฟล์ Manifest เมื่อ Cask SDK ติดตามแทร็กเหล่านี้ ก็จะระบุได้ว่าเป็นคําบรรยายที่บังคับ คุณไม่ต้องส่งผู้ส่งเนื่องจาก Cast SDK จะแยกคําบรรยายที่บังคับและคําบรรยายออก ซึ่งหมายความว่าผู้ชม จะไม่สามารถเลือกคําบรรยายที่บังคับได้

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