Как использовать CastCompanionLibrary-android с MediaRouteButton с FragmentActivity

Я работаю над интеграцией Google Chromecast в одно из моих Android приложений. Для этого я имею в виду примеры Google Cast.

Я использую CastCompanionLibrary-android — CCL, и чтобы понять, как его использовать, я имею в виду < href="https://github.com/googlecast/CastVideos-android" rel="nofollow noreferrer">пример транслируемых видео. Однако в этом примере показано, как использовать кнопку трансляции с ActionBar.

Мой вопрос: как использовать эту библиотеку, если мне нужно использовать MediaRouteButton в моем пользовательском макете? В каких местах я должен внести изменения?

Моя деятельность распространяется FragmentActivity.

Примечание. Я просмотрел документ в формате pdf, прилагаемый к библиотеке, однако не нашел много информации о том, как использовать библиотеку с MediaRouteButton.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ:

Шаг 1: я получаю экземпляр VideoCastManager.

Шаг 2: я получаю MediaRouteButton из своего пользовательского макета и добавляю его в экземпляр VideoCastManager.

Шаг 3. Реализация onCastDeviceDetected(), onCastAvailabilityChanged(), onApplicationConnected(), onApplicationDisconnected() и onDisconnected() методов VideoCastConsumerImpl методов прослушивателя. Затем добавьте этот прослушиватель в экземпляр VideoCastManager.

Шаг 4: В onApplicationConnected() я вызываю loadRemoteMedia(), передавая текущую позицию панели поиска.

Но это не работает. Видео кастинг так и не начинается.

ОБНОВЛЕНИЕ 2:

Ниже приведены журналы, которые я получаю, когда пытаюсь использовать URL-адрес Cast в примере приложения Cast video.

Состояние приложения: загружено.запущено.готово

Количество сеансов: 2

Состояние элемента мультимедиа: остановлено

Сообщение диспетчера приемника трансляции: Подключен отправитель: { ДРУГИЕ ДАННЫЕ}

Сообщение медиа-менеджера: ЗАГРУЗИТЕ {ДРУГИЕ ДАННЫЕ}

Медиа-протокол: m3u8 // мое видео с расширением m3u8

Ниже приведены журналы, которые я получаю, когда пробую URL-адрес Cast в своем приложении.

Состояние приложения: загружено.запущено.готово

Количество сеансов: 1

Состояние элемента мультимедиа:

Сообщение диспетчера приемника трансляции: Подключен отправитель: { ДРУГИЕ ДАННЫЕ}

Сообщение медиа-менеджера: ПОЛУЧИТЬ СТАТУС {ДРУГИЕ ДАННЫЕ}

Медиа-протокол: неизвестно

ОБНОВЛЕНИЕ 3 Тег BaseCastManager:

D/ccl_BaseCastManager(2974): [v1.8] получение подключения к сервисам Google Play для Chromecast (941cb5ec30f65c2082b67fd7c5df0b03)

D/ccl_BaseCastManager(2974): [v1.8] onConnected() достигнуто с предшествующей приостановкой: false

D/ccl_BaseCastManager(2974): [v1.8] launchApp() вызывается D/ccl_BaseCastManager(2974): [v1.8] Запуск приложения

D/ccl_BaseCastManager(2974): [v1.8] launchApplication() -> результат успеха

D/ccl_BaseCastManager(2974): [v1.8] Успешно добавлен новый прослушиватель BaseCastConsumer om.google.sample.castcompanionlibrary.notification.VideoCastNotificationService$2@429998a8

Тег VideoCastManager:

D/ccl_VideoCastManager(2974): [v1.8] onApplicationStatusChanged() достигнуто: главный экран Chromecast

D/ccl_VideoCastManager(2974): [v1.8] onVolumeChanged() достигнуто

D/ccl_VideoCastManager(2974): [v1.8] onApplicationStatusChanged() достигнуто: ноль

D/ccl_VideoCastManager(2974): [v1.8] onApplicationConnected() достигнут с sessionId: B71F7618-1516-5F6C-D795-EF32FD0BF5E2 и mReconnectionStatus=INACTIVE

D/ccl_VideoCastManager(2974): [v1.8] startNotificationService()

D/ccl_VideoCastManager(2974): [v1.8] attachMedia()

D/ccl_VideoCastManager(2974): [v1.8] Регистрация пространства имен MediaChannel

D/ccl_VideoCastManager(2974): [v1.8] onApplicationStatusChanged() достигнуто: готов к воспроизведению

D/ccl_VideoCastManager(2974): [v1.8] Успешно добавлен новый прослушиватель CastConsumer om.google.sample.castcompanionlibrary.notification.VideoCastNotificationService$2@429998a8

