【问题标题】:How to join an active session running on a Chromcast device如何加入在 Chromecast 设备上运行的活动会话
【发布时间】:2013-10-23 06:04:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android google-cast chromecast


    【解决方案1】:

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

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

    希望这会有所帮助。 JN

    【讨论】:

    • 我之前检查过这个,但我找不到任何区别......但是谢谢!
    【解决方案2】:

    您使用的是哪种发件人?是原生应用(即在移动设备上使用 Android 或 iOs SDK)还是发件人是 chrome 应用?

    【讨论】:

    • 哦,抱歉,我使用原生 Andorid 应用作为发件人应用
    • 我之所以询问发件人的类型,是因为当前的 Chrome API 不支持多个并发连接。既然您回答您使用的是 Android SDK,请分享您的一些代码,以便我们提出一些建议,否则很难看出哪里出了问题;如果我们能同时看到接收方和发送方代码,那就太好了。顺便说一句,为什么我的问题被否决了??
    • 我不能发布接收应用程序的代码,因为它不是我开发的。我的发件人应用与示例应用和谷歌发布的教程没有太大区别。所以我认为必须做一些“特别”的事情。我没有否决您的回答:O
    • 你指的是哪个教程?您可以打开登录 SDK 并获取更多信息;为此,请在此页面底部查找“在 SDK 中启用日志记录”:developers.google.com/cast/cast_2nd-screen_app_tutorial
    【解决方案3】:

    在接收器上,您创建一个 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。

    【讨论】:

      【解决方案4】:

      抱歉回答晚了,但我自己想通了:一点也不复杂

      我像这样启动了一个应用程序

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

      我希望这对你也有用!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-21
        • 2014-01-01
        • 2014-04-13
        • 1970-01-01
        • 2013-12-21
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多