树莓派上实现流媒体
2016-06-14 21:50
225 查看
最近做了一个在树莓派上实现流媒体的小项目,本打算使用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 播放。
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 播放。
相关文章推荐
- swift自定义方法添加监听方法参数
- 运动分析和对象跟踪
- 铠甲和长矛
- 21下拉列表
- STL源码剖析——deque
- [leetcode] 19. Remove Nth Node From End of List python实现【easy】
- strerror
- swift自定义按钮文本和图片的位置
- fzuoop期中练习
- strcpy拷贝越界问题
- 使用Java创建RESTful Web Service(转)
- fzuoop期中练习
- ubuntu下让theano使用GPU
- MySQL server has gone away 问题的解决方法
- 多线程同步---synchronize
- 利用Wireshark 解密HTTPS流量
- 基于KNN的手写数字识别
- swift中如何写π
- 支付SDK
- CentOs 6.5 安装OpenSSL