将Google云端硬盘内容流式传输到Chromecast

时间:2018-10-23 02:18:27

标签: javascript android google-drive-api chromecast google-cast

我正在尝试构建一个用户可以在本地播放Google Drive存储的内容并进行投射的应用。

根据Google驱动器文档Google Drive Developers Docs,我必须发出这样的http请求:

GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Authorization: Bearer <ACCESS_TOKEN>

要在本地播放,我正在使用exoplayer,它运行起来非常流畅,我的问题是当我尝试投射内容时。

我想我已经阅读了Google Cast开发人员网站Google Cast Developers Docs上涉及发件人和收件人应用程序的所有文档,而我却无法投射内容。

我调试时接收方应用程序正在获取403 error,因为它需要身份验证。 403 Error on browser

此错误是由于无法设置HTTP标头“ 授权:承载ACCESS_TOKEN ”引起的,原因是据我所知没有设置HTTP标头的选项。

>

我什至打开了Google Here的问题单,我在其中要求将该功能包含在通用接收器应用程序中,这样我们就不必仅为该功能托管接收器应用程序。他们回答了

您将需要编写一个接收器,并在playbackConfig.manifestRequestHandler中提供一个添加标头的处理程序。 您将需要使用加载请求的customData字段来传递令牌或其他任何数据。

因此,我尝试执行他们告诉我的操作,现在发送方应用将授权令牌发送到接收方应用,但是我仍然将令牌设置为请求标头。

这是接收器应用程序中的当前代码。

const context = cast.framework.CastReceiverContext.getInstance();
const castOptions = new cast.framework.CastReceiverOptions();
const playerManager = context.getPlayerManager();

let playbackConfig = (Object.assign(new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
    console.log("token: ", request.media.customData.token);

    playbackConfig.manifestRequestHandler = requestInfo => {
    requestInfo.withCredentials = true;
    requestInfo.headers = {};
    requestInfo.headers['Authorization'] = request.media.customData.token;
    };
  return request;
});
castOptions.playbackConfig = playbackConfig;
context.start(castOptions);

如果有人可以帮助我或指导我,那将是很棒的。谢谢

1 个答案:

答案 0 :(得分:0)

经过几个月的研究,我改变了构建发送到演员表的URL的方式,而无需访问令牌。现在,我以以下格式发送要投射或下载的文件。(API密钥必须有权访问文件)

https://www.googleapis.com/drive/v3/files/GOOGLE_DRIVE_ID_OF_THE_FILE?alt=media&key=API_KEY

此后,我收到了另一个错误,我在此Link中向Google报告了此错误,他们发现我的视频的编解码器存在问题(Here是受支持的编解码器的列表) 。所以我不得不重新编码我所有的视频。我使用了Handbrake,甚至为chromecast设置了预设。最后,我能够从Google云端硬盘投射视频。