VideoTrackimage.png

视频数据流转

image.png
Windows系统使用的是DirectShow,Linux系统使用的是V4L2、Android系统使用的是Camera1和Camera2。

视频处理流程

image.png
视频的采集使用VideoTrack概念。VideoTrack相当于一个管道,管道的一头连接的是视频源(VideoTrackSource),而另一头连接的是编码器(VideoStreamEncoder)或本地预览窗口,这样视频数据就可以通过VideoTrack从源头流到编码器进行编码或流到本地预览窗口进行渲染了。

在这张类关系图中,核心类为VcmCapturer,即VideoSource,它将所有其他类都串联起来,类的声明位置 src\test\vcm_capturer.h 。
视频数据则是由VideoCaptureModule驱动摄像头获取的。
当VideoCaptureModule采集到视频数据后,会通过回调的方式将数据传递给VcmCapturer,而VcmCapturer则将数据转交给VideoBroadcaster进行分发,最终将数据分发给本地预览,这样我们就可以从本地预览窗口看到采集的视频了。VideoBroadcaster声明位置:src\media\base\video_broadcaster.h 。
当与远端进行视频通信时,为了让编码器可以获得本机的视频数据,同样需要将VideoStreamEncoder设置到VideoBroadcaster中,这样VideoBroadcaster在进行数据分发时会复制一份数据给VideoStreamEncoder。将VideoStreamEncoder设置到VideoBroadcaster的方法和执行线路与设置本地预览不同,它是在端对端通信的媒体协商的过程中设置的,因此只要进行正常的媒体协商操作,视频数据就可以被分发到编码器进行编码了。

学习资料

WebRTC之视频数据采集及渲染
https://www.yuque.com/caokunchao/rtendq/kzb55d