【发布时间】:2014-07-31 21:50:38
【问题描述】:
我正在尝试查看是否可以在来自 Android 发件人的 Chromecast 视频之前/期间播放广告。我知道我可以处理接收方的逻辑并切换视频 src 以播放广告,但是我将如何暂停发送方应用程序上的控制器,以便在接收方上更改视频 src 时它不会崩溃?我一直在浏览文档,但我似乎真的找不到关于这个主题的任何内容。
感谢您的帮助
【问题讨论】:
标签: android chromecast google-cast
我正在尝试查看是否可以在来自 Android 发件人的 Chromecast 视频之前/期间播放广告。我知道我可以处理接收方的逻辑并切换视频 src 以播放广告,但是我将如何暂停发送方应用程序上的控制器,以便在接收方上更改视频 src 时它不会崩溃?我一直在浏览文档,但我似乎真的找不到关于这个主题的任何内容。
感谢您的帮助
【问题讨论】:
标签: android chromecast google-cast
我一直在使用从接收方到发送方的自定义消息来通知发送方接收方的任何状态变化,效果很好。这是一个示例代码 sn-p,用于处理从发送者到接收者的各种消息——我的应用是一个卡拉 OK 播放列表,它可以将视频排队播放——它基于 CastVideoPlaylist 示例应用)
在发送方,我只是注册一个消息监听器来相应地更新 UI。
var playlistMessageBus = castReceiverManager.getCastMessageBus(
namespace, cast.receiver.CastMessageBus.MessageType.JSON);
// Create a message handler for the custome namespace channel
playlistMessageBus.onMessage = function(event) {
console.log('Playlist message: ' + JSON.stringify(event));
// Handle the ADD command from the sender
// Other commands could also be supported
switch (event.data.command) {
case 'ADD':
if (playlist == null) {
playlist = [];
}
console.log("Adding " + event.data.playlistItem.contentId + " to playlist");
playlist.push(event.data.playlistItem);
break;
case 'DELETE':
// delete the selected item from playlist
{
var code = 0;
if (playlist == null) {
code = 0;
}
else {
// find the listItem title, then delete it
var index;
for (index = 0; index < playlist.length; index++) {
if (playlist[index].title == event.data.playlistItem.title) {
console.log('Found ' + event.data.playlistItem.title + 'in playlist');
break;
}
}
if (index < playlist.length) {
playlist.splice(index,1);
code = 1;
}
}
var message = {
commandResult: 'CMD_RESULT',
responseCode: code
};
playlistMessageBus.send(event.senderId, JSON.stringify(message));
}
break;
case 'MOVE_TOP':
{
// move the selected listItem to top of the playlist
var code = 0;
if (playlist == null) {
code = 0;
}
else if (playlist.length == 1) {
code = 1;
}
else {
// find the listItem title, then move it to the top
var index;
for (index = 0; index < playlist.length; index++) {
if (playlist[index].title == event.data.playlistItem.title) {
console.log('Found ' + event.data.playlistItem.title + 'in playlist');
break;
}
}
if (index < playlist.length) {
playlist.splice(index,1);
playlist.unshift(event.data.playlistItem);
code = 1;
}
}
var message = {
commandResult: 'CMD_RESULT',
responseCode: code
};
playlistMessageBus.send(event.senderId, JSON.stringify(message));
}
break;
case 'QUERY':
switch (event.data.category) {
case 'PLAY_STATUS':
{
console.log("Sending play status back to sender app");
// inform all senders on the CastMessageBus of the incoming message event
// sender message listener will be invoked
var playState = (inPlay) ? 'PLAYING' : 'STOPPED';
var message = {
playstatus: 'PLAY_STATUS',
state: playState
};
playlistMessageBus.send(event.senderId, JSON.stringify(message));
}
break;
case 'SELECTED_MEDIA':
{
// return the current select media
var listItem = null;
if (curLoadedPlaylistItem != null) {
listItem = {
title: curLoadedPlaylistItem.title,
contentId : curLoadedPlaylistItem.contentID,
image: curLoadedPlaylistItem.image
};
}
var message = {
mediastatus: 'MEDIA_STATUS',
playlistItem: listItem
};
playlistMessageBus.send(event.senderId, JSON.stringify(message));
}
break;
case 'PLAYLIST':
{
// return the playlist
var message = {
playliststatus: 'PLAYLIST',
playlist: playlist
};
playlistMessageBus.send(event.senderId, JSON.stringify(message));
}
break;
default:
console.log("Unrecognized category from sender: " + event.data.category);
break;
}
break;
default:
console.log("Unrecognized command from sender: " + event.data.command);
break;
}
};
【讨论】:
您有几个不同的选择。我认为更适合您的情况是让您的接收器在发生更改时将接收器端的更改广播给所有连接的发送者,以便发送者可以调整/更新自己;更改可能是播放器状态和元数据更改。例如,在正常情况下,Sender A 可以开始播放电影 A。然后在播放的同时,也连接的 Sender B 可以开始播放电影 B。然后 Sender A 将收到媒体状态和元数据更新通知如果媒体发生了变化,那么它就可以采取适当的行动,无论它是什么。你的情况并没有那么不同。根据您的要求,发送方的处理可能会有所不同。
【讨论】: