我必须拥有用户(用户 A 和 B)和一台 Chromecast 设备(C1)。用户 B 在 C1 上启动流。用户 A 连接到 C1
现在用户 A 应该能够控制在 C1 上运行的流。但是每次我想开始一个会话时,C1 上的正在运行的流被关闭并且接收器应用程序正在重新启动。
有没有办法加入一个活跃的会话?或者这是必须由 Chromecast 设备上运行的网络应用程序完成的工作?
编辑:我的发件人应用程序是本机 Android 应用程序谢谢!
我必须拥有用户(用户 A 和 B)和一台 Chromecast 设备(C1)。用户 B 在 C1 上启动流。用户 A 连接到 C1
现在用户 A 应该能够控制在 C1 上运行的流。但是每次我想开始一个会话时,C1 上的正在运行的流被关闭并且接收器应用程序正在重新启动。
有没有办法加入一个活跃的会话?或者这是必须由 Chromecast 设备上运行的网络应用程序完成的工作?
编辑:我的发件人应用程序是本机 Android 应用程序谢谢!
您应该看看井字游戏应用程序。我认为这正是两个玩家可以加入同一个游戏的地方:
https://github.com/googlecast/cast-android-tictactoe
希望这可以帮助。JN
你用的是什么类型的发件人?它是本机应用程序(即在移动设备上使用 Android 或 iOs SDK)还是发件人是 chrome 应用程序?
在接收器上,您创建一个 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。
抱歉回答晚了,但我自己想通了:一点也不复杂
我开始了这样的应用程序
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);
}
我希望这也适用于你!