WebRTC SDK API封装(4)-WebRTC添加HW/SW H264编解码

本文介绍了如何在WebRTC中添加对H264编解码的支持,包括硬件和软件两种方式。在硬件编解码中,详细讨论了Android和iOS平台的实现,并提供了代码片段。对于软件编解码,通过修改WebRTC源码和第三方库ffmpeg的配置来实现。最后,讨论了在CrossWalk中应用这些改动的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

WebRTC由于license及其他的一些原因,默认的视频编解码只有使用vp8跟vp9,没有支持h264的编解码,但是我经过一些对比测试(vp9 vs h264)的测试数据发现,vp9的优势在于1080p以上才开始渐渐追上h264的效率,并且目前大多数的视频设备,还是使用h264的比较多,因此要实现对h264的编解码,就必须重新编译WebRTC添加对h264的支持。

实现

通过研究WebRTC的源码发现,对于视频编解码的部分,移动端的使用有两方面需要考虑:

  • 硬件方式编解码
  • 软件方式编解码
1.硬件编解码

WebRTC从r5X版本开始,Android/iOS 平台开始支持HW en/decoder, 查看r67版本WebRTC,其中:

  • Android平台的支持情况分别为:
    • 支持硬编硬解vp8 codec的平台:qcom/Nvidia/Exynos/Intel/MTK
    • 支持硬编硬解vp9 codec的平台:qcom/Exynos
    • 支持硬编硬解h264 codec的平台:qcom/Exynos/Intel/MTK

    Android判断是否支持硬件编解码,是在org.webrtc.HardwareVideoEn/Decoder.java中supportedVP8/VP9/H264HwCodecPrefixes这个字符串数组中定义,可根据需要对手机做机型适配,比如华为的某些手机处理器,CPU本身支持硬件编解码,但是检测不到.

  • iOS处理器只支持h264的硬编硬解。

软件使用的基本逻辑为先去判断自身平台是否支持硬件编解码,如果支持则使用,如果不支持则回退到软件编解码,具体使用上层代码HardwareVideoEn/Decoder.java和RTCVideoEn/DecoderH264.mm分别去实现Android和iOS平台的h264硬件编解码.
在native c/c++代码中的调用方式代码片段如下:

#if defined(WEBRTC_ANDROID)
			webrtc::jni::MediaCodecVideoEncoderFactory* encoder_factory = new webrtc::jni::MediaCodecVideoEncoderFactory();
			video_send_config.rtp.payload_name = "H264";
			video_send_config.rtp.payload_type = kWtkPayloadTypeH264;
			cricket::VideoCodec codec("H264")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值