安卓mediasoup输出H264流(支持H264编码)

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

本文首发地址 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.gniuse_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();
  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清霜辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值