使用opencv读取rtsp流,1080p,15fps,画面延迟

使用opencv源库进行摄像头的采集,opencv默认使用的解码库也是ffmpeg,其中,由于ffmpeg默认解码摄像头采集格式为YUY2(我的摄像头仅支持YUY2以及MJPG两种格式解码),但项目需求在高分辨率下流畅度也要最高,我的摄像头YUY2的解码格式不能满足要求,必须使用MJPG。

    //1.打开摄像机设备(默认第一个)
    cv::VideoCapture cap= cv::VideoCapture(0);
    //2.一定要先设置采集格式!!!
    cap.set(CV_CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
    //3.然后再设置高清采集分辨率
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);


现在绝大多数摄像头所采用的是免驱摄像头,一般有两种传输格式,YUY2和MJPG,前者是无压缩图像格式的视频,系统资源占用少(因为不用解码),不需要解码器,缺点是帧率稍慢(受限于USB分配的带宽),后者是相当于JPEG图像压缩格式,优点是帧率高(视频开启快,曝光快),缺点是影像有马赛克,并且需要解码器,会占用PC系统资源。

这是其中一种方式。
参考文章:
https://blog.csdn.net/z526882183/article/details/68484323
https://blog.csdn.net/qq_41866437/article/details/89279574
https://blog.csdn.net/lunweiwangxi3/article/details/88556911?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-2&spm=1001.2101.3001.4242

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV 中,可以使用 VideoCapture 类来捕获视频使用 VideoWriter 类来将视频写入文件或中。如果要推送 RTSP ,需要使用 FFmpeg 库。 下面是一个简单的示例代码,演示如何使用 OpenCV 和 FFmpeg 推送 RTSP : ```python import cv2 import subprocess # 设置输入和输出视频 input_url = "rtsp://xxx.xxx.xxx.xxx:xxxx/stream" output_url = "rtsp://yyy.yyy.yyy.yyy:yyyy/stream" # 打开视频 cap = cv2.VideoCapture(input_url) # 获取视频的宽度和高度 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 设置 FFmpeg 命令行参数 command = ['ffmpeg', '-y', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-pix_fmt', 'bgr24', '-s', "{}x{}".format(width, height), '-r', '25', # 视频帧率 '-i', '-', # 输入从标准输入读取 '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-preset', 'ultrafast', '-tune', 'zerolatency', '-f', 'rtsp', output_url] # 启动 FFmpeg 进程 p = subprocess.Popen(command, stdin=subprocess.PIPE) # 读取视频并推送 while True: ret, frame = cap.read() if not ret: break p.stdin.write(frame.tobytes()) # 关闭视频和 FFmpeg 进程 cap.release() p.stdin.close() p.wait() ``` 在此示例中,我们首先打开输入 RTSP ,然后获取视频的宽度和高度。接下来,我们设置 FFmpeg 命令行参数,将视频编码为 H.264 格式,并推送到输出 RTSP 中。最后,我们循环读取视频中的帧,并将其写入 FFmpeg 进程的标准输入中,从而推送到输出 RTSP 中。 请注意,此示例仅提供了一个基本框架,实际的应用可能需要进行更多的配置和调整,以满足特定的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值