Ell*_*rry 7 google-cast chromecast google-cast-sdk caf-receiver-sdk
使用Google CAF Receiver SDK,当我们不使用接收器播放器时,我们如何防止接收器超时并自动终止强制转换会话?
标准的Google Cast用例是将媒体从设备发送到投射接收器,让接收器使用播放器渲染媒体.该CAF接收器SDK在一个美丽的,简单的方法提供了这个功能使用元素 cast-media-player.
但是对于那些我们想要从设备进行投射并渲染与使用不相关的内容cast-media-player(例如HTML仪表板)的情况,我们如何让接收器保持活力?
例如,以下自定义接收器(简称为HAML)导致演员会话在5分钟后自动终止...
!!! 5
%html
%head
:css
cast-media-player {
display: none;
}
= javascript_include_tag 'https://www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js'
%body
%cast-media-player
:javascript
const context = cast.framework.CastReceiverContext.getInstance();
const player = context.getPlayerManager();
player.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, loadRequestData => {
...[load custom view]...
return false;
});
context.start();
Run Code Online (Sandbox Code Playgroud)
接收器日志显示该行cast.framework.common.IdleTimeoutManager] timer expired然后关闭.此处显示示例接收器日志.
我试过了:
很感谢任何形式的帮助!
我在开发不播放媒体的自定义接收器应用程序时遇到了同样的问题。这是我实施的解决方案:
var idleTime = 0;
const context = cast.framework.CastReceiverContext.getInstance();
const CUSTOM_CHANNEL = '[MY CHANNEL HERE]';
context.addCustomMessageListener(CUSTOM_CHANNEL, function(customEvent) {
var eventData = customEvent.data;
parseCommand(eventData);
idleTime = 0;
});
const options = new cast.framework.CastReceiverOptions();
options.disableIdleTimeout = true;
context.start(options);
var idleInterval = setInterval(timerIncrement, 60000); // 1 minute
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 4) { // 5 minutes
context.stop();
}
}
Run Code Online (Sandbox Code Playgroud)
使用 CastReveiverOptions 我禁用空闲超时,根据文档:“如果为真,如果没有活动,接收器将不会设置空闲超时来关闭接收器。应该只用于非媒体应用程序。” https://developers.google.com/cast/docs/reference/caf_receiver/cast.framework.CastReceiverOptions#constructor_1
由于我的是一个“非媒体应用程序”,我相信这是正确的用法。然后,我根据自定义频道中 5 分钟的不活动时间来设置自己的超时时间。
我想出了一种阻止此情况的替代方法,该方法比定期发送无声剪辑更有效,但是感觉很脏。基本上,setTimeout由于没有媒体,我们必须停止Chromecast的启动和关闭连接。最快的解决方案是setTimeout在加载Chromecast接收器脚本之前,简单地将其重新声明为虚拟无操作功能。在这种情况下,似乎没有破坏任何与Chromecast相关的内容,因为Chromecast的超时似乎都与视频相关,而与该用例无关。
window._setTimeout = window.setTimeout;
window.setTimeout = function(a, b) {
// disable setTimeout so chromecast won't kill us after 5 minutes...
};
Run Code Online (Sandbox Code Playgroud)
然后在我们自己的应用程序中,如果我们需要使用超时,则_setTimeout改为调用。
我想知道是否有人发现了一种更好的方法来实现此目的,除了手动cast_receiver_framework.js注释掉有问题的行(位于Wn(a, b)函数内部)或每隔几分钟发送一个无声剪辑之外。但是Google不建议您自托管。
更好的解决方案可能是深入挖掘缩小的代码,以找出如何Xn(a)调用该方法,从而在播放媒体时禁用超时,然后找到一种从Chromecast应用中调用该方法的方法。
Leo*_*lls -3
可以将自定义命名空间消息从接收者发送到发送者。这应该能让心跳保持活力。但是,Cast SDK 不直接支持您的用例,因此您必须尝试解决方案。
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |