webrtc PeerConnection 模块介绍

PeerConnection 是 WebRTC 中最核心的类,它是 W3C RTCPeerConnection Web API 的 C++ 实现。

它负责管理两个对等端(Peer)之间的整个多媒体会话生命周期,包括信令状态机、媒体协商(SDP Offer/Answer)、网络连接(ICE/STUN/TURN)、加密(DTLS/SRTP)以及媒体流的发送和接收。

PeerConnection 是 WebRTC 的大脑。它不直接处理音频采样或视频像素,而是协调各个子系统(网络、媒体引擎、加密、信令)协同工作,确保两个浏览器或应用之间能够建立稳定、安全、低延迟的多媒体通信通道。

一、核心职责

PeerConnection 主要承担以下责任:

**1, 会话状态机管理:**维护信令状态(Signaling State),如 kStable, kHaveLocalOffer, kHaveRemoteOffer 等。

2, 底层对象创建与初始化: 创建和管理 PortAllocator(用于收集 ICE 候选者)、BaseChannels(音频/视频/数据通道)。

3, 媒体流生命周期管理: 拥有并管理 RtpSender、RtpReceiver、RtpTransceiver 以及关联的 MediaStreamTrack 对象。

4, SDP 描述跟踪: 跟踪当前(Current)和待定(Pending)的本地及远程会话描述。

5, 联合职责:

SDP 的解析与生成。

ICE 连接状态机管理。

统计数据(Stats)的生成。

二,继承的类

cpp 复制代码
class PeerConnection : public PeerConnectionInternal,
                       public JsepTransportController::Observer,
                       public RtpSenderBase::SetStreamsObserver,
                       public rtc::MessageHandler,
                       public sigslot::has_slots<> {

}

1, PeerConnectionInternal:

• 实现了公共接口 PeerConnectionInterface 未暴露的内部方法,供 WebRTC 内部其他模块(如 PeerConnectionFactory)调用。

2, JsepTransportController::Observer:

• 监听传输层事件。当 ICE 连接状态改变、新候选者被发现、或 DTLS 握手完成时,JsepTransportController 会通知 PeerConnection,以便其更新上层状态(如 ice_connection_state_)。

3, RtpSenderBase::SetStreamsObserver:

• 监听 RTP 发送器的流变化。当 RtpSender 关联的 MediaStream 发生变化时,通知 PeerConnection 进行相应的状态同步。

4, rtc::MessageHandler:

• 允许 PeerConnection 接收来自其他线程的消息。WebRTC 是多线程架构(信令线程、网络线程、工作线程),此类用于在线程间安全地传递任务。

5, sigslot::has_slots<>:

• 支持信号-槽机制。允许其他对象连接到 PeerConnection 发出的信号(如 OnIceCandidate),实现事件驱动的通知机制。

三、关键功能模块

3.1信令与协商 (Signaling & Negotiation)

• CreateOffer / CreateAnswer: 生成 SDP Offer 或 Answer。

• SetLocalDescription / SetRemoteDescription: 应用本地或远程的 SDP,触发媒体引擎和传输层的配置更新。

• AddIceCandidate: 添加远程 ICE 候选者,建立 P2P 连接路径。

• operations_chain_: 确保信令操作按顺序执行(例如,在 CreateOffer 完成前,SetRemoteDescription 会被排队等待),符合 WebRTC 规范中的"操作链"概念。

3.2 媒体管理 (Media Management)

• AddTrack / RemoveTrack: 添加或移除本地媒体轨道(音频/视频)。

• AddTransceiver: 添加收发器,这是 Unified Plan 语义下的核心概念,控制媒体的发送和接收方向。

• GetSenders / GetReceivers / GetTransceivers: 获取当前的媒体发送/接收对象列表。

• local_streams_ / remote_streams_: 管理本地和远程的 MediaStream 集合。

3.3. 数据传输 (Data Channels)

• CreateDataChannel: 创建 SCTP 数据通道,用于传输非媒体数据(如文本、文件)。

• data_channel_controller_: 内部管理数据通道的控制器。

3.4. 状态监控 (State Monitoring)

• ice_connection_state(): ICE 连接状态(New, Checking, Connected, Failed 等)。

• signaling_state(): 信令状态。

• peer_connection_state(): 整体连接状态。

• GetStats: 收集详细的统计信息(丢包率、比特率、延迟等),返回 RTCStatsReport。

3.5. 内部线程模型

• network_thread(): 处理网络 IO(STUN/TURN/ICE 包)。

• worker_thread(): 处理耗时操作(编码/解码、AEC 处理)。

• signaling_thread(): 处理信令逻辑(SDP 解析、状态机转换)。

• 类成员变量通过 RTC_GUARDED_BY(thread) 宏标记,确保线程安全。

3.6. 重要成员变量示例

• transport_controller_: JsepTransportController 实例,管理所有的 ICE 传输和 DTLS 加密。

• call_: webrtc::Call 实例,底层媒体引擎的核心,负责实际的 RTP 包发送/接收、编码和解码。

• transceivers_: RtpTransceiver 列表,Unified Plan 的核心,每个 Transceiver 对应一个 m-line。

• **`configuration_``: 存储 RTCConfiguration,包括 ICE 服务器、证书、带宽限制等配置。

相关推荐
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
2601_955662462 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛2 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
旺仔小馒头wang2 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
纳祥科技2 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805
单片机·音视频·智能音箱
youandyouyou2 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地
音视频
爱吃提升2 天前
文生视频核心
人工智能·音视频
2601_955662462 天前
抖音视频怎么做多语言配音?2026年AI配音工具与制作流程详解
人工智能·音视频·语音识别·视频
音视频牛哥2 天前
Android与HarmonyOS NEXT如何接入GB28181:从SIP到PS/RTP的完整链路
音视频·gb28181-2022对接·鸿蒙next gb28181·gb/t 28181-2022·gb/t 28181-2016·gb28181-2022平台
美狐美颜SDK开放平台2 天前
直播APP源码与视频美颜sdk如何配合?一套完整开发思路
android·人工智能·计算机视觉·音视频·直播美颜sdk