ExoPlayer получает доступные звуковые дорожки и переключается между ними - PullRequest
0 голосов
/ 09 мая 2019

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

В библиотеке ExoPlayer я нашел способ получить список треков из потока следующим образом:

player.getCurrentTrackGroups().get(i).getFormat(i) //player is SimpleExoPlayer class

но это дает мне некоторую необработанную информацию, здесь есть видео, аудио и другие треки, которые нужно пометить. печатные форматы выглядят следующим образом:

Формат (1/100, ноль, видео / AVC, -1, ноль, [1920, 1080, -1.0], [-1, -1])
Формат (1/8292, ноль, application / cea-608, -1, ноль, [-1, -1, -1.0], [-1, -1])
Формат (1/200, ноль, аудио / MPEG-L2, -1,, [-1, -1, -1.0], [2, 48000])
Формат (1/201, ноль, аудио / MPEG-L2, -1,, [-1, -1, -1.0], [2, 48000])

Интересно, есть ли более простой способ получить только аудиодорожки и их необходимую информацию для переключения между ними на потом?

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

player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DEFAULT);

этот код взят из этого ответа. Проблема в том, что мой класс SimpleExoPlayer не имеет этой функции. У меня есть exoplayer 2.8.2, и ни класс SimpleExoPlayer , ни ExoPlayer не получили эту функцию. Так что я застрял там.
Другой найденный ответ был из класса DefaultTrackSelector, который имеет следующее лицо:

 trackSelector.setParameters( trackSelector.getParameters().buildUpon().setPreferredAudioLanguage("eng"));

это выглядит просто и хорошо, но не все потоки помечены так. Многие треки не имеют строки для названия языка. Единственное, что у них отличается - это строка идентификатора. И передача строки id не работает.

...