使用librtmp为Android构建FFMPEG

11

我正在尝试使用NDK r7b构建具有RTMP支持的FFMPEG的一体化静态二进制文件,一切都很顺利,直到我尝试使用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”的错误。

我对NDK不熟悉,显然我缺少一些重要部分,但我自己找不到它。

1个回答

11

这很具有挑战性,但我认为我有一个解决方案。在配置时的问题是FFmpeg想通过pkg-config管理系统检测适当的librtmp安装。

我假设你已经成功地交叉编译了../rtmpdump所引用的目录中的librtmp。编辑FFmpeg配置脚本并搜索以下行:

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

在该行开头添加一个'#'来注释掉它。现在,只需针对这些修改重新运行配置:

--extra-cflags="-I/full/path/to/rtmpdump"

在这里使用绝对路径可能会有所帮助。此外,由于#include指令已经在头文件前缀中加入了librtmp/,因此请省略结尾处的/librtmp/。接下来:

--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp"

需要再次使用绝对路径,并指定要链接的库,因为我们通过配置已注释掉该逻辑。

现在,配置应成功,交叉编译也应该是顺利的。最终的ffmpeg二进制文件应该在protocols下报告RTMP模块的系列。

ffmpeg -protocols
[...]
rtmp
rtmpe
rtmps
rtmpt
rtmpte

请注意,我没有NDK开发环境进行测试。但是我在我的桌面Ubuntu系统上测试了编译librtmp(未通过pkg-config安装包)并执行上述步骤。


我看到了那个问题,但是我对Android NDK或Cygwin没有太多的经验。 - Multimedia Mike
1
Mike,谢谢。遵循您的指示帮助我进一步深入,但是最终我的构建失败并显示错误消息,例如“libavformat/librtmp.o:在函数rtmp_get_file_handle中:libavformat/librtmp.c:190:错误:对‘RTMP_Socket’的未定义引用”-听起来好像找不到标头文件,但它确实存在。有什么指针吗? - datu-puti
@elBradford:你确定你已经正确地构建了librtmp吗? - Multimedia Mike
@MultimediaMike 我非常确定。我在这个问题中发布了我的经验: http://stackoverflow.com/questions/20721445/undefined-reference-when-compiling-ffmpeg-with-librtmp-on-android 如果你能看一下,我会非常感激的。我已经尽可能地详细说明了。谢谢! - datu-puti
就我个人而言,我成功地使用librtmp为Android构建了FFmpeg(当前版本为2.1.3,直接从FFMpeg.org获取,而不是旧的GuardianProject构建)。我在这里记录了我的步骤(链接:https://github.com/OnlyInAmerica/FFmpeg-Android)。 - dbro
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接