【WebRTC】视频采集

        视频采集模块在WebRTC框架中负责从视频源中采集视频数据,发送到本地显示模块和编码模块进行处理。视频源除了常见的摄像头,也可以是桌面抓屏或者窗口抓屏,或者一个视频文件。视频采集模块是平台相关的,MacOS和IOS平台一般使用AVFoundation框架, Linux平台一般使用V4L2库,Windows平台则使用MediaFoundation库。

1. 视频采集模块的实现

        WebRTC的视频采集模块源代码分布在 \src\webrtc\modules\video_capture目录下,分为平台无关部分和平台相关部分:平台无关部分定义了视频采集的通用接口,如StartCapture()  / StopCapture() / RegisterCaptureDataCallback() / DeRegisterCaptureDataCallback(),后者则在不同平台上实现了这些接口。

       

       WebRTC的视频采集模块UML类图如下:


        视频采集模块的虚基类为VideoCaptureModule, 它定义了一系列视频采集的通用接口函数, StartCapture() 和StopCapture用来开始和结束视频采集;RegisterCaptureDataCallback() 和DeRegisterCaptureDataCallback()用来注册和注销数据回调模块,数据回调模块用来把视频数据向上层模块推送。视频采集模块采用WebRTC的通用模块机制,因此它继承自Module类,用来完成通用的模块操作。

        VideoCaptureImpl类是VideoCaptureModule的实现,它实现父类定义的通用平台无关的接口。对于平台相关接口,则留在平台相关的子类中实现。该类定义了一系列工厂方法来创建平台相关的具体子类。在Linux平台上实现的子类是VideoCaptureModuleV4L2。

        VideoCaptureModuleV4L2采用V4L2库实现视频采集功能,采集到的数据通过ioctl(_deviceFd, VIDIOC_DQBUF, &buf)接口导出,由IncomingFrame()函数向上传递到VideoCaptureImpl::IncomingFrame()进行下一步处理。

       

        详细的代码跳转流程如下:


2.视频数据的建立


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值