Как поделиться видео между устройствами Android с помощью MediaRouting
В настоящее время я вхожу в классы MediaRoute Android. Я последовал и понял примеры и пытаюсь поделиться видео между двумя устройствами, например, двумя планшетами с одинаковым оборудованием. У меня есть два пользовательских приложения.
- Приложение MediaRouter, которое отправит видео
- Приложение MediaRouterProvider, которое будет получать видео и воспроизводить его.
Дело в том, что мое первое приложение, установленное на первом устройстве, не может видеть маршрут, если второе приложение установлено на втором устройстве. Напротив, если я установлю второе приложение на первом устройстве, я смогу обнаружить MediaRoutes, определенный в приложении MediaRouteProvider, поэтому второе приложение работает локально.
Я публикую маршруты MediaRouteProvider следующим образом:
private void publishRoutes() {
Resources r = getContext().getResources();
// Create a route descriptor using previously created IntentFilters
MediaRouteDescriptor routeDescriptor = new MediaRouteDescriptor.Builder(
VARIABLE_VOLUME_BASIC_ROUTE_ID,"WTF")
.setDescription("descripcion")
.addControlFilters(CONTROL_FILTERS_BASIC)
.setPlaybackStream(AudioManager.STREAM_MUSIC)
.setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE)
.setDeviceType(MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN)
.setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE)
.setVolumeMax(VOLUME_MAX)
.setVolume(mVolume)
.build();
// Add the route descriptor to the provider descriptor
MediaRouteProviderDescriptor providerDescriptor =
new MediaRouteProviderDescriptor.Builder()
.addRoute(routeDescriptor)
.build();
// Publish the descriptor to the framework
setDescriptor(providerDescriptor);
}
Конечно, я знаю, что нет волшебства в обнаружении маршрутов без прямой связи между двумя устройствами. Оба подключены к одной сети Wi-Fi. Кроме того, у меня есть Chromecast, подключенный к телевизору, и я могу обнаружить его, а также я могу воспроизводить видео на телевизоре.
Подводя итог, я хотел бы знать, что делает Chromecast для моего первого приложения, чтобы сделать что-то похожее с моим вторым приложением. Я попытался установить прямое сокетное соединение между моими двумя устройствами, но маршруты не могут быть обнаружены. Возможно, я ищу неправильный подход, поэтому любая помощь будет оценена.
1 ответ
MediaRouteProvider
Реализация, которую вы показали, создает и публикует маршрут к локальному устройству. Вот почему, когда вы запускаете потребителя и поставщика на одном устройстве, поставщик становится доступным. Для предоставления маршрутов нелокальным получателям вам нужно будет найти и предоставить маршруты для них в вашем поставщике маршрутов.
ChromeCast рекламирует себя в локальной сети. На вашем телефоне есть код, который регистрирует MediaRouteProvider
который обрабатывает обнаружение и воспроизведение ChromeCasts. Вам придется реализовать этот код управления обнаружением и воспроизведением для вашего MediaRouteProvider
,