前言
最近出于公司发展需要以及个人技术深入发展的考虑,需要二次入坑FFMPEG。 距离上次有这种需要,已经过去了4年了。上次巧妙的避开的这个大坑,只使用了rtmpDump和faac两个库,就已经很头痛了,希望这次在FFMPEG上不会被埋里面。
这里就来记录下本次必入的情况下,遇到的一些问题,以供其他要入坑的同志能(以及以后把这块又忘了的自己)参考。
进度有限,更新不太会按时,但是会尽量一次更新一套完整的东西。
大致的想法是分称金字塔来解构这次的记录: 首先是编译以及导入到Android Studio里面,然后是基础应用,最后做一下各个功能的分解。
于此开始记录。
今天先更新选材以及编译内容。 后续按步骤更新。
-----------------------------假装正文分割线-------------------------
首先是选,本着用新不用旧的原则,我初选了FFMPEG 4.2 和 NDK-R20,但是由于后续遇到了个奇葩问题,NDK回退到17c,关于这个问题,等下编译统一说。
接着是编译。
脚本没得说,当今网络一搜一大把,无非是一些变量设置,以及config参数设置,按需改改就好了。
#!/bin/bash
NDK=/path/to/ndk/android-ndk-r17c
SYSROOT=$NDK/platforms/android-21/arch-arm
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/arm-linux-androideabi
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
PREFIX=$(pwd)/android/armv7-a
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
build_android()
{
./configure \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -D__ANDROID_API__=21 -Os -fpic -marm -march=armv7-a"
make clean
make
make install
}
build_android
附上我用的脚本,就不再赘述了,NDK这些的Path设置,大家应该都懂吧。
接着上遇到的问题。
遇到的问题,就只有一个,是UPD编不过。
libavformat/udp.c:290:28: error: request for member 's_addr' in something not a structure or unionmreqs.imr_multiaddr.s_addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;
这个问题在网络上很常见,是在FFMPEG4.0以后出现的,主要问题是NDK版本太低了,但是我用r20也出了这个问题,我就感觉有点不太舒服了。 逐步降低NDK版本之后,在r17c编过了......早晓得就直接用这个最推荐的版本了...
其他的问题我没遇到。一路很顺利就过了。
好了,编译这一步就搞完了,过段时间来说说导入到Android Studio。