Google Cast定制接收器超时

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然后关闭.此处显示示例接收器日志.

我试过了:

很感谢任何形式的帮助!

JRP*_*JRP 6

我在开发不播放媒体的自定义接收器应用程序时遇到了同样的问题。这是我实施的解决方案:

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 分钟的不活动时间来设置自己的超时时间。


Ale*_* DF 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 不直接支持您的用例,因此您必须尝试解决方案。

  • 如果您需要使用标准媒体播放器,那么我很难称之为自定义。你找到解决这个艾略特问题的方法了吗? (2认同)