使用 librtmp 为 android 构建 FFMPEG
Posted
技术标签:
【中文标题】使用 librtmp 为 android 构建 FFMPEG【英文标题】:Building FFMPEG with librtmp for android 【发布时间】:2012-03-26 22:18:57 【问题描述】:我正在尝试使用 NDK r7b 构建 FFMPEG 的多合一静态二进制文件,并且一切正常,直到我尝试使用 RTMP 支持构建它。
我使用来自 https://github.com/guardianproject/android-ffmpeg 的源代码,带有 librtmp2.4 和这样的自定义配置
.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 没有经验,显然我错过了一些重要的部分,但我自己找不到。
【问题讨论】:
【参考方案1】:这很有挑战性,但我想我有一个解决方案。配置时的问题是 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"
这里有一个绝对路径可能会有所帮助。此外,在末尾省略 /librtmp/,因为 #include 指令已经在头文件前加上 librtmp/。下一个:
--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp"
再次,绝对路径,并指定要链接的库,因为我们通过 configure 注释掉了该逻辑。
现在,configure 应该会成功,交叉编译也应该很顺利。最终的 ffmpeg 二进制文件应报告协议下的 RTMP 模块系列:
ffmpeg -protocols
[...]
rtmp
rtmpe
rtmps
rtmpt
rtmpte
请注意,我没有 NDK 开发环境来测试它。但是我通过编译 librtmp(没有通过 pkg-config 安装软件包)在我的桌面 Ubuntu 系统上进行了测试,然后执行上述步骤。
【讨论】:
有价值的信息,你能看看这个吗:***.com/questions/9605757/… 我看到了这个问题,但我对 Android NDK 或 Cygwin 没有太多经验。 谢谢你,迈克!现在在编译步骤上看起来不错,它确实适用于 x86 Ubuntu。但我担心我现在遇到了交叉编译 librtmp 的问题。我应该将它作为单独的主题发布。 迈克,谢谢。按照您的指示帮助我走得更远,但最终我的构建失败并出现错误,例如“libavformat/librtmp.o:在函数 rtmp_get_file_handle:libavformat/librtmp.c:190: 错误:未定义的对 'RTMP_Socket' 的引用” - 听起来像找不到头文件,但肯定是有的。有什么指点吗? @elBradford:你确定你已经正确构建了 librtmp 吗?以上是关于使用 librtmp 为 android 构建 FFMPEG的主要内容,如果未能解决你的问题,请参考以下文章
跪求好心人分享librtmp.dll免费版软件免费百度云资源
如何修复错误:“vreinterpretq_u32_f64”未在此范围内声明 - 在 Android 上使用 Eigen 构建