我正在开发一款播放视频的Android应用(使用视频观看)。视频意味着既有音乐(左和右)又有叙述,但我想有选择地能够关闭MediaPlayer中的旁白曲目。
是否正确执行此操作以通过具有3个音轨(左侧和旁白)的mp4视频文件进行编码,然后使用deselectTrack()关闭naration音轨?
我不清楚MediaPlayer可以处理超过2个音轨的文档。
如果音频曲目限制为2,那么当我想要播放旁白曲目时,同时运行两个媒体播放器(将它们与seekTo()同步)是否有意义?
感谢。
答案 0 :(得分:1)
抱歉爆破了你的泡沫,但是......
1)你对“赛道”的含义有误解。轨道可以具有多个通道(例如,立体声轨道具有左和右通道)。据我了解,立体声是目前Android AudioTrack实现的范围。我还没有检查OpenSL实现是否比Java API更广泛。
2)一次只能选择1个音轨,因此您无法以您的思维方式同时拥有背景和旁白。
3)只能在准备好的状态下选择音轨(即,不在播放开始后)。 documentation提到这种限制并不理想,因此将来可能会发生变化。如果不是这个问题,你的目标可以通过在流中编码的两个音轨来实现,一个同时具有背景和音频。叙述,另一个只是背景。
您可能会发现很难同步两个MediaPlayer
,但我还没有尝试过。也许这种方法对于您的情况是可以接受的,尽管预先警告seekTo
方法不准确。这取决于文件的编码。
如果我是你,我会尝试的是拥有两个完整的编码视频,一个带有旁白,另一个没有。使用两个MediaPlayer
并保持准备。当您想切换使用seekTo
以将正确的一个放在所需位置(或附近)时。这样您就不必担心同步了。如果视频很大,这种方法可以使用更多的资源。