Как поделиться видео между устройствами Android с помощью MediaRouting

В настоящее время я вхожу в классы MediaRoute Android. Я последовал и понял примеры и пытаюсь поделиться видео между двумя устройствами, например, двумя планшетами с одинаковым оборудованием. У меня есть два пользовательских приложения.

  1. Приложение MediaRouter, которое отправит видео
  2. Приложение 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,

Другие вопросы по тегам