尝试使用 librtmp 支持为 ARM 构建 FFmpeg 时出现问题
Issue trying to build FFmpeg for ARM with librtmp support
我正在尝试编译 librtmp,这样我就可以为 ARM 处理器构建支持 RTMP 的 FFmpeg。
我已经有了工具链,单独构建 FFmpeg 也成功了,在 ARM 处理器内部测试也成功了。
我的理解:
- Ffmpeg
-- Librtmp
--- Openssl
--- zlib
构建 FFmepg 需要此层次结构。
到目前为止,我已经为 ARM 构建了 openssl,为 ARM 构建了 zlib,并且我可以看到它位于右侧的 ARM 输出文件夹中。
先决条件:
export LD_LIBRARY_PATH=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib/
export CCPREFIX="/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/arm-unknown-linux-uclibcgnueabi-"
export CFLAGS="-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include"
export LDFLAGS="-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib/"
1- 构建 zlib 的步骤:
export CC=arm-linux-gcc
./configure --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr
make
make install
2- 构建 openssl 的步骤:
export cross=arm-linux-
./Configure dist --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install
3- 构建 librtmp 的步骤:
make CROSS_COMPILE=arm-linux- INC=-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include LIB=-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
以上 1,2 步成功,第 3 步,我明白了:
make CROSS_COMPILE=arm-linux- INC=-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include LIB=-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
make[1]: Entering directory '/home/user/Downloads/ip_code/rtmpdump/librtmp'
arm-linux-gcc -shared -Wl,-soname,librtmp.so.1 -o librtmp.so.1 rtmp.o log.o amf.o hashswf.o parseurl.o -lssl -lcrypto -lz
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lssl
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lcrypto
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
Makefile:92: recipe for target 'librtmp.so.1' failed
make[1]: *** [librtmp.so.1] Error 1
make[1]: Leaving directory '/home/user/Downloads/ip_code/rtmpdump/librtmp'
Makefile:76: recipe for target 'librtmp/librtmp.a' failed
make: *** [librtmp/librtmp.a] Error 2
但在输出文件夹中我可以看到正确的文件:
[user@localhost rtmpdump]$ cd /opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
[user@localhost lib]$ ls
bin libavcodec.a libgmp.so.10.0.2 libz.so
certs libavdevice.a libiberty.a libz.so.1
engines libavfilter.a libmpfr.la libz.so.1.2.11
gcc libavformat.a libmpfr.so man
include libavutil.a libmpfr.so.4 misc
ldscripts libcrypto.a libmpfr.so.4.0.1 openssl.cnf
lib libfakeroot-0.so libpostproc.a pkgconfig
libaacplus.a libfakeroot.la libssl.a private
libaacplus.la libfakeroot.so libswresample.a share
libaacplus.so libgmp.la libswscale.a
libaacplus.so.2 libgmp.so libx264.a
libaacplus.so.2.0.2 libgmp.so.10 libz.a
[user@localhost lib]$
知道如何编译吗?
谢谢
仅供参考:rtmpdump 显然是其他一些 OS 的要求...我昨天在没有 rtmpdump/librtmp 的情况下编译了 FFmpeg,并且在 'enabled protocols' 时./配置,我也可以看到 RTMP/RTMPS 等...
非常惊讶,我在目标 ARM 设备上 运行 编译的 FFmpeg,它运行没有任何问题:我想在我与 rtmpdump 搏斗时,ffmpeg(对于 ARM)已经支持了。
Enabled protocols:
async httpproxy rtmpte
cache https rtmpts
concat icecast rtp
crypto md5 srtp
data mmsh subfile
ffrtmpcrypt mmst tcp
ffrtmphttp pipe tee
file prompeg tls_openssl
ftp rtmp udp
gopher rtmpe udplite
hls rtmps unix
http rtmpt
问题已解决!
我正在尝试编译 librtmp,这样我就可以为 ARM 处理器构建支持 RTMP 的 FFmpeg。
我已经有了工具链,单独构建 FFmpeg 也成功了,在 ARM 处理器内部测试也成功了。
我的理解:
- Ffmpeg
-- Librtmp
--- Openssl
--- zlib
构建 FFmepg 需要此层次结构。
到目前为止,我已经为 ARM 构建了 openssl,为 ARM 构建了 zlib,并且我可以看到它位于右侧的 ARM 输出文件夹中。
先决条件:
export LD_LIBRARY_PATH=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib/
export CCPREFIX="/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/arm-unknown-linux-uclibcgnueabi-"
export CFLAGS="-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include"
export LDFLAGS="-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib/"
1- 构建 zlib 的步骤:
export CC=arm-linux-gcc
./configure --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr
make
make install
2- 构建 openssl 的步骤:
export cross=arm-linux-
./Configure dist --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install
3- 构建 librtmp 的步骤:
make CROSS_COMPILE=arm-linux- INC=-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include LIB=-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
以上 1,2 步成功,第 3 步,我明白了:
make CROSS_COMPILE=arm-linux- INC=-I/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/include LIB=-L/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
make[1]: Entering directory '/home/user/Downloads/ip_code/rtmpdump/librtmp'
arm-linux-gcc -shared -Wl,-soname,librtmp.so.1 -o librtmp.so.1 rtmp.o log.o amf.o hashswf.o parseurl.o -lssl -lcrypto -lz
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lssl
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lcrypto
/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.4.0/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
Makefile:92: recipe for target 'librtmp.so.1' failed
make[1]: *** [librtmp.so.1] Error 1
make[1]: Leaving directory '/home/user/Downloads/ip_code/rtmpdump/librtmp'
Makefile:76: recipe for target 'librtmp/librtmp.a' failed
make: *** [librtmp/librtmp.a] Error 2
但在输出文件夹中我可以看到正确的文件:
[user@localhost rtmpdump]$ cd /opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr/lib
[user@localhost lib]$ ls
bin libavcodec.a libgmp.so.10.0.2 libz.so
certs libavdevice.a libiberty.a libz.so.1
engines libavfilter.a libmpfr.la libz.so.1.2.11
gcc libavformat.a libmpfr.so man
include libavutil.a libmpfr.so.4 misc
ldscripts libcrypto.a libmpfr.so.4.0.1 openssl.cnf
lib libfakeroot-0.so libpostproc.a pkgconfig
libaacplus.a libfakeroot.la libssl.a private
libaacplus.la libfakeroot.so libswresample.a share
libaacplus.so libgmp.la libswscale.a
libaacplus.so.2 libgmp.so libx264.a
libaacplus.so.2.0.2 libgmp.so.10 libz.a
[user@localhost lib]$
知道如何编译吗?
谢谢
仅供参考:rtmpdump 显然是其他一些 OS 的要求...我昨天在没有 rtmpdump/librtmp 的情况下编译了 FFmpeg,并且在 'enabled protocols' 时./配置,我也可以看到 RTMP/RTMPS 等...
非常惊讶,我在目标 ARM 设备上 运行 编译的 FFmpeg,它运行没有任何问题:我想在我与 rtmpdump 搏斗时,ffmpeg(对于 ARM)已经支持了。
Enabled protocols:
async httpproxy rtmpte
cache https rtmpts
concat icecast rtp
crypto md5 srtp
data mmsh subfile
ffrtmpcrypt mmst tcp
ffrtmphttp pipe tee
file prompeg tls_openssl
ftp rtmp udp
gopher rtmpe udplite
hls rtmps unix
http rtmpt
问题已解决!