hi3516a之交叉编译rtmpdump

1.官网下载

[root@demo rtmpdump]# git clone git://git.ffmpeg.org/rtmpdump

2.执行交叉编译

[root@demo rtmpdump]# make SYS=posix CROSS_COMPILE=arm-hisiv300-linux- INC=-I/usr/include

make[1]: Entering directory `/home/Hi3516A/Demo/rtmpdump/rtmpdump/librtmp'
arm-hisiv300-linux-gcc -Wall  -I/usr/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o rtmp.o rtmp.c
In file included from /usr/include/features.h:385:0,
                 from /usr/include/stdint.h:26,
                 from rtmp.c:26:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
 # include <gnu/stubs-32.h>
                           ^
compilation terminated.
make[1]: *** [rtmp.o] Error 1
make[1]: Leaving directory `/home/Hi3516A/Demo/rtmpdump/rtmpdump/librtmp'
make: *** [librtmp/librtmp.a] Error 2
[root@demo rtmpdump]# yum install glibc-devel.i686
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.pubyun.com
 * extras: mirrors.btte.net
 * updates: mirror.neu.edu.cn
base                                                                                                                                                                    | 3.7 kB     00:00     
extras                                                                                                                                                                  | 3.4 kB     00:00     

updates        


/usr/include/openssl/opensslconf.h:31:2: error: #error "This openssl-devel package does not work your architecture?"
 #error "This openssl-devel package does not work your architecture?"
     

[root@demo rtmpdump]# rpm -qa|grep ssl
openssl-devel-1.0.1e-30.el6.11.x86_64
openssl-1.0.1e-30.el6.11.x86_64
docbook-style-dsssl-1.79-10.el6.noarch
[root@demo rtmpdump]#  rpm -e --nodeps openssl-devel-1.0.1e-30.el6.11.x86_64
[root@demo rtmpdump]# rpm -qa|grep ssl
openssl-1.0.1e-30.el6.11.x86_64
docbook-style-dsssl-1.79-10.el6.noarch
[root@demo rtmpdump]#  rpm -e --nodeps openssl-1.0.1e-30.el6.11.x86_64
[root@demo rtmpdump]# rpm -qa|grep ssl
docbook-style-dsssl-1.79-10.el6.noarch
[root@demo rtmpdump]# 


/usr/include/bits/socket.h:427:23: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
rtmp.c:60:25: fatal error: openssl/ssl.h: No such file or directory
 #include <openssl/ssl.h>


[root@demo rtmpdump]# make SYS=posix CROSS_COMPILE=arm-hisiv300-linux- INC=-I/home/srs/simple-rtmp-server/trunk/objs/openssl-1.0.1f/include/
make[1]: Entering directory `/home/Hi3516A/Demo/rtmpdump/rtmpdump/librtmp'
arm-hisiv300-linux-gcc -Wall  -I/home/srs/simple-rtmp-server/trunk/objs/openssl-1.0.1f/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o rtmp.o rtmp.c
rtmp.c: In function ‘RTMP_ReadPacket’:
rtmp.c:3552:7: warning: variable ‘didAlloc’ set but not used [-Wunused-but-set-variable]
   int didAlloc = FALSE;
       ^
arm-hisiv300-linux-gcc -Wall  -I/home/srs/simple-rtmp-server/trunk/objs/openssl-1.0.1f/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o log.o log.c
arm-hisiv300-linux-gcc -Wall  -I/home/srs/simple-rtmp-server/trunk/objs/openssl-1.0.1f/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o amf.o amf.c
arm-hisiv300-linux-gcc -Wall  -I/home/srs/simple-rtmp-server/trunk/objs/openssl-1.0.1f/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o hashswf.o hashswf.c
hashswf.c:69:18: fatal error: zlib.h: No such file or directory
 #include <zlib.h>
                  ^
compilation terminated.
make[1]: *** [hashswf.o] Error 1
make[1]: Leaving directory `/home/Hi3516A/Demo/rtmpdump/rtmpdump/librtmp'
make: *** [librtmp/librtmp.a] Error 2
[root@demo rtmpdump]# 


cp libz.a /usr/local/lib
chmod 644 /usr/local/lib/libz.a
cp libz.so.1.2.8 /usr/local/lib
chmod 755 /usr/local/lib/libz.so.1.2.8
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h

 3.直接进行编译rtmpdump是不可行的,缺少openssl的支持

系统环境:CentOS 6.5 64位

OpenSSL源码包:http://www.openssl.org/source/openssl-1.0.1f.tar.gz

安装zlib库支持:

cd /usr/local/src

wget http://zlib.net/zlib-1.2.5.tar.gz

tar zxvf zlib-1.2.5.tar.gz

cd zlib-1.2.5 www.111cn.net

./configure && make && make install

安装OpenSSL源码包:

wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz

tar zxvf openssl-1.0.1f

