文章目录
本文首发地址 https://h89.cn/archives/6.html
最新更新地址 https://gitee.com/chenjim/chenjimblog
本文基于libmediasoupclient 3.2.0 和 webrtc branch-heads/4147(m84)
本文得熟悉相关基础,参考 文1 和 文2
除了需要加编译参数rtc_use_h264=true, 还需要以下修改以支持h264软编解码
网络搜索到的有很多复制、粘贴,缺少部分内容的,或者版本环境不匹配,很让人头疼。。。。
1. 修改 ffmpeg_generated.gni 开启 openh264 编解码
安卓平台默认未支持 h264 解码,会显示黑屏
从 third_party/ffmpeg/ffmpeg_generated.gni 中我们可以开到,默认未支持安卓平台
修改 ffmpeg_generated.gni 中 use_linux_config,添加 || is_android以支持,结果如下
use_linux_config = is_linux || is_fuchsia || is_android
参考自 https://www.codeleading.com/article/3215969775
而对于软编解码,android webrtc采用openh264 +ffmpeg,这两块的代码都在webrtc源码src/third_party当中
2. 增加 codec_list parser_list h264 支持
third_party/ffmpeg/chromium/config/Chrome/android/arm64/libavcodec/parser_list.c 中添加 &ff_h264_parser,
third_party/ffmpeg/chromium/config/Chrome/android/arm64/libavcodec/codec_list.c 中添加 &ff_h264_decoder,
third_party/ffmpeg/chromium/config/下有 Chrome ChromeOS Chromium,这里用的是 Chrome,(其它可能有问题。。。)
需要在编译参数添加 ffmpeg_branding="Chrome"
这里路径 android/arm64 是需要配合参数 --arch "arm64-v8a",
如果是 armeabi-v7a 需要同步修改目录 android/arm-neon/libavcodec下内容,
最终编译参数参考:
./tools_webrtc/android/build_aar.py --extra-gn-args 'rtc_use_h264=true ffmpeg_branding="Chrome" rtc_enable_protobuf=false use_rtti=true use_custom_libcxx=false' --arch "arm64-v8a"
3. 增加文件 LibH264Decoder.java
复制 sdk/android/api/org/webrtc/LibvpxVp8Decoder.java为同目录 LibH264Decoder.java,修改后如下:
package org.webrtc;
public class LibH264Decoder extends WrappedNativeVideoDecoder {
@Override
public long createNativeVideoDecoder() {
return nativeCreateDecoder();

本文档详细介绍了如何在Android上配置WebRTC以支持H264软编解码,包括修改ffmpeg_generated.gni文件、增加codec解析支持、添加Java和C++文件、修改H264Create函数、更新BUILD.gn文件以及调整SoftwareVideoDecoderFactory和SoftwareVideoEncoderFactory。编译参数和相关源码修改是关键,确保了在不同架构上的兼容性。
最低0.47元/天 解锁文章
937

被折叠的 条评论
为什么被折叠?



