我正在从我的服务器上传输.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'