使用Google接收机SDK,当我们不使用接收器播放器时,我们如何防止接收方超时并自动关闭转换会话?
标准的Google Cast用例是将媒体从设备发送到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();接收器日志显示行cast.framework.common.IdleTimeoutManager] timer expired,然后关闭。示例接收方日志在这里显示。
我试过:
任何帮助都是非常感谢的!
发布于 2018-11-01 21:21:52
在开发一个不播放媒体的自定义接收器应用程序时,我遇到了同样的问题。下面是我实现的解决方案:
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分钟的不活动时间来设定自己的超时时间。
发布于 2018-03-15 03:49:01
我想出了另一种方法来阻止这种情况,它比定期发送无声剪辑更有效,但感觉很脏。基本上,我们必须停止Chromecast的setTimeout触发和关闭连接,因为没有媒体。最快的解决方案是在加载Chromecast接收器脚本之前,简单地将setTimeout重新声明为一个虚拟的无操作函数。在这个场景中,它似乎没有破坏任何与Chromecast相关的内容,因为Chromecast的超时似乎都与视频相关,而视频与这个用例无关。
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应用程序中找到一种调用它的方法。
发布于 2017-12-30 14:27:42
每4分钟从发送方加载一个短的、听不到的音频剪辑到接收方,似乎就能做到这一点。如果文件很小,这应该不会对性能产生很大影响。这是一些android代码。
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);https://stackoverflow.com/questions/46673152
复制相似问题