欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android交叉编译RtmpDump

程序员文章站 2022-05-22 20:01:16
...

要做一个手机直播采集项目,首先你要解决的是推流问题,而目前几乎所以的直播项目采用都是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的源码进行交叉编译成静态库或者动态库。

Android交叉编译RtmpDump

下载解压好源码之后,进入解压后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工程中》,方法大同小异。

最后如果你对音视频开发感兴趣可扫码关注

Android交叉编译RtmpDump