文章目录
视频采集是媒体库最基础功能。但是它的实现与操作系统有强相关性,因为不同的操作系统提供的视频采集接口不一样。视频采集模块也具有通用性,不同媒体库的视频采集模块实现的功能是相同的,主要包括如下几个功能:
- 检索视频采集设备
- 指定视频采集设备进行采集
- 根据指定的采集参数(包括分辨率,帧率,图像格式)来初始化设备
- 视频帧数据分发
所以如果要实现自己的媒体库,完全可以把webrtc中视频采集模块移植过来。尽管是复用代码,但也需要弄清楚代码的结构,了解它特点和局限性。
我将从来这三个方面:视频采集类,视频数据帧处理类,视频分发框架来分析webrtc视频采集的实现,这篇文章主要介绍前两个方面。
webrtc中视频采集类
webrtc中视频采集模块的代码位于video_capture目录下。建立了两个类体系来定义了视频采集的接口,分别是DeviceInfo和VideoCaptureModule。还有一个辅助类VideoCaptureFactory,是个工厂类,用来创建DeviceInfo和VideoCaptureModule具体的实现对象。
DeviceInfo
如下为对应的类图

DeviceInfo可以从接口的名字上看出,这个类提供就是检索视频采集设备及采集能力的接口
-
DeviceInfo为抽象类,定义的都是接口 -
DeviceInofImpl也为抽象类,实现了可以提炼出来的平台通用的接口 -
DeviceInfoDs和DeviceInfoLinux分别对应的是windows和linux的视频采集实现了 -
采集设备有唯一标示,接口中对应为
deviceUniqueIdUTF8
GetBestMatchedCapability
它有个GetBestMatchedCapability接口要着重的讲一下,它实现了如何决策视频采集参数,所谓的视频采集参数包括:分辨率,帧率,图像格式 ,分别决定了视频的清晰度,流畅度和保真度。
GetBestMatchedCapability中有个requested参数就表示上层业务指定的参数,但是指定的参数与设备的实际支持的参数可能匹配不了,最坏的情况是所有的都匹配不上。所以往往是找一个最接近而不是完全匹配的,比如:设置的参数是 640480 30fps,但是设备支持的有1080P(19201080 30fps),720P(1080*72

最低0.47元/天 解锁文章
3275

被折叠的 条评论
为什么被折叠?



