Android:VideoView中的多个音轨?

时间:2012-01-09 13:58:43

标签: android audio video

我有一些必须在Android活动的VideoView中读取的.MP4视频文件。这些视频包括几个音轨,每个音轨对应一种用户语言(例如:英语,法语,日语......) 我找到任何帮助或文档来提供这样的功能时遇到了意外的麻烦。我目前能够加载视频并使用MediaController在VideoView中播放,但不能更改音轨。

我不确定Android SDK提供了任何简单的方法来做到这一点,这让我对如何解决我的问题毫无头绪。我正在考虑提取每个音轨,根据语言将我想要的音频加载到MediaPlayer中,然后一起播放音频和视频。但我担心可能会出现一些同步问题并阻止我这样做。

如果你有任何线索,任何建议,以帮助我开始解决这个问题,你非常欢迎。

4 个答案:

答案 0 :(得分:4)

不需要第三方图书馆:

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进行编码才能被正确识别。

答案 1 :(得分:3)

尚未测试过自己,但似乎Vitamio库支持多个音轨(以及其他有趣的功能)。它与Android的VideoView类API兼容。

可能你必须使用 Vitamio VideoView.setAudioTrack()来设置音轨(例如根据语言环境)。有关详细信息,请参阅Vitamio API docs

答案 2 :(得分:0)

现在您可以通过ExoPlayer播放多个音频文件。

这是详细信息,

  1. https://exoplayer.dev/track-selection.html[1]
  2. Exo Player Track Selection

答案 3 :(得分:-1)

VideoView类不支持你的require.U必须解析才能获得音频流数据(你想要)在java层上播放AudioTrack类。