Проблема при попытке собрать FFmpeg для ARM с поддержкой librtmp

Я пытаюсь скомпилировать librtmp, чтобы собрать FFmpeg с поддержкой RTMP для процессора ARM.

У меня уже есть набор инструментов, и соло-сборка FFmpeg также прошла успешно, и тестирование изнутри процессора ARM также прошло успешно.

Мое понимание:

- Ffmpeg
--  Librtmp
--- Openssl
--- zlib

Эта иерархия необходима для сборки FFmepg.

До сих пор я создал openssl для ARM и zlib для ARM, и я вижу, что он находится в правой выходной папке 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]$

Любая идея, как скомпилировать?

Спасибо


person bcop    schedule 27.09.2017    source источник
comment
Библиотеки .a, но у вас -shared в командной строке. Есть ли у вас общие файлы ARM SSL .so на компьютере сборки?   -  person artless noise    schedule 27.09.2017
comment
Я не вижу его там. Чтобы его скомпилировать, я вызвал Configure с этой опцией: ./Configure dist --prefix=/opt/toolchain_gnueabi-4.4.0_ARMv5TE/usr, затем make и make install. Даже после этого я не вижу файлы в папке ARM /opt/..../lib. И я попытался найти параметр -shared в MAKEFILE rtmpdump, но там об этом не упоминается. Интересно, что заставляет rtmpdump/librtmp создавать его с опцией -shared.   -  person bcop    schedule 28.09.2017


Ответы (1)


Просто для информации: rtmpdump, по-видимому, является требованием для какой-то другой ОС... Вчера я скомпилировал FFmpeg без rtmpdump/librtmp, и в «включенных протоколах» во время ./configure я также мог видеть RTMP/RTMPS и т. д. ...

Очень удивлен, я запустил скомпилированный FFmpeg на целевом устройстве ARM, и он работает без проблем: я думаю, поддержка уже была внутри 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

Проблема решена!

person bcop    schedule 12.10.2017