แทร็กเสียง
สําหรับการเลือกแทร็กเสียง 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 คําบรรยายที่บังคับจะแสดงตามค่ากําหนดภาษาเสียงของผู้ชม