คําแนะนํานี้จะอธิบายวิธีย้ายข้อมูลแอป Cast Receiver v2 ไปยังแอป Web Receiver ล่าสุด
SDK เฟรมเวิร์กแอปพลิเคชัน (CAF) ใหม่หรือที่เรียกว่า Web Receiver v3 เป็นการอัปเกรดที่สําคัญจาก SDK ผู้รับ v2 SDK ตัวรับเว็บมี SDK ที่ใช้งานง่ายและมีประสิทธิภาพสําหรับการพัฒนาแอปพลิเคชันตัวรับสื่อสื่อ
Web Receiver จะให้ API ที่สอดคล้องกับ API ของผู้ส่ง CAF ใหม่มากกว่า โดยเป็นการรวมโปรแกรมเล่นอย่างเต็มรูปแบบ (MPL และ Shaka) ตลอดจนการใช้งานและการสนับสนุนทั้งหมดสําหรับสื่อแคสต์และคําสั่งเสียง Google Assistant CAF SDK ยังมี UI เริ่มต้นที่จัดรูปแบบด้วย CSS ได้อย่างง่ายดาย และบริการเชื่อมโยงข้อมูลเพื่อลดความซับซ้อนของการใช้งาน UI
ทําไมจึงต้องย้ายข้อมูล
การย้ายข้อมูลแอปพลิเคชัน Receiver v2 ไปยัง Web Receiver อาจทําให้โค้ดจํานวนมากที่เกี่ยวข้องกับโปรแกรมเล่นหายไป คุณจึงมีสมาธิกับการเขียนตรรกะทางธุรกิจเฉพาะแอปพลิเคชัน
CAF ผสานรวมโปรแกรมเล่น MPL และ Shaka อย่างราบรื่นเพื่อรองรับเนื้อหาประเภทต่างๆ ได้มากยิ่งขึ้น เช่น HTTP Live Streaming (TS และ CMAF), MPEG-DASH, Smooth Streaming และประเภทที่พร็อพเพอร์ตี้แหล่งที่มาขององค์ประกอบสื่อ (MP3, MP4, Icecast ฯลฯ) รองรับ ดูรายการทั้งหมดได้ในสื่อที่รองรับ Google Cast ปัจจุบัน CAF ไม่รองรับโปรแกรมเล่นที่ผู้ใช้ให้ไว้
การย้ายข้อมูลไปยัง CAF จะเพิ่มการรองรับการควบคุมด้วยเสียงด้วย Google Assistant ระบบจะรองรับคําสั่งเสียง Google Assistant ใหม่โดยอัตโนมัติเมื่อใช้ CAF
นอกจากการรองรับคําสั่งสื่อใหม่ เช่น "เปลี่ยนแทร็กตามภาษา" และ "เปลี่ยนอัตราการเล่น" แล้ว CAF ยังรอ��รับคิวที่ดีขึ้น การรองรับโฆษณาในตัว และการสนับสนุนแบบเรียลไทม์ได้ดียิ่งขึ้น
สิ่งที่เปลี่ยนแปลง
Web Receiver API พยายามปฏิบัติตามรูปแบบที่ผู้ส่ง CAF แนะนําสําหรับ Android และ iOS และแตกต่างจาก v2
ตัวรับเว็บใช้เนมสเปซใหม่ cast.framework
แทนเนมสเปซ cast.receiver
สําหรับ API ทั้งหมดที่เปิดเผย ออบเจ็กต์ข้อมูลจํานวนมากที่ v2 ใช้นั้นเหมือนกันใน CAF และจะแสดงภายใต้เนมสเปซ cast.framework.messages
(ส่วนใหญ่อยู่ภายใต้ cast.receiver.media
)
บริการ v2 ต่อไปนี้จะถูกแทนที่ด้วยบริการ CAF ที่เกี่ยวข้อง
CastReceiverManager
คลาสจะแทนที่ด้วยCastReceiverContext
ซึ่งเป็นกระบวนการจัดการเซสชันการแคสต์ ผู้ส่ง การส่งข้อความที่กําหนดเอง และเหตุการณ์ในระบบทั่วโลก คุณใช้CastReceiverOptions
เพื่อมอบตัวเลือกแอปพลิเคชันส่วนกลาง (เช่น คิว เวอร์ชันผู้รับ การกําหนดค่าการเล่น ฯลฯ) ให้บริบทได้- คลาส
MediaManager
จะแทนที่ด้วยPlayerManager
ซึ่งเป็นพร็อพเพอร์ตี้ของCastReceiverContext
Singleton และจะจัดการเซสชันสื่อ คําขอสื่อ คําขอเสียงของ Google Assistant (CommandAndControlManager
ใน v2) และเริ่มทํางานเหตุการณ์สื่อ การกําหนดค่าสําหรับโปรแกรมเล่น (cast.player.api.Host
ใน MPL) ให้บริการโดยPlaybackConfig
ซึ่งให้บริการทั่วโลกหรือตามคําขอโหลดก็ได้
PlayerManager
ยังเผยให้เห็นคลาสย่อยของผู้จัดการย่อยด้วย
TextTracksManager
- จัดการแทร็กข้อความสื่อAudioTracksManager
- จัดการแทร็กเสียงQueueManager
- จัดการคิวBreakManager
- จัดการโฆษณา
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;
context.start(options);
ตรรกะทางธุรกิจของผู้รับ
ตัวแฮนเดิลเหตุการณ์ที่เปิดเผยของตัวรับสัญญาณ v2 (เช่น CastReceiverManager.onReady
หรือ MediaManager.onLoad
) เพื่อเพิ่มตรรกะทางธุรกิจ ใน CAF ระบบจะแทนที่ Listener เหตุการณ์ด้วย Listener เหตุการณ์
(CastReceiverContext.addEventListener
)
และตัวทริกเกอร์ข้อความ
(PlayerManager.setMessageInterceptor
)
ตัวรับสัญญาณสามารถมี Listener เหตุการณ์หลายรายการได้ (Listener จะไม่ส่งผลต่อเหตุการณ์) และตัวแทรก 1 ตัวต่อข้อความ ตัวสกัดกั้นสามารถอัปเดตคําขอหรือจัดการได้ (แสดงคําขอที่แก้ไข ข้อความสําเร็จ หรือข้อความแสดงข้อผิดพลาด) และอาจเป็นเครื่องจัดการแบบไม่พร้อมกันซึ่งให้คํามั่นสัญญาได้
ตัวสกัดกั้นคําขอโหลดเป็นตําแหน่งที่พบบ่อยที่สุดในการเพิ่มตรรกะเฉพาะแอปพลิเคชัน สําหรับคําขอโหลดจากผู้ส่ง ตัวโหลดการโหลดสามารถแปลง Content ID เป็น URL เนื้อหาได้ นอกจากนี้ยังมีการเรียกตัวโหลดการโหลดสําหรับคําขอโหลดล่วงหน้าและแคชล่วงหน้า หากไม่มีการจัดหาตัวขัดขวางที่ชัดเจนสําหรับการโหลดล่วงหน้าหรือแคชล่วงหน้า
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => {
// Resolve entity to content id
if (request.media.entity && !request.media.contentId) {
return getMediaByEntity(request.media.entity).then(
media => {
request.media.contentId = media.url;
return request;
});
}
return request;
});
ระบบจะแทนที่ตัวแฮนเดิลสถานะสื่อที่กําหนดเอง v2 ด้วยตัวสกัดกั้นข้อความสําหรับข้อความสถานะสื่อ แอปผู้รับเว็บที่ไม่ต้องการให้ URL สื่อแสดงในสถานะสื่อสามารถให้รีโซลเวอร์ URL
(PlayerManager.setMediaUrlResolver
) ซึ่งให้ URL ของสื่อสําหรับคําขอโหลด CAF จะใช้ URL ดังกล่าวภายใน ��ละไม่ได้ระบุไว้ในสถานะสื่อ
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.MEDIA_STATUS,
status => {
// Disable seek.
status.supportedMediaCommands &=
~cast.framework.messages.Command.SEEK
return status;
});
กิจกรรม
ผู้รับเว็บมีชุดเหตุการณ์ที่ครอบคลุมทั้งจาก CastReceiverContext
และ PlayerManager
แอป Web Receiver สามารถมี Listener ได้หลายเหตุการณ์และยังให้ Listener รายการเดียวกับหลายเหตุการณ์ได้ด้วย (ดูเหตุการณ์บางส่วนใน cast.framework.events.category
)
เหตุการณ์ดังกล่าวครอบคลุมคําขอของผู้ใช้ ความคืบหน้าในการเล่น การประมวลผลโปรแกรมเล่น และเหตุการณ์องค์ประกอบสื่อระดับต่ํา (CAF ไม่เปิดเผยองค์ประกอบสื่อ)
แอป Web Receiver จะเพิ่ม Listener เหตุการณ์เพื่อดําเนินการได้ (เช่น เพิ่มคําจํากัดความแทร็กข้อความเมื่อโหลดเสร็จสมบูรณ์) หรือสําหรับข้อมูลวิเคราะห์
// Log all media commands
playerManager.addEventListener(
cast.framework.events.category.REQUEST,
event => logEvent(event.type));
รถบัสข้อความที่กําหนดเอง
CAF จะไม่แสดงรถบัสข้อความใน API แต่ให้ CastReceiverContext.addCustomMessageListener
เพิ่ม Listener ข้อความสําหรับเนมสเปซที่เฉพาะเจาะจง (เฉพาะต่อเนมสเปซ) และCastReceiverContext.sendCustomMessage
เพื่อส่ง ต้องมีการประกาศเนมสเปซทั้งหมดก่อนเริ่มต้นตัวรับเว็บ (กล่าวคือ ก่อนเรียกใช้
CastReceiverContext.start
)
ประกาศเนมสเปซได้โดยการเพิ่ม
Listener ข้อความ หรือตั้งเป็นตัวเลือกเริ่มต้นใน CastReceiverOptions.customNamespaces
const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);
context.sendCustomMessage(CUSTOM_NS, {
type: 'status'
message: 'Playing'
});
UI เริ่มต้น
CAF มี UI ตัวรับสัญญาณเริ่มต้นของเว็บที่แสดงแถบความคืบหน้าการเล่นและข้อมูลเมตาของสื่อตามที่จําเป็น UI เริ่มต้นอยู่ในรูปแบบองค์ประกอบที่กําหนดเอง
(<cast-media-player>
)
สามารถจัดรูปแบบด้วยสไตล์ CSS ได้
<style>
cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>
หากต้องการปรับแต่งเพิ่มเติม แอป Web Receiver จะใช้ UI ของตนเองได้
ตัวรับสัญญาณเว็บมีคลาส
cast.framework.ui.PlayerDataBinder
ในการเชื่อมโยงออบเจ็กต์ UI กับสถานะการเล่นของตัวรับเว็บ