要做一个手机直播采集项目,首先你要解决的是推流问题,而目前几乎所以的直播项目采用都是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的源码进行交叉编译成静态库或者动态库。
下载正确的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工程中使用了。如果你还不知道如何引用可以参考下这篇文章:《将ffmpeg引入到Android Studio工程中》,方法大同小异。
网友评论