У меня есть видеофайлы .MP4, которые нужно читать в VideoView в Android-активности. Эти видеоролики включают несколько звуковых дорожек, каждый из которых соответствует языку пользователя (например: английский, французский, японский...).
У меня возникли непредвиденные проблемы с поиском какой-либо помощи или документации для обеспечения такой функции. В настоящее время я могу загрузить видео и воспроизвести его в VideoView с помощью MediaController, но не для изменения звуковых дорожек.
Я не уверен, что Android SDK предоставляет любой простой способ сделать это, что оставляет мне совершенно неуверенным в том, как решить мою проблему. Я думал об извлечении каждой звуковой дорожки, загрузке звука, который я хочу в MediaPlayer, в зависимости от языка, а затем совместном воспроизведении аудио и видео. Но я боюсь, что некоторые проблемы синхронизации могут возникнуть и помешать мне это сделать.
Если у вас есть какие-либо подсказки, какие-либо советы, которые помогут мне начать работу с этой проблемой, вам более чем приятно.
Android: несколько аудиодорожек в VideoView?
Ответ 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.