安卓系统:一个视频视图中有多个音轨



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

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

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

不需要第三方库:

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进行编码,以便正确识别。

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

您可能必须使用VitamioVideoView.setAudioTrack()来设置音轨(例如,基于区域设置)。有关详细信息,请参阅Vitamio API文档。

现在您可以通过ExoPlayer播放多个音轨。

以下是详细信息,

  1. https://exoplayer.dev/track-selection.html
  2. Exo播放器曲目选择

VideoView类无法支持您的需求。U必须解析以获得音频流数据(您想要),以便在java层上使用AudioTrack类播放。

最新更新