WebRtcVideoEngine 是 WebRTC 媒体引擎Media Engine中负责视频子系统初始化和全局管理的核心类。它继承自 VideoEngineInterface主要充当了上层应用通过 PeerConnection 和 MediaEngine与底层 WebRTC Call 模块之间的桥梁。它的职责比音频引擎更轻量因为视频流的复杂性更多地被下放到了 WebRtcVideoChannel 中处理。WebRTC 视频功能的全局配置和管理者。它不直接处理视频帧或网络包而是负责1. 定义能力告诉系统“我能编码/解码什么格式”。2. 创建上下文为每个通话PeerConnection创建独立的视频处理通道 (WebRtcVideoChannel)。3. 管理依赖持有并管理编解码器工厂的生命周期。一核心职责• 工厂模式入口它是创建视频媒体通道WebRtcVideoChannel的工厂。每个 PeerConnection 都会通过它创建一个独立的视频通道实例。• 编解码器管理持有视频编码器工厂 (VideoEncoderFactory) 和解码器工厂 (VideoDecoderFactory)。这些工厂决定了当前环境支持哪些视频编码格式如 VP8, VP9, H.264, AV1 等无论是软件编码还是硬件加速编码。• 能力协商支持提供当前引擎支持的发送和接收编解码器列表用于 SDP Offer/Answer 协商。二 构造函数与成员变量2.1 构造函数依赖注入WebRtcVideoEngine( std::unique_ptrwebrtc::VideoEncoderFactory video_encoder_factory, std::unique_ptrwebrtc::VideoDecoderFactory video_decoder_factory);• video_encoder_factory: 负责创建视频编码器实例。WebRTC 允许注入自定义工厂以支持特定的硬件编码器或第三方软件编码器。• video_decoder_factory: 负责创建视频解码器实例。同样支持硬件加速解码器的注入。• 所有权WebRtcVideoEngine 拥有这两个工厂的所有权std::unique_ptr并在生命周期结束时销毁它们。2.2 成员变量const std::unique_ptrwebrtc::VideoDecoderFactory decoder_factory_; const std::unique_ptrwebrtc::VideoEncoderFactory encoder_factory_; const std::unique_ptrwebrtc::VideoBitrateAllocatorFactory bitrate_allocator_factory_;• encoder_factory_ / decoder_factory_:存储传入的编解码器工厂。当创建 WebRtcVideoChannel 时这些工厂会被传递给通道以便通道在需要时创建具体的编码器或解码器对象。• bitrate_allocator_factory_:虽然构造函数签名中未直接显示初始化列表但类定义中包含此成员。它用于创建比特率分配器决定如何在多个视频流如 simulcast 多层流之间分配可用的网络带宽。三、主要接口方法3.1 CreateMediaChannel(...):• 最重要的方法。当 PeerConnection 需要建立视频连接时调用。• 它会实例化一个 WebRtcVideoChannel 对象并将 Call 实例、配置、选项、加密选项以及编解码器工厂传递给它。• 返回的 VideoMediaChannel* 指针将被上层用于控制视频流的发送和接收。3.2 send_codecs() / recv_codecs():• 查询当前引擎支持的编解码器列表。• 内部会遍历 encoder_factory_ 和 decoder_factory_ 获取所有可用的编码格式及其参数如 profile, level 等并将其转换为 cricket::VideoCodec 结构体列表供 SDP 生成使用。3.3 GetRtpHeaderExtensions():• 返回支持 RTP 头部扩展列表如绝对发送时间、视频旋转、色彩空间信息等。四与 WebRtcVideoChannel 配合使用• 一对多关系一个 WebRtcVideoEngine 实例可以被多个 PeerConnection 共享尽管在现代 Chromium/WebRTC 架构中通常每个 PeerConnectionFactory 会有一个引擎实例或者引擎是单例的但每个 PeerConnection 会拥有一个独立的 WebRtcVideoChannel。• 资源分享WebRtcVideoEngine 持有的编解码器工厂是共享资源。WebRtcVideoChannel 并不复制这些工厂而是引用它们来创建具体的编解码器实例。
WebRtcVideoEngine模块介绍(新版webrtc)
WebRtcVideoEngine 是 WebRTC 媒体引擎Media Engine中负责视频子系统初始化和全局管理的核心类。它继承自 VideoEngineInterface主要充当了上层应用通过 PeerConnection 和 MediaEngine与底层 WebRTC Call 模块之间的桥梁。它的职责比音频引擎更轻量因为视频流的复杂性更多地被下放到了 WebRtcVideoChannel 中处理。WebRTC 视频功能的全局配置和管理者。它不直接处理视频帧或网络包而是负责1. 定义能力告诉系统“我能编码/解码什么格式”。2. 创建上下文为每个通话PeerConnection创建独立的视频处理通道 (WebRtcVideoChannel)。3. 管理依赖持有并管理编解码器工厂的生命周期。一核心职责• 工厂模式入口它是创建视频媒体通道WebRtcVideoChannel的工厂。每个 PeerConnection 都会通过它创建一个独立的视频通道实例。• 编解码器管理持有视频编码器工厂 (VideoEncoderFactory) 和解码器工厂 (VideoDecoderFactory)。这些工厂决定了当前环境支持哪些视频编码格式如 VP8, VP9, H.264, AV1 等无论是软件编码还是硬件加速编码。• 能力协商支持提供当前引擎支持的发送和接收编解码器列表用于 SDP Offer/Answer 协商。二 构造函数与成员变量2.1 构造函数依赖注入WebRtcVideoEngine( std::unique_ptrwebrtc::VideoEncoderFactory video_encoder_factory, std::unique_ptrwebrtc::VideoDecoderFactory video_decoder_factory);• video_encoder_factory: 负责创建视频编码器实例。WebRTC 允许注入自定义工厂以支持特定的硬件编码器或第三方软件编码器。• video_decoder_factory: 负责创建视频解码器实例。同样支持硬件加速解码器的注入。• 所有权WebRtcVideoEngine 拥有这两个工厂的所有权std::unique_ptr并在生命周期结束时销毁它们。2.2 成员变量const std::unique_ptrwebrtc::VideoDecoderFactory decoder_factory_; const std::unique_ptrwebrtc::VideoEncoderFactory encoder_factory_; const std::unique_ptrwebrtc::VideoBitrateAllocatorFactory bitrate_allocator_factory_;• encoder_factory_ / decoder_factory_:存储传入的编解码器工厂。当创建 WebRtcVideoChannel 时这些工厂会被传递给通道以便通道在需要时创建具体的编码器或解码器对象。• bitrate_allocator_factory_:虽然构造函数签名中未直接显示初始化列表但类定义中包含此成员。它用于创建比特率分配器决定如何在多个视频流如 simulcast 多层流之间分配可用的网络带宽。三、主要接口方法3.1 CreateMediaChannel(...):• 最重要的方法。当 PeerConnection 需要建立视频连接时调用。• 它会实例化一个 WebRtcVideoChannel 对象并将 Call 实例、配置、选项、加密选项以及编解码器工厂传递给它。• 返回的 VideoMediaChannel* 指针将被上层用于控制视频流的发送和接收。3.2 send_codecs() / recv_codecs():• 查询当前引擎支持的编解码器列表。• 内部会遍历 encoder_factory_ 和 decoder_factory_ 获取所有可用的编码格式及其参数如 profile, level 等并将其转换为 cricket::VideoCodec 结构体列表供 SDP 生成使用。3.3 GetRtpHeaderExtensions():• 返回支持 RTP 头部扩展列表如绝对发送时间、视频旋转、色彩空间信息等。四与 WebRtcVideoChannel 配合使用• 一对多关系一个 WebRtcVideoEngine 实例可以被多个 PeerConnection 共享尽管在现代 Chromium/WebRTC 架构中通常每个 PeerConnectionFactory 会有一个引擎实例或者引擎是单例的但每个 PeerConnection 会拥有一个独立的 WebRtcVideoChannel。• 资源分享WebRtcVideoEngine 持有的编解码器工厂是共享资源。WebRtcVideoChannel 并不复制这些工厂而是引用它们来创建具体的编解码器实例。