Android 版 Chrome(适用于 Google Cast)

想象一下,您可以使用手机上的 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 APISecond Screen Working Group 的一部分,旨在让网页能够使用第二屏幕显示 Web 内容。

这些 API 利用各种联网设备(包括运行用户代理的联网显示屏)的优势,通过“控制”设备和“显示”设备支持各种各样的应用。

我们会及时告知您实施进展。

在此期间,如果您发现 bug 或有功能请求,请访问 crbug.com/new 告诉我们。

了解详情