采集器VideoCapturer
采集器的定义
class VideoCapturer : public sigslot::has_slots<>, public rtc::VideoSourceInterface<webrtc::VideoFrame>
- 可以看到采集器继承了VideoSourceInterface,因此采集器就是一个数据源
采集器的接口和实现
- VideoCapturer是一个抽象的类,实际的采集器是VideoCapturer的子类WebRtcVideoCapturer;但是他们只定义了一些比较通用的对外的接口,而具体的采集功能是通过VideoCaptureModule实现的
- VideoCaptureModule是采集模块,它也是一个抽象类,具体的实现位于VideoCaptureImpl
- 可以这样看:VideoCapturer/WebRtcVideoCapturer定义了采集的接口,具体的采集功能由VideoCaptureModule/VideoCaptureImpl实现
采集器包含的子模块
- WebRtcVideoCapturer包含下面的一些模块:
- VideoCaptureModule,视频采集模块
- WebRtcVcmFactory,主要是为了创建VideoCaptureModule,没有其他太大的用处
采集的流程
- 1、VideoCapturer::AddOrUpdateSink,注册数据输出点
- 2、WebRtcVideoCapturer::Start,注册一些数据回调函数,然后开始采集
- 3、VideoCaptureImpl::IncomingFrame,实际的采集工作交给VideoCaptureImpl处理,得到一帧之后VideoCaptureImpl::IncomingFrame被调用,这个函数会进行一些简单的前处理
- 4、VideoCaptureImpl::DeliverCapturedFrame,进行一些数据统计
- 5、WebRtcVideoCapturer::OnFrame(步骤1注册了数据回调函数)
- 6、VideoCapturer::OnFrame,简单的数据转发
- 7、VideoBroadcaster::OnFrame,VideoBroadcaster相当于数据输出点的集合
- 8、VideoSinkInterface::OnFrame,到了这里,原始的帧数据就从采集模块传输到了下一个模块(一般是编码模块)