想象一下,您可以使用手机上的 Web 应用通过会议投影仪演示幻灯片,或者使用移动 Web 应用作为控制器,在电视屏幕上分享图片、玩游戏或观看视频。
最新版本的 Chrome for Android 允许网站使用 Cast Web SDK 将内容呈现给 Google Cast 设备。这意味着,您现在可以在 Android 或 iOS 设备上(或在桌面设备上使用扩展程序)使用 Web SDK 与 Chrome 搭配使用来创建 Cast 发送器应用,还可以创建使用适用于 Android 和 iOS 的原生 Cast SDK 的应用。(以前,Google Cast 发送端应用需要 Google Cast Chrome 扩展程序,因此在 Android 上,只能通过原生应用与 Cast 设备互动。)
下面简要介绍了如何使用 Web SDK 构建 Cast 发送端应用。如需了解更全面的信息,请参阅 Chrome 发件人应用开发指南。
使用 Cast 的所有网页都必须包含 Cast 库:
<script
type="text/javascript"
src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"
></script>
添加一个回调来处理 API 可用性并初始化 Cast 会话(请务必在 API 加载之前添加处理脚本!):
window['__onGCastApiAvailable'] = function (isLoaded, error) {
if (isLoaded) {
initializeCastApi();
} else {
console.log(error);
}
};
function initializeCastApi() {
var sessionRequest = new chrome.cast.SessionRequest(applicationID);
var apiConfig = new chrome.cast.ApiConfig(
sessionRequest,
sessionListener,
receiverListener
);
chrome.cast.initialize(apiConfig, onInitSuccess, onError);
}
如果您使用的是默认的样式化媒体接收器应用,而不是自行开发的已注册自定义接收器应用,则可以创建如下所示的 SessionRequest
:
var sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.
DEFAULT_MEDIA_RECEIVER_APP_ID);
当一个或多个设备变为可用时,系统会执行上述 receiverListener
回调:
function receiverListener(e) {
if (e === chrome.cast.ReceiverAvailability.AVAILABLE) {
// update UI
}
}
按照用户体验指南的要求,在用户点击“投屏”图标时启动投屏会话:
chrome.cast.requestSession(onRequestSessionSuccess,
onRequestSessionError);
function onRequestSessionSuccess(e) {
session = e;
}
系统会向用户显示设备选择器:
当页面已连接并调用 requestSession()
时,系统会显示路由详情对话框:
建立 Cast 会话后,您可以为所选的 Cast 设备加载媒体,并为媒体播放事件添加监听器:
var mediaInfo = new chrome.cast.media.MediaInfo(mediaURL);
var request = new chrome.cast.media.LoadRequest(mediaInfo);
session.loadMedia(
request,
onMediaDiscovered.bind(this, 'loadMedia'),
onMediaError
);
function onMediaDiscovered(how, media) {
currentMedia = media;
media.addUpdateListener(onMediaStatusUpdate);
}
此处的 currentMedia
变量是一个 chrome.cast.media.Media
对象,可用于控制播放:
function playMedia() {
currentMedia.play(null, success, error);
}
// ...
媒体播放时,系统会显示播放/暂停通知:
如果没有媒体正在播放,通知中只有一个用于停止投放的停止按钮:
chrome.cast.ApiConfig()
的 sessionListener
回调(见上文)可让您的应用加入或管理现有 Cast 会话:
function sessionListener(e) {
session = e;
if (session.media.length !== 0) {
onMediaDiscovered('onRequestSessionSuccess', session.media[0]);
}
}
如果 Android 版 Chrome 允许从您的网站投放媒体,但您想停用此功能,以免默认投放界面干扰您自己的界面,请使用 Chrome 49 及更高版本中提供的 disableRemotePlayback 属性:
<video disableRemotePlayback src="..."></video>
Cast Web SDK 指南提供了指向示例应用的链接,以及有关 Cast 功能(例如会话管理、文字轨道 [字幕和旁白] 以及状态更新)的信息。
目前,您只能使用 Cast Web SDK 向 Cast 接收器应用呈现内容,但我们正在努力实现在不使用 Cast SDK 的情况下使用 Presentation API(在桌面设备和 Android 设备上),以便在不向 Google 注册的情况下向 Cast 设备呈现任何网页。与仅限 Chrome 的 Cast SDK 不同,使用标准 API 可让网页与支持该 API 的其他用户代理和设备搭配使用。
Presentation API 和 Remote Playback API 是 Second Screen Working Group 的一部分,旨在让网页能够使用第二屏幕显示 Web 内容。
这些 API 利用各种联网设备(包括运行用户代理的联网显示屏)的优势,通过“控制”设备和“显示”设备支持各种各样的应用。
我们会及时告知您实施进展。
在此期间,如果您发现 bug 或有功能请求,请访问 crbug.com/new 告诉我们。