2013-10-15 3 views
3

У меня есть пользователи (пользователь A и B) и одно устройство Chromecast (C1). Пользователь B запускает поток на C1. Пользователь A подключается к C1Как присоединиться к активному сеансу, выполняемому на устройстве Chromcast

Теперь пользователь A должен иметь возможность управлять потоком, работающим на C1. Но каждый раз, когда я хочу начать сеанс, запущенный поток на C1 выключается и приложение-ресивер перезапускается.

Есть ли способ присоединиться к активной сессии? Или это работа, которая должна выполняться веб-приложением на устройстве Chromecast?

EDIT: мое приложение-отправитель является родным приложением для Android Спасибо!

ответ

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

Но мне кажется, что Приложение MimeDataArgs вообще не требуется. Удаляя аргументы и начиная сеанс, как показано ниже, он работает очень хорошо!

try { 
    mSession.startSession(applicationName); 
    } catch (IllegalStateException e) { 
    Log.e(getClass().getSimpleName(), e.getMessage(), e); 
    } catch (IOException e) { 
    Log.e(getClass().getSimpleName(), e.getMessage(), e); 
    } 

Я надеюсь, что это сработает и для вас!

1

Вы должны взглянуть на приложение TicTacToe. Я думаю, что это делает именно то, что где 2 игроки могут присоединиться к тем же играм:

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

Надеется, что это помогает. JN

+0

Я проверил это раньше, но я не мог найти НИКАКОЙ разницы ... Но спасибо! – kyp

0

Какой тип отправителя вы используете? Является ли это родным приложением (т. Е. С помощью Android или iOs SDK на мобильном устройстве), или отправитель является хром-приложением?

+0

О, извините, я использую собственное приложение Andorid в качестве приложения-отправителя. – kyp

+0

. Причина, по которой я спросил тип отправителя, заключается в том, что текущие API-интерфейсы Chrome не поддерживают несколько параллельных соединений. Поскольку вы ответили, что используете Android SDK, пожалуйста, поделитесь некоторыми из своего кода, чтобы мы могли сделать некоторые предложения, иначе трудно понять, что происходит неправильно; было бы здорово, если бы мы могли видеть коды получателя и отправителя. Кстати, почему мой вопрос проголосовал? –

+0

Я не могу опубликовать код приложения-получателя, потому что он не разработан мной. Приложение моего отправителя не очень отличается от примера приложения и учебника, опубликованного Google. Поэтому я думаю, что нужно сделать что-то «особенное» кстати. Я не ответил на нижестоящий вопрос: O – kyp

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

Это своего рода смутный ответ, но это может быть более конкретным, если бы я знал, что вы пытаетесь сделать. Мое приложение использует протокол RAMP Google для воспроизведения видео, поэтому мой MessageStream и все его сообщения уже определены. Если вы делаете что-то другое, вам нужно создать свой собственный MessageStream.