Подтвердить что ты не робот

Android: несколько аудиодорожек в VideoView?

У меня есть видеофайлы .MP4, которые нужно читать в VideoView в Android-активности. Эти видеоролики включают несколько звуковых дорожек, каждый из которых соответствует языку пользователя (например: английский, французский, японский...).
У меня возникли непредвиденные проблемы с поиском какой-либо помощи или документации для обеспечения такой функции. В настоящее время я могу загрузить видео и воспроизвести его в VideoView с помощью MediaController, но не для изменения звуковых дорожек.

Я не уверен, что Android SDK предоставляет любой простой способ сделать это, что оставляет мне совершенно неуверенным в том, как решить мою проблему. Я думал об извлечении каждой звуковой дорожки, загрузке звука, который я хочу в MediaPlayer, в зависимости от языка, а затем совместном воспроизведении аудио и видео. Но я боюсь, что некоторые проблемы синхронизации могут возникнуть и помешать мне это сделать.

Если у вас есть какие-либо подсказки, какие-либо советы, которые помогут мне начать работу с этой проблемой, вам более чем приятно.

4b9b3361

Ответ 1

Не тестировал себя, но, похоже, что Vitamio библиотека поддерживает несколько звуковых дорожек (среди других интересных особенностей). Он совместим с API с классом VideoView от Android.

Вероятно, вам нужно будет использовать Vitamio VideoView.setAudioTrack() для установки звуковой дорожки (например, на основе языка). Подробнее см. Документы API Vitamio.

Ответ 2

Не требуется сторонняя библиотека:

mVideoView.setVideoURI(Uri.parse("")); // set video source    

mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        MediaPlayer.TrackInfo[] trackInfoArray = mp.getTrackInfo();
        for (int i = 0; i < trackInfoArray.length; i++) {
            // you can switch out the language comparison logic to whatever works for you
            if (trackInfoArray[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO
                && trackInfoArray[i].getLanguage().equals(Locale.getDefault().getISO3Language()) {
                mp.selectTrack(i);
                break;
            }
         }
         return true;
    }
});

Насколько я могу судить - звуковые дорожки должны быть закодированы в 3-буквенном ISO 639-2, чтобы быть распознанным правильно.

Ответ 3

Класс VideoView не может поддерживать ваш require.U необходимо проанализировать, чтобы получить данные аудиопотока (вы хотите), чтобы играть с классом AudioTrack на уровне java.