linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程

最近在学RTMP,记录一下完成的编译流程

我是mac 电脑,但是mac上编译一直通过不了,后来才换到服务器上编译,

其实mac也能编译,只是最开始踩到坑里面了...

这里记录一下linux编译完整流程

环境:

  • NDK: android-ndk-r17c
  • Ffmpeg: ffmpeg4.2.2 (高版本也可以编译)
  • system: mac

1. 编译rtmp

首先下载 rtmp https://github.com/yixia/librtmp 导入到linux上

V7a编译

编写脚本: rtmp_build32.sh

// 网上copy的命令

shell 复制代码
#!/bin/bash
// NDK路径
NDK_ROOT=$NDK
 
CPU=arm-linux-androideabi
 
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
 
export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=17"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-17/arch-arm "
export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
 
make install SYS=android prefix=`pwd`/android/v7a CRYPTO= SHARED=  XDEF=-DNO_SSL

执行命令:

sh rtmp_build32

V8a编译

编写脚本: rtmp_build64.sh

shell 复制代码
#!/bin/bash
 
NDK_ROOT=$NDK
CPU=aarch64-linux-android
TOOLCHAIN=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-21/arch-arm64 "
export CROSS_COMPILE=$TOOLCHAIN/bin/aarch64-linux-android-
 
make clean

make install SYS=android prefix=`pwd`/android/v8a CRYPTO= SHARED=  XDEF=-DNO_SSL

只要看到这种,就是编译成功了

然后就可以看到编译的结果:

此时一定要把rtmp导出放到as上看看是否可用, 否则ffmpeg + rtmp 一辈子也编译不出来, 这个坑我踩了2天...

RTMP 使用

在CPP下创建rtmp文件,并导入头文件测试

只要这里编译通过,能够运行起项目,那么就说明是编译是ok的

ffmpeg + RTMP 交叉编译

下载ffmpeg 4.2.2

复制代码
wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2

解压FFmpeg4.2.2

复制代码
tar -xvf ffmpeg-4.2.2.tar.bz2

进入 ffmpeg4.2.2目录,执行 生成makefile

复制代码
./configure --disable-x86asm

修改 configure:

由clong方式改为GCC方式:

注释掉原本ffmpeg使用的rtmp,采用自己的rtmp

V7a编译

编写脚本: ffmpeg_with_rtmp_build32.sh

shell 复制代码
#!/bin/bash
 
 # NDK路径
NDK_ROOT=$NDK
 
CPU=arm-linux-androideabi
 
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
 
ANDROID_API=17
 
 # 生成.a文件地址
PREFIX=./android/armeabi-v7a/ffmpeg_rtmp
 
 # 刚才 rtmp 生成的地址
RTMP=/Tools/librtmp-master/android/v7a
 
./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-librtmp \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-$ANDROID_API/arch-arm \
--extra-cflags="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS -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 -I$RTMP/include" \
--extra-ldflags="-L$RTMP/lib" \
--extra-libs="-lrtmp" \
--arch=arm \
--target-os=android
 
make clean
 
make install

执行脚本:

shell 复制代码
 sh ffmpeg_with_rtmp_build32.sh

编译时间 可能需要将近5分钟

V8a编译

编译脚本: ffmpeg_with_rtmp_build64.sh

shell 复制代码
#!/bin/bash
PREFIX=./android/arm64-v8a/ffmpeg_rtmp

NDK_ROOT=$NDK

CPU=aarch64-linux-android

TOOLCHAINS=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64

ANDROID_API=21

RTMP=/Tools/librtmp-master/android/v8a

./configure \
--prefix=$PREFIX \
--enable-small \
--disable-avdevice \
--disable-filters \
--disable-encoders \
--disable-muxers \
--disable-yasm \
--disable-programs \
--enable-librtmp \
--enable-cross-compile \
--cross-prefix=$TOOLCHAINS/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-$ANDROID_API/arch-arm64 \
--extra-cflags="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/$CPU -D__ANDROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS  -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fPIC -I$RTMP/include" \
--extra-ldflags="-L$RTMP/lib" \
--extra-libs="-lrtmp" \
--arch=arm64 \
--target-os=android
 
make clean
make install

执行脚本:

shell 复制代码
 sh ffmpeg_with_rtmp_build64.sh

最后生成文件在当前目录 : /android/arm64-v8a/ffmpeg_rtmp 下生成对应的.a文件

相关推荐
jingyu飞鸟20 分钟前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_77723 分钟前
Linux -- exec 进程替换
linux·运维·chrome
李白客28 分钟前
国产数据库选型指南:从技术路线到实战要点
运维·数据库·数据库架构·迁移学习
数智化精益手记局30 分钟前
人员排班管理软件的自动化功能解析:解决传统手工人员进行排班管理耗时长的难题
运维·数据结构·人工智能·信息可视化·自动化·制造·精益工程
jy41932171 小时前
VPS 网络质量怎么测?一篇讲清楚多节点 ping、tcping 和回程路由
运维
wicb91wJ61 小时前
Nginx反向代理与负载均衡配置详解
运维·nginx·负载均衡
ElfBoard1 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
HackTorjan2 小时前
AI驱动的制品库高效管理:智能分类、自动化追踪与全生命周期优化
linux·人工智能·分类·自动化
.千余2 小时前
【Linux】进程概念
linux·服务器·开发语言·学习
蜡台2 小时前
centos 8 安装 nginx-1.29.8 及相关配置教程
linux·nginx·centos