Android WebRTC 源码解析:从媒体流处理到实时通信优化
移动端 WebRTC 的核心挑战
实时通信在移动端面临三大核心难题:
- 延迟敏感:从采集到渲染需控制在 400ms 内,音频抗抖动缓冲(JitterBuffer)和视频关键帧(KeyFrame)请求机制直接影响体验
- 功耗控制:持续运行的视频编解码(HWEncoder)和网络传输(DTLS-SRTP)会快速消耗电量,需平衡性能与能耗
- 设备碎片化:不同 Android 设备的相机接口(Camera2/Camera1)、芯片组(Qualcomm/MTK)和系统版本(API Level)导致兼容性问题
Android 与 iOS 平台架构差异
两平台在实现上有显著区别:
- 硬件抽象层:
- Android 通过 JNI 调用 MediaCodec 进行硬编解码(HWAccel)
- iOS 直接使用 AVFoundation 框架的 VTCompressionSession
- 线程模型:
- Android 采用 Java 线程池 +MessageQueue 处理信令
- iOS 统一使用 GCD 队列调度
- 网络栈:
- Android 需适配多种 Socket 实现(OkHttp/JavaSocket)
- iOS 直接使用 CFNetwork 进行 ICE(Interactive Connectivity Establishment)协商
核心源码模块解析
PeerConnectionFactory 初始化流程
关键调用链(代码已简化):
// Java 层入口 PeerConnectionFactory.initialize( PeerConnectionFactory.InitializationOptions.builder(context)
.setNativeLibraryLoader(new NativeLibraryLoader())
.createInitializationOptions());
// 对应 JNI 调用 JNI_GENERATOR_EXPORT void JNI_PeerConnectionFactory_InitializeAndroidGlobals(JNIEnv* env) {
jni::InitializeAndroidGlobals(env);
}
初始化过程会加载:
- 音频设备模块(ADM)
- 视频编解码工厂(VideoCodecFactory)
- 网络传输控制器(NetworkController)
VideoCapturer 硬件加速实现
Camera2 采集示例:
// C++ 层视频采集接口
class VideoCapturer : public rtc::VideoSourceInterface<VideoFrame> {
public:
virtual void Start( VideoCaptureConfig& config) {
AndroidCameraCapturer::(config);
}
};

