【发布时间】:2014-01-10 08:49:37
【问题描述】:
我已经搜索过了,虽然 Building FFMPEG with librtmp for android 回答了我的部分问题,但我在编译过程中进一步遇到了其他问题。
首先,我尝试使用this github repo 中的脚本,将标志更改为包含
--enable-librtmp \
--extra-cflags=-I/home/bradford/Development/FFMPEG/rtmp/rtmpdump/librtmp/ \
--extra-ldflags=-L/home/bradford/Development/FFMPEG/rtmp/rtmpdump/librtmp"
我按照 S74ck3r 的 instructions on his github repo 和 stream-recorder thread 使用 polarSSL 构建 librtmp。这似乎工作正常,我有一个 librtmp.so、librtmp.a 和 rtmp.h
当我尝试用 librtmp 编译 ffmpeg 时,我得到了错误
ERROR: librtmp not found
This SO question helped,我修改了 ffmpeg 的配置文件,使其不会查看 pkg-config 的 librtmp(即使 pkg-config 知道 librtmp...):
#enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
当我现在构建时,它开始成功,我得到了希望的线:
librtmp enabled yes
后来我看到了更多好消息:
...
Enabled protocols:
applehttp http mmsh
cache httpproxy mmst
concat librtmp mmsu
crypto librtmpe pipe
fd librtmps rtp
file librtmpt tcp
gopher librtmpte udp
hls md5
...
但最后,在编译完所有内容并在安装阶段,我得到了这些类型的错误:
INSTALL libavutil/libavutil.pc
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_get_file_handle:libavformat/librtmp.c:190: error: undefined reference to 'RTMP_Socket'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_read_seek:libavformat/librtmp.c:180: error: undefined reference to 'RTMP_SendSeek'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_read_pause:libavformat/librtmp.c:161: error: undefined reference to 'RTMP_Pause'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_close:libavformat/librtmp.c:64: error: undefined reference to 'RTMP_Close'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_write:libavformat/librtmp.c:145: error: undefined reference to 'RTMP_Write'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_read:libavformat/librtmp.c:153: error: undefined reference to 'RTMP_Read'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:96: error: undefined reference to 'RTMP_LogSetLevel'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:97: error: undefined reference to 'RTMP_LogSetCallback'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:118: error: undefined reference to 'RTMP_Init'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:119: error: undefined reference to 'RTMP_SetupURL'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:127: error: undefined reference to 'RTMP_Connect'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:127: error: undefined reference to 'RTMP_ConnectStream'
/tmp/FFMPEG/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: libavformat/librtmp.o: in function rtmp_open:libavformat/librtmp.c:125: error: undefined reference to 'RTMP_EnableWrite'
collect2: ld returned 1 exit status
而且我无法超越他们。听起来它找不到 rtmp.h,其中包含对这些函数的引用,但它存在于它应该在的位置(afaik)。
另外,我的项目需要 librtmp - ffmpeg 的内置 rtmp 功能是不够的,因为我需要 librtmp 的身份验证功能。
【问题讨论】:
-
你需要先编译librtmp,并链接.so或.a,如果你使用Vitamio 4.0+,你可以克隆github.com/yixia/FFmpeg-Vitamio,运行./build_android.sh
-
@CrossleSong - 谢谢。我看到回购已在过去 3 周内更新。我再试一次