webrtc android引擎遇到使用MTK芯片华为荣耀手机截另外一款HISI芯片编的H264时,解码器不停的重启,判断可能是芯片问题,考虑到后续其他机型下的兼容问题,决心给webrtc加上ffmpeg软解,网上找的相关资料基本都是比较老的版本,M75下遇到一些新的坑,记在这里供大家参考。
1. third_party/ffmpeg/ffmpeg_generated.gni
打开此文件,可以看到许多编译选项,检查下,把包含H264的开关打开,这里遇到的坑是该打开哪些文件,可能会遇到一些问题,铁在这里:
2.third_party/ffmpeg/chromium/config/Chrome/{ABI}/config.h
// #define CONFIG_H264_DECODER 0
// 修改为:
#define CONFIG_H264_DECODER 1
3.third_party/ffmpeg/chromium/config/Chrome/android/{ABI}/libavcodec/parser_list.c
&ff_libopus_decoder,
// 增加 ff_h264_decoder
&ff_h264_decoder,
NULL };
4.third_party/ffmpeg/chromium/config/Chrome/android/{ABI}/libavcodec/codec_list.c
&ff_vorbis_parser,
// 增加 ff_h264_parser
&ff_h264_parser,
NULL };
5.sdk/android/api/org/webrtc/LibH264Decoder.java
copy同目录下的LibvpxVp8Decoder.java改名而来,把VP8名字改成H264
6.sdk/android/api/org/webrtc/LibH264Encoder.java
copy同目录下的LibvpxVp8Encoder.java改名而来,把VP8名字改成H264
7.sdk/android/jni/h264codec.cc
copy同目录下的vp8codec.cc改名而来,把VP8名字改成H264
#include <jni.h>
#include "modules/video_coding/codecs/h264/include/h264.h"
#include "sdk/android/generated_libvpx_h264_jni/jni/LibvpxH264Decoder_jni.h"
#include "sdk/android/generated_libvpx_h264_jni/jni/LibvpxH264Encoder_jni.h"
#include "sdk/android/src/jni/jni_helpers.h"namespace webrtc {
namespace jni {static jlong JNI_LibvpxH264Encoder_CreateEncoder(JNIEnv* jni) {
return jlongFromPointer(H264Encoder::Create(cricket::VideoCodec(cricket::kH264CodecName)).release());
}static jlong JNI_LibvpxH264Decoder_CreateDecoder(JNIEnv* jni) {
return jlongFromPointer(H264Decoder::Create().release());
}} // namespace jni
} // namespace webrtc
8.sdk/android/BUILD.gn
把包含LibvpxVp8Decoder.java、LibvpxVp8Encoder.java、vp8codec.cc的所有段复制一份,并改成前面我们copy出来的文件名
9.在 sdk/android/api/org/webrtc/SoftwareVideoDecoderFacoty.java 和 sdk/android/api/org/webrtc/SoftwareVideoEncoderFacoty.java 中分别注册 H.264 并添加创建 codec 的代码
10../tools_webrtc/android/build_aar.py --arch "arm64-v8a" "armeabi-v7a"
编译打包成aar