Android: несколько звуковых дорожек в VideoView? - PullRequest
28 голосов
/ 09 января 2012

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

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

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

Ответы [ 3 ]

4 голосов
/ 19 июня 2016

Библиотека сторонних производителей не требуется:

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;
    }
});

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

3 голосов
/ 06 июля 2012

Сам еще не тестировал, но, похоже, библиотека Vitamio имеет поддержку нескольких звуковых дорожек (среди других интересных функций). Это API-совместимо с VideoView классом от Android.

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

0 голосов
/ 25 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...