cd openssl-1.0.1f/
CC=arm-linux-gcc ./config no-asm shared --prefix=/opt/toolchains/arm-jyxtec-linux-gnueabi/arm-jyxtec-linux-gnueabi/
--prefix请自行指定

参数 : shared 是生成动态连接库, –prefix 为安装目录,openssldir 是配置文件目录。
这样生成的Makefile是不用修改的,直接

[root@demo zlib-1.2.8]# CC=arm-hisiv300-linux-gcc ./config no-asm shared --prefix=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib

[root@demo openssl-1.0.1p]#make

4.交叉编译zlib

[root@demo zlib-1.2.8]# wget http://zlib.net/zlib-1.2.8.tar.gz

[root@demo zlib-1.2.8]# CC=arm-hisiv300-linux-gcc ./configure  --prefix=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib

[root@demo zlib-1.2.8]# make 

[root@demo zlib-1.2.8]# make install

ln -s libz.so.1.2.8 libz.so
ln -s libz.so.1.2.8 libz.so.1
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o examplesh example.o -L. libz.so.1.2.8
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o minigzipsh minigzip.o -L. libz.so.1.2.8
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -D_FILE_OFFSET_BITS=64 -c -o example64.o test/example.c
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o example64 example64.o -L. libz.a
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -D_FILE_OFFSET_BITS=64 -c -o minigzip64.o test/minigzip.c
arm-hisiv300-linux-gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o minigzip64 minigzip64.o -L. libz.a
[root@demo zlib-1.2.8]# 
[root@demo zlib-1.2.8]# make install
cp libz.a /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib
chmod 644 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib/libz.a
cp libz.so.1.2.8 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib
chmod 755 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib/libz.so.1.2.8
cp zlib.3 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/share/man/man3
chmod 644 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/share/man/man3/zlib.3
cp zlib.pc /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib/pkgconfig
chmod 644 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/include
chmod 644 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/include/zlib.h /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/include/zconf.h

5.交叉编译rtmpdump

[root@demo openssl-1.0.1p]# cp /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/include/* include/ -f
[root@demo openssl-1.0.1p]# ls in
include/     install.com  
[root@demo openssl-1.0.1p]# ls include/
openssl  zconf.h  zlib.h
[root@demo openssl-1.0.1p]#

[root@demo rtmpdump]# make SYS=posix CROSS_COMPILE=arm-hisiv300-linux- INC=-I/home/Hi3516A/demo/openssl-1.0.1p/include/
make[1]: Entering directory `/home/Hi3516A/demo/rtmpdump/librtmp'
arm-hisiv300-linux-gcc -Wall  -I/home/Hi3516A/demo/openssl-1.0.1p/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o hashswf.o hashswf.c
arm-hisiv300-linux-gcc -Wall  -I/home/Hi3516A/demo/openssl-1.0.1p/include/ -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_OPENSSL  -O2 -fPIC   -c -o parseurl.o parseurl.c
arm-hisiv300-linux-ar rs librtmp.a rtmp.o log.o amf.o hashswf.o parseurl.o
arm-hisiv300-linux-ar: creating librtmp.a
arm-hisiv300-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/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/../../../../arm-hisiv300-linux-uclibcgnueabi/bin/ld: cannot find -lssl
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/../../../../arm-hisiv300-linux-uclibcgnueabi/bin/ld: cannot find -lcrypto
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/../../../../arm-hisiv300-linux-uclibcgnueabi/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
make[1]: *** [librtmp.so.1] 错误 1
make[1]: Leaving directory `/home/Hi3516A/demo/rtmpdump/librtmp'
make: *** [librtmp/librtmp.a] 错误 2
[root@demo rtmpdump]# 

[root@demo openssl-1.0.1p]# cp libssl.so.1.0.0 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib
[root@demo openssl-1.0.1p]# cp libcrypto.so.1.0.0 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib
[root@demo openssl-1.0.1p]# 

[root@demo lib]# pwd
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib

[root@demo lib]# ln -s libcrypto.so.1.0.0 libcrypto.so

[root@demo openssl-1.0.1p]# cd /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/lib/
[root@demo lib]# cd lib
[root@demo lib]# ls
libz.a  libz.so  libz.so.1  libz.so.1.2.8  pkgconfig
[root@demo lib]# cp libz.so.1.2.8 /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib
[root@demo lib]# ln -s libz.so.1.2.8 libz.so
[root@demo lib]# ln -s libz.so.1.2.8 libz.so.1
[root@demo rtmpdump]# make SYS=posix CROSS_COMPILE=arm-hisiv300-linux- INC=-I/home/Hi3516A/demo/openssl-1.0.1p/include/

//总结:

主要依赖zlib、openssl,需要对以上两库进行交叉编译,
将libz.so.1.2.8、libcrypto.so.1.0.0、libssl.so.1.0.0拷贝到/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib

