解决MPlayer无法从某个时间点开始播放(寻址播放)

MPlayer的寻址播放

MPlayer可以设置从某个时间点加载播放。例如我要播放的是http://path.mp3
从头开始播放的命令为:
$mplayer http://path.mp3

如果需要60s处开始开始播放,并且播放时长为10s,命令如下:
$mplayer -ss 60.0 -endpos 10 http://path.mp3

使用缓冲区实现寻址播放

实际上虽然mplayer参数支持寻址播放,但是在缓冲速度不够快的情况下,mp3文件会从头开始播放,也就是说寻址是无效的。
原因是,mplayer需要等待缓冲到我们制定的时间点,才能从那开始播放。
解决办法是增加缓冲区的大小,保证能缓冲到我们定点的时间,即我们需要动态的调整cache的size:
cache = time * k + base 大小为KB

$mplayer -ss 60.0 -endpos 10 -cache 2400 -cache-min 10 http://path.mp3

这样可以保证音频会从我们设置的时间点开始播放,但是需要一个缓冲60秒的时间,如果是120秒或者更大的起始时间,那么需要缓冲更长的时间。

修改HTTP版本

实际上mplayer在给音频源的server发送get请求的时候,可以指定Range参数(起始时间决定Range的起始值)但是它并没有生效,原因是mplayer的源码中hardcode使用HTTP1.0,如果使用HTTP1.1那么就能够解决这个问题,而不需要设置缓冲,这样mplayer在播放的时候可以很快跳转到任意的起始时间。

解决办法如下:
1. 下载Mplayer的源码
2. 修改stream/http.c的源代码,在303行加入http_minor_version = 1
3. 重新编译并安装MPlayer

By Code问答

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 10 = 13