我们使用gstreamer-rtsp-server ,实现了USB相机转RTSP网络流的基本功能,之前很多篇都讲了如何实现,这一次我们集中精力解决之前的一些问题。
文章【GStreamer 】5-4-USB相机转RTSP网络视频流优化转发_机器人虎哥的博客-CSDN博客
我们解决了使用USB相机源,示例代码不能支持多路客户端的问题。这篇,我们主要来解决之前图像质量不好,以及,采用USB相机的JPEG格式视频数据来做RTSP服务器的数据源。
目录
1、推流usb摄像头JPEG格式视频
2、推流usb摄像头JPEG格式视频,硬件加速优化
3、推流usb摄像头JPEG格式视频,提高硬件压缩的清晰度
4、推流usb摄像头YUV格式视频,提高硬件压缩的清晰度
1、推流usb摄像头JPEG格式视频
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegdec ! timeoverlay ! tee name=vsrc vsrc. ! queue ! videoconvert ! ximagesink vsrc. ! queue ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
同时还使用用了tee分支插件,会同步有一路视频显示,一路被推流
同步显示的会很快,推流后的会有延时。通过叠加一个计时器timeoverlay可以比较拉流显示的延迟时间我们去除同步显示,后可以测试看看:
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegdec ! timeoverlay ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
我们再试试大尺寸的图像:
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! timeoverlay ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
测试还发现一个现象,我们目前每次建立新的客户端,在新的客户端完全建立连接前,旧的客户端的视频是卡主不动的,所有客户端最终的视频是同步一致的,这个应该也是一个问题
2、推流usb摄像头JPEG格式视频,硬件加速优化
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! timeoverlay ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
使用硬件解码:nvjpegdec
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! nvjpegdec ! timeoverlay ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
CPU的资源占用还是节省了不少,进一步使用硬件压缩
#调试命令
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=30/1 \
! nvjpegdec ! timeoverlay \
! queue ! omxh264enc bitrate=2048 ! rtph264pay name=pay0 pt=96 \
! fakesink sync=false
#使用硬件加速压缩
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! nvjpegdec ! timeoverlay ! queue ! omxh264enc bitrate=2048 ! rtph264pay name=pay0 pt=96 )"
感觉图像质量变差外,没有发现其它效果。优化效果并不明显。
3、推流usb摄像头JPEG格式视频,提高硬件压缩的清晰度
#使用硬件加速压缩
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! nvjpegdec ! timeoverlay ! queue ! omxh264enc ! rtph264pay name=pay0 pt=96 )"
只要不约束参数bitrate=2048,让其自适应,就可以实现和原始画质一样的效果。
bitrate=2048 原来都是这个参数导致的!不要乱用参数啊。
4、推流usb摄像头YUV格式视频,提高硬件压缩的清晰度
#图像质量有瑕疵
./test-launch --gst-debug-level=3 "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640, height=480, framerate=25/1 ! nvvidconv ! video/x-raw(memory:NVMM), format=(string)I420, width=640, height=480, framerate=25/1 ! queue ! omxh264enc bitrate=2048 ! rtph264pay name=pay0 pt=96 )"
#可以支持多客户端,并且图像和原始质量基本一致
./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640, height=480, framerate=25/1 ! timeoverlay ! nvvidconv ! video/x-raw(memory:NVMM), format=(string)I420, width=640, height=480, framerate=25/1 ! queue ! omxh264enc ! rtph264pay name=pay0 pt=96 )"
640X480的视频资源占用率其实真心都不高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)