2016-04-04 9 views
1

Я использую Andorid ExoPlayer для потоковой передачи контента из Интернета через http (HLS). Когда я начинаю плеер он работает нормально, но когда я пытаюсь изменить качество содержания игры -Android ExoPlayer меняет выбранный трек

player.setSelectedTrack(TYPE_VIDEO, 1)

, например, я получаю и HTTP 403 Forbidden ошибки. Если я инициализирую плеер и снова запустил содержимое, это нормально. Я использую демонстрационный проект в качестве источника.

Знаете ли вы, что может быть причиной такого поведения, и какова разница в воспроизведении начального потока и изменении трека?

Есть ли способ сбросить потоковое вещание без повторной инициализации всего игрока, поскольку URL-адрес передается строителю при инициализации проигрывателя?

ответ

1

Я нашел проблему. URL-адрес, который я передавал в ExoPlayer, был возвращен из внешнего API и был довольно длинным, поэтому я не заметил, что на самом деле это 2 URL-адреса, объединенные «|» (http://my_url_1.m3u8|http://my_url_2.m3u8). Странно то, что если вы передадите эту строку в ExoPlayer, она проиграет поток без ошибок .. но если вы попытаетесь изменить качество игрового потока, у вас возникнут проблемы.

1

Вы не меняете качество потока, используя setSelectedTrack(). Это используется для выбора того, что нужно играть из доступных потоков (например, на каком языке аудио, субтитров или для видео это довольно редко, но, например, вы можете настроить различные углы камеры в спортивном событии).

Все эти потоки могут иметь несколько уровней качества, а формат FormatEvaluator от ExoPlayer выбирает, какое качество загружать на основе сетевых условий.

Если декодер отличается при выборе новой дорожки, то для продолжения воспроизведения плеер необходимо повторно инициализировать.

Я предлагаю загрузить манифест HLS (.m3u8) вручную, а затем проверить перечисленные данные, попробовать URL по одному в браузере. Все должно работать, вы также не должны проходить тест 403 в этом тесте.