【问题标题】:Issue trying to build FFmpeg for ARM with librtmp support尝试为具有 librtmp 支持的 ARM 构建 FFmpeg 时出现问题
【发布时间】:2017-09-27 14:27:22
【问题描述】:

我正在尝试编译 librtmp,以便可以构建 FFmpeg 并支持 ARM 处理器的 RTMP。

我已经有了工具链,FFmpeg的solo build也成功了,从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]$

知道如何编译吗?

谢谢

【问题讨论】:

  • 库是.a,但你在命令行上有-shared。您是否共享了构建机器上可用的 ARM SSL .so 文件?
  • 我在那里看不到它。只是为了编译它,我用这个选项调用了 Configure:./Configure dist --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr,然后是 make 和 make install。即使这样做了,我也看不到 ARM /opt/..../lib 文件夹中的文件。我尝试在 rtmpdump 的 MAKEFILE 中找到 -shared 选项,但那里没有提到这一点。我想知道是什么迫使 rtmpdump/librtmp 使用 -shared 选项构建它。

标签: arm rtmp


【解决方案1】:

仅供参考:rtmpdump 显然是其他一些操作系统的要求...我昨天在没有 rtmpdump/librtmp 的情况下编译了 FFmpeg,在 ./configure 时的“启用协议”中,我可以看到 RTMP/RTMPS 等. 还有...

非常惊讶,我在目标 ARM 设备上运行编译后的 FFmpeg,它运行没有任何问题:我猜 ffmpeg(针对 ARM)内部已经有支持,而我正在与 rtmpdump 搏斗。

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

问题已解决!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2012-06-17
    • 2013-01-13
    • 1970-01-01
    • 2017-10-22
    • 2011-05-29
    • 2019-03-27
    相关资源
    最近更新 更多