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