我正在使用Chromecast自定义接收器,它使用Media Player Library来播放HLS流。有时,创建流的代码转换器会在尝试加载该媒体段时导致媒体库崩溃。
虽然我无法直接对流或Chromecast设备做任何事情,但我一直在尝试在cast.api.player.Host
对象的onError
处理程序的客户接收器中添加解决方法。
在流中寻找未来似乎不起作用,因为它始终生成“Uncaught InvalidStateError:尝试使用不可用或不再可用的对象。”来自媒体库的错误。看起来初始错误会破坏源处理程序中的某些内容。
通过在onLoad()
对象上手动调用cast.receiver.MediaManager
,从头开始加载流(使用更新的currentTime值)似乎确实有效;在崩溃点之后,流开始再次播放。
// try to skip over the error
playPosition += 10.0;
console.log("attempting to seek to position: "+ playPosition);
// reuse the original load event with two changes:
// 1. the new start point is the position we want to "seek" to
loadEvent.data['currentTime'] = playPosition;
// 2. force autoload to begin playback as soon as possible
loadEvent.data['autoplay'] = true;
// fire the event
MediaManager.onLoad(loadEvent);
// what now?
问题是连接的发件人无法控制这个新的媒体会话。发件人尝试停止,暂停或寻求导致此警告的结果:Unexpected command, player is in IDLE state so the media session ID is not valid yet
。
从接收方开始播放流的正确方法是什么,以便通知发件人?
我正在使用版本2.0.0的cast_receiver.js和0.6.0的media_player.js