opencv 视频实时处理_opencv 控制摄像头

opencv 视频实时处理_opencv 控制摄像头最近研究了通过OpenCV采集摄像头数据,并同时将视频流数据推送到RTSP和RTMP。RTSP服务采用开源的LIVE555(需要自己修改和实现部分代码)。RTMP服务采用开源CRtmpServer。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

最近研究了通过OpenCV采集摄像头数据,并同时将视频流数据推送到RTSP和RTMP。

RTSP服务采用开源的LIVE555(需要自己修改和实现部分代码)。

RTMP服务采用开源CRtmpServer。

具体的实现细节就不细说了,大概的步骤如下:

1. OpenCV采集摄像头的一帧数据(cvQueryFrame函数)

2. FFmpeg编码该帧为H264和FLV流数据

3. 推送H264到LIVE555(自己实现),同时通过推送FLV流到CRtmpServer(通过FFmpeg)

因为CRtmpServer和LIVE555都是开源的,网上有很多资料;并且FFmpeg的H264和FLV编码、H264和FLV流推送这两个功能之前已经在其他项目总已经实现过,而且OpenCV在网上也有很多关于摄像头数据采集的资料,因此实现过程并不复杂。

但是在接收RTSP和RTMP流,并播放时总感觉比较卡,特别是RTMP感觉非常明显。视频老是在缓冲。最后发现是OpenCV的cvQueryFrame非常耗时间:

while (pEncoder->m_bRunFlag)
		{
			LARGE_INTEGER freq;
			LARGE_INTEGER start;
			LARGE_INTEGER end;

			QueryPerformanceFrequency(&freq);
			QueryPerformanceCounter(&start);

			//获取一帧数据
			pFrame = cvQueryFrame(pCapture);

			QueryPerformanceCounter(&end);

			//发送数据给H264编码器
			if (pFrame)
			{
				frame.nFrameHeight = pFrame->height;
				frame.nFrameWidth = pFrame->width;
				frame.nFrameSize = pFrame->imageSize;
				frame.nFrameType = AEC_VIDEO_DATA_RGB24;
				frame.pszFrameData = pFrame->imageData;
				g_pH264SendFrame(frame);
			}

			double fElapsedTime = double(end.QuadPart - start.QuadPart) / double(freq.QuadPart);
			TRACE("Elapsed time = %f ms\n", fElapsedTime * 1000);
		}

Jetbrains全家桶1年46,售后保障稳定

opencv 视频实时处理_opencv 控制摄像头

opencv 视频实时处理_opencv 控制摄像头

也就是说fps平均12左右,RTSP还比较流畅,但是RTMP播放一秒后就又开始缓冲。将H264和FLV编码器的帧率从25降低到8,效果也一样。

看来后续需要研究其他摄像头视频数据采集方案,特此笔记。

后记:

经过查找资料发现,OpenCV底层采用的是微软的VFW(Video for Window)。VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包,VFW的核心是AVI文件标准。AVI(Audio Video Interleave)文件中的音、视频数据帧交错存放。

VFW的主要函数如下:

(1)capCreateCaptureWindow()::创建视频窗体
(2)capDriverConnect(): 连接驱动
(3)capGetStatus():获得视频状态
(4)capPreviewRate():设置预览速率
(5)capFileSaveAs():将视频转换成AVI文件
(6)capFileSaveDIB():将视频转换成BMP文件
(7)capGetUserData():获取用户定义的数据
(8)capGetVideoFormat(): 获取视频格式
(9)capGrabFrame():获取当前帧
(10)capDlgVideoDisplay():设置显示的对话框
(11)capCaptureSetSetup():设置视频捕获
(12)capSetCallbackOnFrame():设置每帧的回调函数
(13)capSetCallbackOnVideoStream():设置视频流的回调函数
(14)capSetCallbackOnWaveStream():设置声音流的回调函数

后续将尝试DirectShow方式驱动摄像头,实现RTSP和RTMP直播

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179402.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月21日 下午6:00
下一篇 2022年10月21日 下午6:00


相关推荐

  • k8s–证书签发

    k8s–证书签发1.准备签发证书环境运维主机hdss-1-200.host.com上:2.安装CFSSL证书签发工具CFSSL:R1.2cfssl下载地址https://pkg.cfssl.org/R1.2/cfssl_linux-amd64cfssl-json下载地址https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64cfssl-certinfo下载地址https://pkg.cfssl.org/R1.2/cfssl-certinfo_li…

    2022年5月9日
    96
  • 不使用Form表单实现页面查询重置功能

    不使用Form表单实现页面查询重置功能问题描述 因为有些页面中的查询选择框太多了 所以要求在这些页面上添加重置按钮选择框使用的是 antd 的 Select 组件 antd 的组件好用是好用 但是密闭性太强了 想要根据需求自定义就会变得很困难其中 Select 组件中占用了 value 这个属性 将其定义为 指定当前选中的条目这就带来一个问题 原本初始时我设置了 placeholder 给出提示信息 结果现在直接就显示下拉框中的第一条信息 我准备使用点击 Button

    2026年3月18日
    2
  • android之ArrayAdapter的重写

    昨天介绍了ArrayAdapter的使用,今天介绍一下更加实用的一点,对它进行重写,满足自己的个性化设计需要.ArrayAdapter(数组适配器)一般用于显示一行文本信息,所以比较容易。public ArrayAdapter(Context context,int textViewResourceId, List objects)上面的这行代码来装配数据,要装配这些数据就需要一个连接

    2022年3月10日
    88
  • python求最大公约数和最小公倍数的两种方法

    python求最大公约数和最小公倍数的两种方法最大公约数和最小公倍数的求解可以归结为求最大公约数,最小公倍数为两数乘积除以最大公倍数这里介绍两种求解方法,一种数常规易于理解的,一种是用辗转相除法实现的#求最大公倍数和最小公约数a=int(input(“输入一个数字”))b=int(input(“再输入一个数字”))m=[]ifa>b:smaller=belse:smaller=afori…

    2022年5月17日
    50
  • python 如何爬取王者荣耀全英雄皮肤

    python 如何爬取王者荣耀全英雄皮肤

    2022年2月20日
    87
  • pycharm使用git提交和拉取远程代码

    pycharm使用git提交和拉取远程代码pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交和拉取远程代码 pycharm 使用 git 提交

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号