我有用户(用户A和B)和一个Chromecast设备(C1)。 用户B在C1上启动流。 用户A连接到C1
现在用户A应该能够控制在C1上运行的流。但是每次我想要启动会话时,C1上的运行流都会关闭,接收器应用程序正在重启。
有没有办法加入活动会话?或者这是一项必须由Chromecast设备上运行的网络应用程序完成的工作?
编辑: 我的发件人应用是原生Android应用 谢谢!
答案 0 :(得分:1)
您应该查看TicTacToe应用程序。我认为这确实可以让2名玩家加入同一场比赛:
https://github.com/googlecast/cast-android-tictactoe
希望这会有所帮助。 JN
答案 1 :(得分:0)
您使用的是哪种发件人?它是原生应用程序(即在移动设备上使用Android或iOs SDK)还是发件人是Chrome应用程序?
答案 2 :(得分:0)
在接收器上,您创建一个Receiver对象和一个ChannelHandler。您使用接收器生成ChannelFactory,然后将其传递给ChannelHandler。 ChannelHandler现在处理接收器上的通道创建。您将需要将EventListener添加到处理程序以侦听消息。根据这些消息,您可以做各种事情。
receiver = new cast.receiver.Receiver(YOUR_APP_ID, [YOUR_PROTOCOL], "", 5);
var dashHandler = new cast.receiver.ChannelHandler(YOUR_PROTOCOL);
dashHandler.addChannelFactory(receiver.createChannelFactory(YOUR_PROTOCOL));
dashHandler.addEventListener(cast.receiver.Channel.EventType.MESSAGE, onMessage.bind(this));
receiver.start();
...
onMessage = function (e) {
var message = e.message;
switch (message.type) {
...
}
}
在发件人上,创建会话后,您需要向接收者发送检查状态消息,以查看是否已附加频道。您可以通过MessageStream执行此操作,并且您的接收器需要以MessageStream更新其状态的方式进行响应。您检查该状态以查看是否有频道。如果有,您可以开始收听接收器的更新。如果没有,您可以向接收器发送加载事件以开始您的活动。
MediaProtocolCommand cmd = mMessageStream.requestStatus();
cmd.setListener(new MediaProtocolCommand.Listener() {
@Override
public void onCompleted(MediaProtocolCommand mPCommand) {
if (mMessageStream.getState() == 'channelsExist') {
//Start New Activity
} else {
//Join Existing Activity
}
@Override
public void onCancelled(MediaProtocolCommand mPCommand) {
}
});
这是一种模糊的回应,但如果我知道你想要做什么,它可能更具体。我的应用程序正在使用Google的RAMP协议来播放视频,因此我的MessageStream及其所有消息都已定义。如果你正在做一些不同的事情,你需要创建自己的MessageStream。
答案 3 :(得分:0)
对于迟到的回答感到抱歉,但我自己想出来了:它并不是那么复杂
我开始像这样的应用程序
try {
mSession.startSession(applicationName,applicationArgs);
} catch (IllegalStateException e) {
Log.e(getClass().getSimpleName(), e.getMessage(), e);
} catch (IOException e) {
Log.e(getClass().getSimpleName(), e.getMessage(), e);
}
但似乎根本不需要MimeData applicationArgs。通过删除参数并启动如下所示的会话,它工作得很好!
try {
mSession.startSession(applicationName);
} catch (IllegalStateException e) {
Log.e(getClass().getSimpleName(), e.getMessage(), e);
} catch (IOException e) {
Log.e(getClass().getSimpleName(), e.getMessage(), e);
}
我希望这也适合你!