vlc 由videolan.org 出品,开源免费的一款本地和网络播放器,支持个音视频格式非常多,还可以用来搭建 rtsp 流媒体服务器,非常好用,支持的平台很多:windows、mac、linux都可以用,可以做点播、多播(组播)、单播服务器。通过命令设定引用文件后就可以通过rtsp协议访问这些音视频。我用的centos6.5,搭建 rtsp 流媒体服务器的时候遇到诸多问题,现在记录下来以方便其它同学少走弯路。
1.安装vlc
cd /etc/yum.repos.d/ wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo //我试了3次才下载下来 yum list *vlc* yum -y install vlc
我这里需要149个依赖项,共150个安装包,100多兆,可能需要下载一会,每人可能不同。
2.验证vlc是否安装成功
直接敲vlc,会提示
VLC is not supposed to be run as root. Sorry.
If you need to use real-time priorities and/or privileged TCP ports
you can use vlc-wrapper (make sure it is Set-UID root and
cannot be run by non-trusted users first).
不支持root用户运行,用useradd vlcuser添加了一个名为vlcuser的用户,然后su vlcuser,再次运行vlc,成功看到版本和其它很多信息。验证成功。
useradd vlcuser su vlcuser vlc
3.防火墙放行几个后面要用到的端口
iptables -I INPUT -p TCP --dport 4212 -j ACCEPT iptables -I INPUT -p TCP --dport 5554 -j ACCEPT iptables -I INPUT -p TCP --dport 1234 -j ACCEPT
其中4212是telnet端口,配置操作vlc搭建的rtsp流媒体服务器,都需要telnet上去之后进行,我这里是为了演示,生产当中大家要主意安全限定规则或者不开该端口使用本地telnet登陆。5554是rtsp协议使用的端口,可以设置和修改,这点相对上篇文章live555 media server rtsp 流媒体服务器搭建成功经验分享来说要好很多。1234端口是组播端口,也是可以自己随意设置的。
4.开启vlc rtsp流媒体服务
vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host 0.0.0.0 --rtsp-port 5554
看到大量信息,然后中断了,仔细排查发现如下错误提示:
process 91744: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open “/var/lib/dbus/machine-id”: No such file or directory
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
Aborted
上网查了之后,执行如下命令,问题解决,再次运行开启vlc rtsp流媒体服务的命令,服务成功启动
su root dbus-uuidgen > /var/lib/dbus/machine-id su vlc vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host 0.0.0.0 --rtsp-port 5554
注意上面的ip地址0.0.0.0要替换成你自己的ip,按理说0.0.0.0代表监听本地任何ip,这样你改了ip还是能用,但我实际测试发现点播不了。而且,端口要用–rtsp-port指定,用0.0.0.0:5554的方式会有错误提示,实际监听到554的端口去了,然后554端口被live555mediaserver占用,关掉live555mediaserver才正常。后面telnet上去配置vod服务的时候会在vlc rtsp 流媒体服务器的状态中看到如下信息:
main vod server error: Ignoring port 5554 (using 554)
main vod server: Specify port 5554 separately with the rtsp-port option instead.
main vod server debug: net: listening to 0.0.0.0 port 554
main vod server error: socket bind error (Permission denied)
main vod server error: cannot create socket(s) for HTTP host
看到这句 [telnet] main interface debug: net: listening to localhost port 4212 说明telnet监听正常。
当然可能还会看到一些错误,但是暂时不影响服务的正常使用,可以忽略:
inhibit interface error: Failed to connect to the D-Bus session daemon: /bin/dbus-launch terminated abnormally without any error message
main interface error: no suitable interface module
main interface error: no suitable interface module
main libvlc error: interface “globalhotkeys,none” initialization failed
还有一些警告,应该也不影响:
stream warning: unknown box type btrt (incompletely loaded)
demux warning: CTTS table
5.进入telnet添加点播项目,先安装telnet客户端
yum -y install telnet telnet 127.0.0.1 4212
输入前面设定的密码:videolan,就进入vlc rtsp 流媒体服务器配置的telnet操作界面了。
a 架设点播服务vod
new vod1 vod enabled setup vod1 input /home/01.avi
解释: new 新建了一个名字叫vod1的vod点播服务,设置vod1的input 输入文件为/home/01.avi。你可以通过这种方式添加很多个点播服务。
b 架设组播服务ch1
new ch1 broadcast enabled setup ch1 input /home/02.avi loop setup ch1 output #duplicate{dst=rtp{dst=0.0.0.0,mux=ts,port=1234}} control ch1 play
上面的0.0.0.0换成你自己的组播服务器ip地址。解释下:new 新建了一个名字叫ch1的broadcast组播。设置ch1的input输入文件为/home/02.avi,loop可选,表示循环播放。设置ch1的output输出为#duplicate{dst=rtp{dst=0.0.0.0,mux=ts,port=1234}},表示rtp协议的ts流发送到组播地址为0.0.0.0,端口1234。控制ch1开始播放。
扩充:
1) output后面可以跟sout参数。具体可以参考vlc->媒体->流->流输出界面的已生成的流输出字符串。
2) control ch1后面还可以加stop,pause,seek 百分比。表示停止,暂停和跳转到百分之几的位置。
c 架设单播服务
前面组播命令中output换成单播的地址就行了。其他的都一样的。注意不要new重名了。
可能会看到这些警告和错误:
demux warning: track[0x2] will be disabled (eof?)
stream_out_rtp vod server error: cannot add this stream (unsupported codec: RV40)
这表明你的视频格式vlc不支持,比如这个rv40就是rmvb格式的视频所用的编码,vlc不支持,这种情况就会出现该视频通过rtsp播放画面是黑的,但是有声音,因为声音使用的vlc支持的某种格式。同理,如果有画面,没有声音,说明你的视频使用的视频编码格式受到vlc的支持,而音频编码格式不受vlc支持。需要你去手动转码或者采用别的处理方式。
d 保存以上配置,下次重启可以直接加载,不需要全部重新输入一遍,试想你提供了100个点播和组播服务,每次都手动输入。。。
save /home/vlc.vod.cfg load /home/vlc.vod.cfg
实际我测试这个没成功,报错:save : Unable to save to file
6.测试vlc rtsp流媒体服务器
在另一台电脑开启一个vlc,打开rtsp://127.0.0.1:5554/vod1。应该就可以以rtsp协议串流的方式播放/home/01.avi这个文件了。127.0.0.1可以换成自己的ip。
打开rtp://127.0.0.1:1234。应该就可以以直播的方式观看/home/02.avi了。但是这个我没有实验成功。目前还不清楚问题出在哪里。
参考链接:
http://www.cnblogs.com/bushe/p/4027882.html
http://www.hackersgarage.com/vlc-is-not-supposed-to-be-run-as-root-sorry-solution.html
http://www.cnblogs.com/ylan2009/articles/2321177.html