首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google广播自定义接收器超时

问Google广播自定义接收器超时
EN

Stack Overflow用户
提问于 2017-10-10 18:04:49
回答 4查看 2.8K关注 0票数 11

使用Google接收机SDK,当我们不使用接收器播放器时,我们如何防止接收方超时并自动关闭转换会话?

标准的Google Cast用例是将媒体从设备发送到cast接收器,并让接收方使用播放器呈现媒体。CAF接收机SDK以使用元素 cast-media-player漂亮、简单的方式提供了这个功能。

但是对于那些我们想要从设备中转换并呈现与使用cast-media-player无关的内容(例如HTML )的实例,我们如何保持接收方的存活呢?

例如,以下自定义接收器(HAML表示简洁)导致强制转换会话在5分钟后自动终止.

代码语言:javascript
复制
!!! 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();

接收器日志显示行cast.framework.common.IdleTimeoutManager] timer expired,然后关闭。示例接收方日志在这里显示。

我试过:

任何帮助都是非常感谢的!

EN

回答 4

Stack Overflow用户

发布于 2018-11-01 21:21:52

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

代码语言:javascript
复制
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();
    }
}

对于CastReveiverOptions,我禁用空闲超时,根据文档:“如果为真,如果没有活动,接收方将不会将空闲超时设置为关闭接收器。应该只用于非媒体应用程序。”

因为我的是一个“非媒体应用”,我相信这是正确的用法。然后,我根据我的自定义频道中5分钟的不活动时间来设定自己的超时时间。

票数 7
EN

Stack Overflow用户

发布于 2018-03-15 03:49:01

我想出了另一种方法来阻止这种情况,它比定期发送无声剪辑更有效,但感觉很脏。基本上,我们必须停止Chromecast的setTimeout触发和关闭连接,因为没有媒体。最快的解决方案是在加载Chromecast接收器脚本之前,简单地将setTimeout重新声明为一个虚拟的无操作函数。在这个场景中,它似乎没有破坏任何与Chromecast相关的内容,因为Chromecast的超时似乎都与视频相关,而视频与这个用例无关。

代码语言:javascript
复制
window._setTimeout = window.setTimeout;
window.setTimeout = function(a, b) {
    // disable setTimeout so chromecast won't kill us after 5 minutes...
};

然后在我们自己的应用程序中,如果我们需要使用超时,我们就调用_setTimeout。

我会感兴趣的是,是否有人找到了更好的方法来实现这一点,除了手动托管cast_receiver_framework.js并将其注释掉(在Wn(a, b)函数中),或者每隔几分钟发送一次无声剪辑。但谷歌并不推荐自我托管。

一个更好的解决方案可能是深入挖掘缩小后的代码,找出Xn(a)是如何被调用的,因为每当媒体播放时,就会禁用超时,然后在Chromecast应用程序中找到一种调用它的方法。

票数 5
EN

Stack Overflow用户

发布于 2017-12-30 14:27:42

每4分钟从发送方加载一个短的、听不到的音频剪辑到接收方,似乎就能做到这一点。如果文件很小,这应该不会对性能产生很大影响。这是一些android代码。

代码语言:javascript
复制
    MediaMetadata metadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MUSIC_TRACK);

    MediaInfo mediaInfo = new MediaInfo.Builder("https://some-inaudible-clip.mp3")
            .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
            .setContentType("audio/mpeg")
            .setMetadata(metadata)
            .build();

    RemoteMediaClient remoteMediaClient = castSession.getRemoteMediaClient();

    remoteMediaClient.load(mediaInfo, true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46673152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档