6.交叉编译rtmpdump(第5 步骤交叉编译librtmp)

要使用最新的librtmp.a  librtmp.so.1

[root@demo librtmp]# vi Makefile

[root@demo librtmp]# cp ../rtmpdump/librtmp/librtmp.a ./librtmp
[root@demo librtmp]# make clean all SYS=posix CROSS_COMPILE=arm-hisiv300-linux- INC=-I/home/Hi3516A/demo/openssl-1.0.1p/include/


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rtmpdump是一个开源的命令行工具,用于从流媒体服务器上下载或录制RTMP流(Real-Time Messaging Protocol)。vc工程是指使用VC++编写的工程项目。将两者结合起来,意味着在VC++环境下使用rtmpdump工具进行流媒体下载或录制。 要在VC++中使用rtmpdump工具,首先需要下载并安装rtmpdump源代码。然后在VC++项目中添加rtmpdump的相关文件,并在代码中引用相关的头文件。接下来,就可以使用rtmpdump提供的函数来实现对RTMP流的下载或录制。 具体而言,可以使用rtmpdumprtmpdump()函数指定要下载或录制的RTMP流的URL,并设置保存的文件路径。通过调用该函数,rtmpdump将连接到流媒体服务器并获取流媒体数据,并将其写入指定的文件中。在下载或录制过程中,还可以使用rtmpdump的其他函数来处理数据流,例如解密、分段等操作。 在VC++中使用rtmpdump工程可以为流媒体下载或录制提供更灵活和定制化的功能。通过使用VC++的编程特性,可以进行更高级的数据处理和界面设计,实现更复杂的功能需求。同时,rtmpdump的开源性质也使得用户能够根据自己的需求对其进行修改和扩展。 总之,通过在VC++中使用rtmpdump工程,可以方便地实现对RTMP流的下载或录制,并根据需要进行定制化的功能扩展。这为开发者提供了更大的灵活性和自由度,以满足不同的流媒体处理需求。 ### 回答2: rtmpdump是一款用于从RTMP流媒体服务器下载或录制音频/视频内容的开源工具。vc工程是指使用Visual C++编程语言和开发环境创建的软件项目。 要创建一个rtmpdump的vc工程,首先需要下载rtmpdump的源代码,然后使用Visual C++打开相应的工程文件。接下来需要配置工程的编译环境,确保所需的头文件和库文件路径正确。 在工程中,会有一些源代码文件,这些文件负责实现rtmpdump的各种功能,例如建立与RTMP服务器的连接、发送请求、接收数据、数据解析等等。这些文件会被编译成可执行的二进制文件。 在编译期间可能会遇到一些依赖项问题,例如需要额外链接一些库文件以支持某些功能。开发人员需要根据编译过程中的错误信息,对工程进行适当的配置和调整,以确保成功编译。 一旦vc工程成功编译完成,就可以生成一个可执行文件,该文件可以在命令行中运行。通过指定RTMP服务器的URL和相关参数,可以让rtmpdump工具连接到服务器并下载或录制所需的音频/视频内容。 总的来说,创建一个rtmpdump的vc工程需要下载源代码、配置编译环境、解决依赖项问题,并根据需要添加自定义功能。通过编译和运行工程生成的可执行文件,就能实现从RTMP流媒体服务器下载或录制音频/视频内容的操作。 ### 回答3: rtmpdump是一个用于下载和保存RTMP流的工具。它提供了用于处理RTMP协议的源代码,可以自定义编译和构建,获得一个可以在不同平台上运行的RTMP下载工具。 RTMP是一种用于流媒体传输的协议,它是Adobe公司开发的一种实时通信协议,常用于视频直播、在线游戏和音频通信等领域。rtmpdump工具可以连接到RTMP服务器,读取和接收RTMP流,并将其保存为本地文件。 vc工程是指使用Visual C++编译器创建的工程。通过将rtmpdump的源代码加入到Visual C++工程中,我们可以使用VC++的功能和特性来构建和调试rtmpdump工具。这样,我们就可以根据自己的需求进行修改和定制,使其能够更好地满足我们的需求。 在vc工程中,我们可以使用rtmpdump的源代码来构建一个命令行界面的工具,以便用户可以通过命令行输入相关参数来下载RTMP流。我们可以利用Visual C++的调试功能来排查和修复可能存在的问题,提高工具的稳定性和性能。 除了在vc工程中进行开发和调试,rtmpdump还可以在不同的平台上进行编译和构建,如Linux、Mac和Android等。这使得rtmpdump工具具有更广泛的适用性和可移植性。 总结来说,rtmpdump vc工程是指使用Visual C++编译器创建的工程,并集成了rtmpdump的源代码,使其能够在Windows平台上运行和定制化,从而实现对RTMP流进行下载和保存的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值