如何加入在Chromecast设备上运行的活动会话

时间:2013-10-15 12:22:43

标签: android google-cast chromecast

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

现在用户A应该能够控制在C1上运行的流。但是每次我想要启动会话时,C1上的运行流都会关闭,接收器应用程序正在重启。

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

编辑: 我的发件人应用是原生Android应用 谢谢!

4 个答案:

答案 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);
  }

我希望这也适合你!