VLC是一种开源的播放器,同时也可以用作流媒体服务器。今天试验了几种搭建流媒体服务器的方法,这里做一个归纳总结。
本文使用的VLC版本为:2.1.5。
服务器平台操作系统:Windows 7 32位 旗舰版(Service Pack 1);
服务器IP地址:10.1.11.21;
客户端平台操作系统:Windows XP32位 Home Edition 2002(Service Pack 3);
客户端IP地址:10.1.11.99。
流媒体服务器大多是基于UDP的,这里只试验了其中几种。
1. UDP(Latency)传统模式
服务器端操作
打开“媒体——流”选项,如图所示。
点击“添加”按钮选择流媒体文件,然后点击“串流”按钮。
检查来源,没问题了选择“Next”。
在“目标设置”界面选择“UDP (legacy)”,如果要在本地同步显示视频,可勾选“在本地显示”,然后点击添加按钮。
在流目标输出“地址”栏输入客户端IP地址,本次实验客户端为10.1.11.99,默认端口1234,再单击“Next”。
在“转码选项”中,由于本次实验视频源为已经用H.264编码过,所以可以不勾选“激活转码”,如果视频源为原始视频,则可以通过勾选此复选框来选择编码方式(使用.h264视频源,并勾选“激活编码”,配置文件选择“H.264 + MP3”,经过试验也可以正常工作)。
下一步,直接选择“Stream”,服务器就开始发送视频流了。
客户端操作
点击“媒体——打开网络串流”,在弹出的框中输入“udp://@:1234”,点击“播放”按钮即可。
通过EtherPeek抓包工具,可看到服务器在不停发送UDP数据包。
下图为UDP数据包的视频数据。
实验*选择了三种数据源:h264文件,TS文件和USB摄像头,都可以播放。其中,h264文件由于分辨率不高,播放流畅;TS文件经h.264编码后,在客户端会有卡顿现象,明显网络传输带宽已经不够用了;USB摄像头视频经h.264编码后也可以正常解码播放,但是延迟比较大。
通过界面操作比较简单,但如果经常进行此类工作的话,脚本是比较靠谱的。这里并没有对脚本进行测试,只把脚本作为备份内容列在这里。
命令行操作方式
服务端(10.1.11.21):
vlc -vvv sample1.avi --sout udp: 10.1.11.21:1234--ttl 10
客户端(10.1.11.99):
vlc udp://@:1234
2. RTP方式
抓包发现,VLC的RTP是基于UDP的。
服务器端操作
前几步和“UDP(legacy)传统模式”类似,这里不再赘述。主要是在目标里面选择“RTP / MPEG Transport Stream”这个选项;目标IP为客户端IP(10.1.11.99),端口为默认值(5004)。
客户端操作
输入网路URL:rtp://@:5004,点击播放即可。
命令行操作方式
服务端(10.1.11.21):
vlc -vvvsample1.avi --sout
"#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{dst=10.1.11.21,port=5004,mux=ts,ttl=10}"
客户端(10.1.11.99):
</pre><pre name="code" class="cpp">vlc rtp://@:5004
3. RTSP方式
RTSP方式是通过RTP进行流媒体数据的传输的,VLC的实现也是基于UDP的。这种方式的图形界面操作与HTTP方式类似,就不赘述了。下面是命令行方式的操作。
命令行操作方式
服务端(10.1.11.21):
vlc -vvv sample1.avi
--sout "#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/test}"
客户端(10.1.11.99):
vlc rtsp:// 10.1.11.21:8554/test
用VLC搭建基于TCP的流媒体服务器
VLC的http方式搭建的流媒体服务器是用TCP方式进行数据传输的。
HTTP方式
界面操作与UDP相似,只是在服务器端,端口默认为8080,路径可设置为“/test”。
在客户端,URL为http://10.1.11.21:8080/test 。
命令行操作方式
服务端(10.1.11.21):
vlc -vvv sample1.avi --sout "#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:http{mux=ffmpeg{mux=flv},dst=:8080/test}"
客户端(10.1.11.99):
vlc http:// 10.1.11.21:8080/test
以上就是全部的实验内容,命令行操作方式并没有在实验中验证,列在这里作为参考吧。