MediaPlayer错误计算音频持续时间。当音频到达结尾时,getCurrentPosition()会返回

时间:2017-03-25 08:24:25

标签: android audio ffmpeg android-mediaplayer

我正在从我的服务器上传输.ogg文件。 x.a播放歌曲以完成,但当它到达歌曲的结尾时,MediaPlayer返回的时间少于歌曲的实际持续时间。对于一首歌来说,它只会被一秒钟关闭,但是对于另一首歌来说它只有13秒。

我有一个getCurrentPosition(),它通过调用SeekBar每秒更新一次,一旦栏到达终点,它实际上会跳回几秒钟。我不能再将getCurrentPosition()用于超过错误计算时间的歌曲片段,因为我收到错误:seekTo()

Chrome的html视频元素只显示持续时间不正确的歌曲。

其他工具,如ffmpeg或Windows 10上的这款名为PowerMediaPlayer的应用程序,都可以完美地计算歌曲的持续时间。

我认为这个问题与此answer有关,但解决方案假设ffmpeg也会错误计算持续时间,这不是这里的情况。将音频文件转换为ogg时使用Attempt to seek to past end of file标志并没有改变任何内容。

我有什么选择?有没有办法让MediaPlayer计算正确的持续时间?

更新

转换为mp3没有问题(尽管我使用的是-vn而不是audioBitrate('96k'),但我需要一个解决方案才能让ogg文件正常工作。以下是我使用ffmpeg执行转换的方法。另一件值得注意的事情是,当我使用audioQuality(2)代替'vorbis'代码时,如果有的话,持续时间不到一秒钟。但是,我必须使用'libvorbis'因为{ {1}}是实验性的,并且在给定相同音频质量参数的情况下,在不同文件中产生显着不一致的比特率。(并且它完全忽略'libvorbis'。)

'vorbis'

0 个答案:

没有答案