我正在尝试用ndk r7b构建ffmpeg的一体式静态二进制文件,在尝试用rtmp支持构建之前,一切都很好。
我用librtmp2.4和这样的自定义配置从https://github.com/guardianproject/android-ffmpeg中找到源代码

.configure \
--target-os=linux \
--cross-prefix=arm-linux-androideabi- \
--arch=arm \
--sysroot=/home/andrey/android-ndk-r7b/platforms/android-3/arch-arm \
--enable-static \
--disable-shared \
--disable-symver \
--enable-small \
--disable-devices \
--disable-avdevice \
--enable-gpl \
--enable-librtmp \
--prefix=../build/ffmpeg/armeabi \
--extra-cflags=-I../rtmpdump/librtmp \
--extra-ldflags=-L../rtmpdump/librtmp \

rtmpdump目录与ffmpeg位于同一级别。
据我所知,我配置中的最后两个字符串表示编译器可以在哪里找到librtmp的源代码。
但我得到的只有ERROR: librtmp not found
我不熟悉ndk,显然我遗漏了一些重要的部分,但我自己找不到。

最佳答案

这很有挑战性,但我想我有办法。配置时的问题是ffmpeg希望通过pkg配置管理系统检测正确的librtmp安装。
我假设您已经在../rtmpdump引用的目录中成功地交叉编译了librtmp。编辑ffmpeg配置脚本并搜索行:

enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket

注释(在行的前面加一个“”)。现在,重新运行configure,只需进行以下修改:
--extra-cflags="-I/full/path/to/rtmpdump"

在这里有一条绝对的道路可能会有帮助。另外,在末尾省略/librtmp/,因为35; include指令已经用librtmp/作为头文件的前缀。下一步:
--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp"

同样,绝对路径,并指定要链接的库,因为我们通过configure注释掉了该逻辑。
现在,configure应该成功了,交叉编译也应该高兴了。最终的ffmpeg二进制文件应报告协议下的rtmp模块系列:
ffmpeg -protocols
[...]
rtmp
rtmpe
rtmps
rtmpt
rtmpte

注意,我没有ndk开发环境来测试这个。但是我在我的桌面ubuntu系统上进行了测试,编译librtmp(没有通过pkg config安装包),然后执行上述步骤。

07-24 09:27