3

我必须拥有用户(用户 A 和 B)和一台 Chromecast 设备(C1)。用户 B 在 C1 上启动流。用户 A 连接到 C1

现在用户 A 应该能够控制在 C1 上运行的流。但是每次我想开始一个会话时,C1 上的正在运行的流被关闭并且接收器应用程序正在重新启动。

有没有办法加入一个活跃的会话?或者这是必须由 Chromecast 设备上运行的网络应用程序完成的工作?

编辑:我的发件人应用程序是本机 Android 应用程序谢谢!

4

4 回答 4

1

您应该看看井字游戏应用程序。我认为这正是两个玩家可以加入同一个游戏的地方:

https://github.com/googlecast/cast-android-tictactoe

希望这可以帮助。JN

于 2013-10-15T15:40:28.587 回答
0

你用的是什么类型的发件人?它是本机应用程序(即在移动设备上使用 Android 或 iOs SDK)还是发件人是 chrome 应用程序?

于 2013-10-15T16:13:26.080 回答
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。

于 2013-10-26T00:22:31.483 回答
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);
  }

我希望这也适用于你!

于 2013-11-11T13:19:35.787 回答