D/ccl_VideoCastManager(2974): [v1.8] RemoteMediaPlayer::onStatusUpdated() достигнут

D/ccl_VideoCastManager(2974): [v1.8] onRemoteMediaPlayerStatusUpdated() достигнут

D/ccl_VideoCastManager(2974): [v1.8] mApiClient или mRemoteMediaPlayer имеют значение null, поэтому › продолжение не будет

D/ccl_VideoCastManager(2974): [v1.8] RemoteMediaPlayer::onMetadataUpdated() достигнут

D/ccl_VideoCastManager(2974): [v1.8] onRemoteMediaPlayerMetadataUpdated() достигнуто


person Ritesh Gune    schedule 16.09.2014    source источник


Ответы (1)


Если вы уже подключены и успешно запустили приложение (полагаю, вы видите свое приложение по телевизору), то тот факт, что вы используете MediaRouteButton вместо поставщика действий, не имеет значения; две альтернативы (кнопка против поставщика действий) дают вам маршрут, и вы прошли этот этап, поэтому не сосредотачивайтесь на этом, если вы пытаетесь решить свою текущую проблему.

Я также предполагаю, что вы имели в виду loadMedia(), а не loadRemoteMedia(). Что вы получаете в результате операции, когда вы вызываете это? Вам нужно предоставить больше информации на этом фронте (обязательно включите журналы).

person Ali Naddaf    schedule 16.09.2014
comment
Али, спасибо за ответ. Я читал ваши ответы на различные вопросы об интеграции Chromecast. Не могли бы вы рассказать мне более конкретно, что именно вы подразумеваете под «дополнительной информацией», чтобы я мог это предоставить. - person Ritesh Gune; 16.09.2014
comment
Позвольте мне рассказать вам некоторые из моих наблюдений: после нажатия значка chromecast он не становится желтым (выбранное состояние), не запускается видеоCastControllerActivity, я получаю значение, неизвестное для протокола Media. - person Ritesh Gune; 16.09.2014
comment
Вещи, которые вам нужно отладить на вашей стороне: (1) Вы получаете устройство/маршрут или нет? (2) Если вы это сделаете, когда вы попытаетесь подключиться, вызвав mApi.connect(), вызывается ли обратный вызов onConnected() (т.е. вы действительно подключаетесь к службе?) Давайте сначала установим ответ на эти вопросы. - person Ali Naddaf; 16.09.2014
comment
Да, я получаю маршрут устройства и RouteInfo в onCastDeviceDetected(). В моем случае также вызывается onApplicationConnected(), в котором я вызываю loadRemoteMedia (позиция панели поиска). Нигде в примере приложения я не обнаружил переопределенных вызовов mApi.connect() или onConnected(). - person Ritesh Gune; 17.09.2014
comment
Вы продолжаете ссылаться на loadRemoteMedia (позиция панели поиска), что это? Журнал, который вы показали, является журналом консоли, а что насчет журнала отправителя? Вы пытаетесь воспроизвести HLS-медиа? Все вызовы в SDK являются асинхронными, и все они асинхронно возвращают некоторый результат, вам нужно проверить эти результаты, чтобы увидеть, какой из них не работает; без реальной информации вам мало чем можно помочь - person Ali Naddaf; 17.09.2014
comment
loadRemoteMedia можно найти в строке номер 326. Я имею в виду образец видео Cast. - person Ritesh Gune; 17.09.2014
comment
Ваше приложение загружается на ТВ или нет? - person Ali Naddaf; 18.09.2014
comment
Если у вас есть время, я хотел бы пригласить вас в chat.stackoverflow.com/rooms/61458/chromecast-room< /а> - person Ritesh Gune; 18.09.2014
comment
Мой вопрос заключался в том, загружается ли ваше приложение или нет, не спрашивая, воспроизводится ли видео или нет. Попробуйте использовать приложение CastVideos-android и возьмите его за отправную точку и постепенно изменяйте его в соответствии со своими потребностями и тестируйте каждое внесенное изменение, чтобы убедиться, что вы быстро обнаружите любые проблемы. - person Ali Naddaf; 18.09.2014
comment
Смотрите, при выборе литого устройства запускается мое приложение. Я просто сообщал вам больше информации о том, что видео не запускается, и я получаю приведенные выше журналы на консоли. - person Ritesh Gune; 18.09.2014
comment
(1) Обновите свой CCL до последней версии 1.10; вы используете 1.8 (2) Следуйте моим рекомендациям по запуску с CastVideos-android и переходу оттуда к собственному приложению - person Ali Naddaf; 18.09.2014