我已经查看了git上的Chromecast示例,并查看了包括" Play or play or play or Cherqueue"行为的较旧的V7 Mediarouter示例。从Chromecast界面中尚不清楚,如何将较旧的助手类型行为从" remoteplaybackclient"及其" Play or Play or Chateue"层到遵循此处提到的"典型发送者应用程序"的Chromecast样本上。
- 在Chromecast样品中观察到OnPlay事件 -
看起来,在发件人应用程序中"播放"的每个按钮事件都将抢占任何当前视频占据会话的视频..当前视频中断了,新的视频缓冲区和播放。
- 我想要的 -
来自remoteplaybackclient的较旧行为,在Chromecast Sender应用程序中," Play"事件将" Playorenqueue"消息/指令传达给接收器应用程序。任何当前播放的视频都不会受到接收器实施的"添加到队列"指令的影响。
我的问题 - 如何实现'play-or-enqueue()',其中发件人应用中的指令就像是对接收器应用程序发行" play"或"入选"的异步请求,取决于当前播放器会话状态(是否扮演)。是否有这样的示例代码?
- 编辑 - 如以下详细信息所示,它看起来可行,但是关于较旧的" remoteplaybackclient"与较新的" semotemediaplayer"。
"入口"方法发生了什么?如果我想入选这是否意味着使用Mediarouter而不是" Chromecast"?
看来需要发生以下事情:
Chromecast发送者和Chromecast接收器
发件人格式的消息,用于播放的下一个项目
发送者发送消息
接收器解开消息,并将其解释为"排队,如果玩家很忙
接收者获得会话&玩家(我猜是一个seletemediaplayer)
接收器调用" Enqueue()"或播放器上的等效
示例消息:
{
"action":"launch", *** need "play or enqueue" ***
"activityType":"video_playback",
"activityId":"jsurtrdlc0hj",
"initParams": {
"videoUrl":"your_video",
"currentTime":0,
"duration":0,
"paused":false,
"muted":false,
"volume":0.5,
"mediaUrl":"your_video"
},
"senderId":"z1c1xp7jh26o",
"receiverId":"local:1",
"disconnectPolicy":"continue"
}
持有队列的正确位置不在发件人上,而是在接收方或云中,具体取决于您是否需要持久性。此外,将该队列在接收器上或云中保持,使多人可以为队列做出贡献。如果您需要在应用程序重新启动之间保留"播放列表"(即队列),那么您需要将云视为主要持有人,因为Chromecast上没有用于单个应用程序的持续存储。
看来您在正确的轨道上;您需要使用自定义名称空间和自定义接收器来完成所需的操作;您基本上将项目"添加"到队列中(例如,在接收器上保存了队列),而接收器则在一个媒体完成后,从队列中抓住下一个。顺便说一句,在您的示例消息中,您有一个视频和媒介,我不确定有什么区别。
在更高级的实现中,任何发件人都应能够"查询"接收器以获取队列,并且发件人可能会从队列中删除项目或重新排列,等等。