推流记录
因为之前一直搞树莓派图传的方案,但是树莓派成本又太高了,并且是直接刷镜像,源码一直没看,感觉太大了,所以最多也就是跑起来玩一下,没有真正的走一下。最近又出了openipc,这个方案用安防监控市场的摄像头来实现功能,效果也是出奇得好,这个过程中接触的最多的就是推流拉流,h264编解码这一类的东西,因此觉得很有必要记录一下,并尝试用树莓派来做个简单的推拉流。
首先是openipc的方案(资料来自QQ群)
直接使用网卡,用pc来进行解码
采用nvr
内部的逻辑框图如下所示:
应该主要是用的wfb-ng的方案,然后就是视频编解码,利用网卡发出去。
下面记录一下使用虚拟机直接推流和查看:
下面记录一下使用树莓派推流和查看:
先说一下结论把,用自带的csi摄像头会好很多,采用USB摄像头会有各种各样的问题,另外就是树莓派本身的系统供电不太行,换了好点的电源适配器还是会提示电源不行,需要换大的,建议可以尝试从gpio引脚供电。
详情参考这篇文章(这文章里面的一些驱动库有很多问题,去其他地方安装即可,主要是参考他这个命令)
https://blog.csdn.net/yangcunbiao/article/details/123078719
推流命令如下:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-raw,width=640,height=480,framerate=30/1' ! videoconvert ! x264enc tune=zerolatency bitrate=1000 speed-preset=superfast ! rtph264pay ! udpsink host=192.168.2.163 port=5600
在虚拟机查看视频流如下:
gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink!
当然也可以直接用gqc查看,会好一点(qgc设置接受udp的h264流)
树莓派还可以用另一种:
https://blog.csdn.net/zz531987464/article/details/100087755
具体实施如下
上述两种都在200ms以内,但是我用的是树莓派3b,实测CPU占用在37%左右,发热有点大。
除了上述两种方案应该还有一种是mjpg-streamer,参考这个文章,是一个网页端,但是这种方案,qgc怎么都收不到视频,所以没有继续尝试,参考:
mjpg-streamer方案
下面是纯虚拟机的方案
需要注意的是纯虚拟机就是用USB摄像头实现的,需要关注摄像头本身支持的色彩空间这些信息,命令不一定通用,需要兼顾自己的摄像头。
主要参考这个文章
https://blog.csdn.net/Jay_2018/article/details/90032652
文中有提到一个库的安装需要去这里找
https://gstreamer.freedesktop.org/src/gst-rtsp/
实测效果如下,这个有点卡(用vlc拉流的)
改到qgc还是没什么改善
最后通过这个方案得到提升,延迟得到大幅度降低
原命令
./test-launch --gst-debug-level=3 "( v4l2src device=/dev/video0 ! videoconvert ! video/x-raw, format=(string)NV12, width=640, height=480, framerate=30/1 ! queue ! x264enc bitrate=10240 ! rtph264pay name=pay0 pt=96 )"
改成颜色格式为I420
./test-launch --gst-debug-level=3 "( v4l2src device=/dev/video0 ! videoconvert ! video/x-raw, format=(string)NV12, width=640, height=480, framerate=30/1 ! queue ! x264enc tune=zerolatency bitrate=10240 ! rtph264pay name=pay0 pt=96 )"
改成颜色格式为YUV2的形式
./test-launch --gst-debug-level=3 "( v4l2src device=/dev/video0 ! videoconvert ! video/x-raw, format=(string)I420, width=640, height=480, framerate=30/1 ! queue ! x264enc tune=zerolatency bitrate=10240 ! rtph264pay name=pay0 pt=96 )"
还可以尝试使用上面树莓派没试过的方案做一下推流,下这个安装包
编译完之后直接运行里面的脚本(里面有很多,用的默认的一个没注释的)
引入网页,它里面是运行了一个http server
这个最后也是很流畅的。