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的源码进行交叉编译成静态库或者动态库。
下载解压好源码之后,进入解压后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的编译和运行过程深入分析
-
Android APK反编译技巧深入讲解
-
android apk反编译到java源码的实现方法
-
Android如何防止apk程序被反编译(尊重劳动成果)
-
完美解决Android Studio集成crashlytics后无法编译的问题
-
Android Studio 编译卡慢、卡顿的几种解决方案
-
cocos2d-2.0-x-2.0.3 交叉编译到android报错解决
-
ubuntu 12.10 上 android 编译环境搭建的深入解析
-
解析libcurl在android下的移植、编译与测试
-
Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解