rtmpdump交叉编译(NDK编译rtmpdump引入到Android工程)

要做一个手机直播采集项目,首先你要解决的是推流问题,而目前几乎所以的直播项目采用都是rtmp协议进行推流。

今天我们就将rtmpdump这个开源库进行交叉编译,以便后续在采集到音视频推送到服务器时使用。

环境准备

今天我们使用的是编译系统是Mac系统。

使用的NDK版本是r16,这是因为我们查看rtmpdump的Makefile文件发现默认是使用gcc进行编译的,而NDK在r18之后之后彻底移除了gcc(包含r18版本),
所以我们使用r16进行交叉编译,当然你使用r17应该也是可以的。

编译步骤

首先到rtmpdump的官网下载rtmp的源码:http://rtmpdump.mplayerhq.hu/download/
进入官网之后,我们发现居然有专门针对android平台和windows平台的源码下载,难道是他们已经帮我们编译好了吗?

其实我们要下载的不是带有android字样的版本,而是应该下载后缀名为tgz的源码,因为带有android的仅仅是官方给我我们编译好的可执行文件,也就是rtmp的命令行工具而已,而我们实际开发中是需要调用的是rtmp的相关API进行推流,所以我们需要下载后缀名为tgz的源码进行交叉编译成静态库或者动态库。

rtmpdump交叉编译(NDK编译rtmpdump引入到Android工程)
下载正确的rdmp源码

下载解压好源码之后,进入解压后librtmp的源码目录:

cd librtmp

编写编译脚本`build_rtmp.sh:

#!/bin/bash
# 将NDK的路径替换成你自己的NDK路径
NDK_ROOT=/Users/liangchuanfei/Documents/Android/SDK/android-ndk-r16b

# 设置工具链mac苹果电脑的是darwin-x86_64 而如果是linux的话则是linux-x86_64

TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

CPU=arm-linux-androideabi

export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fPIC"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-21/arch-arm "
export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-

# XDEF=-DNO_SSL 的意思是不用SSL,因为rtmp内部使用了SSL,如果开启的话需要编译链接SSL的库
make install SYS=android prefix=`pwd`/install CRYPTO= SHARED=  XDEF=-DNO_SSL

然后增加执行权限:

chmod +x build_rtmp.sh

最后执行编译脚本./build_rtmp.sh即可成功编译出静态库。

编译出静态库之后就可以把头文件以及点a文件拷贝到AS中引入到Android工程中使用了。

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/zixun/20040.html

(0)

相关推荐

发表回复

登录后才能评论