本文介绍的Mplayer在线播放的方法,不是指在浏览器中安装Mplayer插件这种方法,而是在命令行中操作,利用Mplayer的可以从Stdin 中播放的原理实现的。其原理是利用支持Stdout的下载软件(如Wget和Curl),将文件下载到Stdout中;再用Mplayer从Stdin读取数据并播放。由于所有数据都只临时存在于Stdin/Out中,从而可以做到不用在本地硬盘保存,在线播放影音文件。这个方法可以通用于各种发行版。关于Stdin/Out的更多信息,请在网上查阅,我并不是很清楚。
下面,以使用Wget和Mplayer为例,介绍几种比较常见的在线播放的例子。
1、在线播放rmvb文件
这个是最简单的,因为rmvb文件不牵涉到字幕问题。请先确定你已经安装realcodecs。假设我想看某一电影ftp里的某个rmvb电影,那么命令行格式为:
wget ftp://username:password@ftpserver/directory/movie.rmvb -O - | mplayer -cache 8192 -
解释一下,wget的参数“-O”是指另存为,后面的“-”就是指输出到StdOut;“|”是管道符,-cache 8192设置mplayer的缓冲区大小为8192K,最后的“-”告诉Mplayer从StdIn读数据。一般来说,流畅播放需要的带宽为60KB/s 左右。如果网速飞快的话,Mplayer会自动控制wget降速,以保持缓冲区在49%左右。
2、在线播放avi文件
这种文件一般都有单独的字幕文件。字幕文件是需要下载到本地硬盘的,把字幕文件放到StdIn中是不可以的。字幕一般有两个格式,srt和sub。对于srt字幕,假设存放位置为tmp/movie.srt,则总的命令行格式为
wget ftp://username:password@ftpserver/directory/movie.avi -O - | mplayer -cache 8192 -sub tmp/movie.srt -font /usr/share/fonts/simsun.ttf -subcp cp936 -
解释一下,Mplayer的“-sub”指定字幕文件,“-font”指定字幕文件的字体,这里的simsun.ttf对应简体宋体,繁体字幕就换繁体字体文件。“-subcp”指定字幕文件的编码,简体就是cp936,繁体就是big5。
对于sub格式字幕,需要下载movie.sub和movie.idx文件,总的命令行格式为
wget ftp://username:password@ftpserver/directory/movie.avi -O - | mplayer -cache 8192 -vobsub movie -
注意,这里“-vobsub”指定sub格式的字幕,后面只需要字幕文件的前缀名,后缀名不要!!“-font”和“-subcp”参数都用不着,因为sub字幕是特殊位图格式,跟字体和编码都没有关系。
一般来说,流畅播放需要的带宽为130KB/s左右。关于加载字幕的问题,可以参见我的另外一篇文章
http://www.linuxsir.org/bbs/showthread.php?t=249835
3、在线听歌
在线听歌也有几种方法,例如听某个ftp服务器某一目录的所有歌,那个格式就是:
wget ftp://username:password@ftpserver/directory/*.mp3 -O - | mplayer -cache 1000 -
如果某首歌的文件名中有中文,那这首歌就播不了了。这跟wget如何获取列表有关。
有很多音乐网站,也提供在线听歌(比如http://music.trueice.net),点击播放后,会生成一个列表文件(假设报存在tmp/playlist.m3u),这样就可以让wget读取这个列表文件并下载,格式为:
wget -i tmp/playlist.m3u -O - | mplayer -cache 1000 -
如果这样的网站需要登录后才能播放,也就是需要Cookies(比如http://music.xjtust.com),那也没关系,命令格式如下:
wget -i tmp/playlist.m3u --load-cookies .mozilla/firefox/default/cookies.txt - O | mplayer -cache 1000 -
这里,“--load-cookies”后面跟的就是Firefox存放Cookies的文件。
还有些网站,必须用Winamp才能播放,XMMS都不行,那也没有问题,命令格式如下:
wget -i tmp/playlist.m3u --load-cookies .mozilla/firefox/default/cookies.txt --user-agent="WinampMPEG/5.0" - O | mplayer -cache 1000 -
这样就会向服务器发送Winamp的播放器标识。
一般来说,流畅播放的带宽为20KB/s左右。
4、其它
wget 还有一个参数在连接ftp服务器的时候也很有用,就是“--no-passive-ftp”。顾名思义,不加这个参数就是Passive模式,加上就是Port模式。如果在播放过程中,wget速度变为0了,可以试试加上或者去掉这个参数。
在播放mp3文件列表时,有可能出现wget在下载其中的一个文件,但是mplayer就是不播放它。这是因为由于mplayer默认从文件的扩展名判断其音频解码类型,而可能由于文件名编码的问题,在stdin中找不到相关信息。这样mplayer就可能不知道如何解码而拒绝播放。可以在mplayer 后面增加这样一个参数“-demuxer 17”,强制它按音频格式处理。
5. 前面是转载,后面自己加一条,HTTP 方式
wget http://192.168.0.55:6060/capitalCar/uploadMovie/movie.avi -O - | mplayer -cache 8192 -