最近做了一个在树莓派上实现流媒体的小项目,本打算使用vlc做的,但是结果发现在vlc上实现流媒体造成的延迟太大,目测大于一秒。于是通过查询资料,共发现了三种方法:
1.通过vlc,
我在这里只说明一下rtp的命令行方式。
在发送端:
raspivid -o – -t 0 -w 640 -h 360 -fps 25|cvlc -vvv stream:///dev/stdin –sout ‘#rtp{dst=192.168.1.66,port=8080,ttl=1}’ :demux=h264
也就是朝192.168.1.66的8080端口发送视频数据
这时你在下面的输出中会看到一段如下面的语句:
v=0
o=- 15779103922725042126 15779103922725042126 IN IP4 raspberrypi
s=Unnamed
i=N/A
c=IN IP4 192.168.1.66
t=0 0
a=tool:vlc 2.2.1
a=recvonly
a=type:broadcast
a=charset:UTF-8
m=video 8080 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
把它复制下来,然后保存在一个文件中,同时以.sdp后缀的形式命名。
接收端:
在接收端把上面的文件用VLC打开即可。这个sdp文件其实就是对接收端的配置文件。
如果延迟大的话,可以在接收端把网络延迟修改到100–300ms之间,这样不会对视频质量有太大影响。经过我的实验,最小延迟貌似也在1s以上,所以我放弃了这种方法。
2.通过netcat
3.通过gstreamer
其中vlc的延迟最大。
我使用了netcat方法。
发送端:
raspivid -o – -t 0 -w 640 -h 360 -fps 25|nc 192.168.1.66 8080
即向192.168.1.66的8080端口发送采集到的视频数据,raspivid采集到的视频数据会通过h264压缩,
播放端:
nc -l 8080 | mplayer
即监听8080端口,并且使用mplayer 播放。