我就这一问题进行进一步调查,我发现,问题是,玩家在接收器处于空闲状态,太很长,因此关闭应用程序和与发件人的任何连接。
AFAIK,没有办法以一种干净的方式避免这种行为,所以我选择了肮脏的解决方案。我在接收器中放置了一个隐藏的演员播放器,我发送了一个不存在的图像。它试图加载图像(进入状态BUFFERING),但它失败。通过这种方式它重置了空闲计时器,并且应用程序不再退出。
我希望这会对未来的其他人有所帮助。
编辑:添加较长的解释
为了使解决办法,我不得不通过在接收端应用程序的CSS添加铸媒体播放器标签和隐藏:
<head>
<style>
cast-media-player {
display: none;
}
</style>
</head>
<body>
<!-- My content -->
<cast-media-player></cast-media-player>
</body>
之后,我向Android发件人应用程序添加了一个循环,每30秒(即使超时时间过长也可以),请求播放器显示给定图像:
private void playFakeContent() {
final String addr = "http://your.domain.here/404image.png";
CastSession session = mSessionManager.getCurrentCastSession();
if (null != session) {
MediaInfo.Builder builder = new MediaInfo.Builder(addr)
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setContentType("image/png")
.setMetadata(new MediaMetadata(MediaMetadata.MEDIA_TYPE_PHOTO));
session.getRemoteMediaClient().load(builder.build(), true);
}
}
我还在前台为我的应用程序提供了一项服务,以确保Android不会在手机上杀死我的应用程序。
应该有一些改进空间,例如,在给定的时间内播放实际图像以避免无用的HTTP请求和Player状态的侦听器仅在进入IDLE状态时请求图像,但我现在没有足够的时间去尝试。 如果我愿意,我会更新我的答案。
我目前无法分享完整的应用程序代码,但我打算在将来在GitHub上发布它。项目准备就绪后,我会尽快更新答案。
我也在自定义接收器中渲染自定义内容(隐藏/忽略接收器播放器)并希望保持连接活着。你能分享一下你的解决方案Andrea的更多细节吗? 您是否尝试加载一次不存在的图像,并且足以让所有内容都无限期地存活?您是否必须定期尝试加载不存在的图像?如果定期发送,您是否发送了发送方的请求或处理接收方中的所有内容?你可以与我们分享你的代码吗? –
不幸的是,我没有设法复制你的结果Andrea。我使用的是iOS Cast SDK,但翻译您发布的电话非常容易。我需要3个星期才能完成任务,这是释放辛苦工作的最后一个障碍。有什么可以分享的东西可以帮助我吗?接收器代码?接收器控制台输出,所以我知道我应该看起来像什么?我感谢您提供的任何和所有帮助 –
提出了一个问题,如果您还想在那里安慰Andrea :) https://stackoverflow.com/questions/46673152/google-cast-custom-receiver-timing-out –