第五十二章 从源代码的角度分析视频采集架构和流程

流式系统的实时音视频会议中对于视频处理流水,第一级就是视频采集,视频内容可以摄像头、屏幕和视频文件,视频来源的操作系统可以是Linux、Windows、Mac,IOS以及Android,不同的平台由不同的公司开发设计,因而他们从camera获取视频的底层框架并不一样,Linux系统使用V4L2(Video for Linux Version 2),Mac和IOS都是苹果公司开发的,都使用AVFoundation框架,Windows使用的是微软开发的DS(Direct Show)框架,Android使用camera2.0接口(Camera2Capturer)采集视频。

个人技术博客: fuqifacai.github.io

更多技术资讯下载: 2img.ai

相关配图由微信小程序【字形绘梦】免费生成

第五十二章 从源代码的角度分析视频采集架构和流程

视频设备封装

视频采集的通用代码位于modules/video_capture目录,该目录下的文件组织结构如下图:

第五十二章 从源代码的角度分析视频采集架构和流程

视频采集使用c++的类和对象的封装思想,不论什么平台都有启动采集(StartCapture)和停止采集(StopCapture)等类似的视频采集控制功能需求,这样上层在调用启动采集时可以只调用StartCapture方法,而忽略具体的平台细节,图中的video_capture.h头文件定义了视频采集的虚基类VideoCaptureModule。

linux和windows目录定义了调用操作系统API进行视频采集平台相关的代码,由于Android和评估平台的提供系统API分别是基于Java和Object C所以没有放在这个目录,WebRTC提供了sdk目录用于存放和APPLE和Android平台相关的代码,sdk/objc/components/capturer和sdk/android/api/org/webrtc两个目录。为了简便性,这里仅分析视频采集的架构,具体平台细节这里不再讨论。

虚基类中的Start/StopCapture用于开始和结束数据采集,Register/DeCaptureDataCallback用于注册和注销数据回调模块,数据回调模块用于把视频数据推送给上层,而不需要上层轮训底层有没有视频数据,这样效率上会高。

VideoCaptureImpl是虚基类VideoCaptureModule实现的子类,其实现了子类的各种方法,并且也定义了通用平台无关的一些成员变量,对于平台相关在平台相关的类中实现,也就是VideoCaptureImpl会根据不同的平台泛化成对应的具体实现,它们之间的UML关系如下图:

第五十二章 从源代码的角度分析视频采集架构和流程

视频采集过程

剩余内容需解锁后查看

您需要付费解锁才能查看当前内容

VIP会员免费
已付费?登录刷新

Paragoger衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/archives/6705

(0)
上一篇 2024-09-30 4:03 下午
下一篇 2024-09-30 4:06 下午

相关推荐

发表回复

登录后才能评论
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn