vlc media server rtsp 流媒体服务器搭建成功经验分享

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了。但是这个我没有实验成功。目前还不清楚问题出在哪里。

参考链接:

live555 media server rtsp 流媒体服务器搭建成功经验分享

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

http://www.torkwrench.com/2011/12/16/d-bus-library-appears-to-be-incorrectly-set-up-failed-to-read-machine-uuid-failed-to-open-varlibdbusmachine-id/

http://blog.chinaunix.net/uid-9688646-id-3035496.html

http://blog.chinaunix.net/uid-9688646-id-3035529.html