开发Webrtc项目如何实现Windows视频采集?

举报
TSINGSEE青犀视频 发表于 2021/10/12 09:45:06 2021/10/12
【摘要】 Windows平台相关的逻辑在VideoCaptureImpl的子类中实现。Windows平台的实现是webrtc::VideoCaptureModule::VideoCaptureDS代码中,利用DirectShow实现视频采集功能。

视频都是通过平台系统提供的API来实现视频采集,对于TSINGSEE青犀视频正在开发的webrtc项目来说,也有一套标准。

Webrtc windows的视频采集有一套抽象函数:webrtc::VideoCaptureModule。函数在其中定义了启动采集和启动时设置的各种参数,并且视频数据调用的接口;内部其实还有个DeviceInfo函数类,定义来获取各种相机设备信息的接口。

Webrtc中有很多的函数继承;webrtc::VideoCaptureModule::VideoCaptureImpl是webrtc::VideoCaptureModule的子类,其中是和DeviceInfo的二个接口配合使用,而这二个接口函数的实现都和平台相关。

Windows平台相关的逻辑在VideoCaptureImpl的子类中实现。Windows平台的实现是webrtc::VideoCaptureModule::VideoCaptureDS代码中,利用DirectShow实现视频采集功能。

VideoCaptureModule的基本使用相关代码可以参照webrtc自带的测试代码(test/vcm_capturer.cc)中的部分代码:

代码基本流程为:

A、首先调用VideoCaptureFactory::CreateDeviceInfo来创建DeviceInfo对象

B、再次调用m_deviceInfo->GetDeviceName来获取设备的唯一标识

C、调用VideoCaptureFactory::Create来创建,使用deviceUTF8创建VideoCaptureModule对象

D、调用m_vcm->RegisterCaptureDataCallback设置视频数据的回调

E、采集的参数(如宽高等信息)设置到VideoCapture对象中去

F、最后调用m_vcm->StartCapture启动采集

视频数据采集之后,将数据通过OnFrame回调抛出,视频数据封装在VideoFrame中,之后可以进行本地预览和编码的发送到远端。

如果停止采集,其实也很简单,只需要调用m_vcm->StopCapture,并释放m_vcm=nullptr即可,这样其里面的析构函数中会进行其他的资源释放操作来防止内泄漏。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。