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

这篇具有很好参考价值的文章主要介绍了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的命令

#!/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

#!/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

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

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

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

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

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

RTMP 使用

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

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

只要这里编译通过,能够运行起项目,那么就说明是编译是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方式:

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

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

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

V7a编译

编写脚本: ffmpeg_with_rtmp_build32.sh

#!/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

执行脚本:

 sh ffmpeg_with_rtmp_build32.sh

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

V8a编译

编译脚本: ffmpeg_with_rtmp_build64.sh

#!/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

执行脚本:

 sh ffmpeg_with_rtmp_build64.sh

最后生成文件在当前目录 : /android/arm64-v8a/ffmpeg_rtmp 下生成对应的.a文件文章来源地址https://www.toymoban.com/news/detail-613184.html

到了这里,关于linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • autox.js的三个版本universal、armeabi-v7a、arm64-v8a的区别

    universal : 通用版(不在乎安装包大小/懒得选就用这个版本,包含以下2种CPU架构so) armeabi-v7a : 32位ARM设备(备用机首选) arm64-v8a : 64位ARM设备(主流旗舰机) ABI 在Android 系统上,每个不同的CPU支持不同的指令集,CPU与指令集的组合都有对应的二进制接口,即ABI armeabi 是第5、

    2024年02月05日
    浏览(49)
  • android ndk clang交叉编译ffmpeg动态库踩坑

    1.ffmpeg默认使用gcc编译,在android上无法使用,否则各种报错,所以要用ndk的clang编译 2.下载ffmpeg源码 修改configure文件,增加命令 cross_prefix_clang 修改以下命令 修改后 3.新建脚本文件,ffmpeg目录下执行脚本文件即可。 编译32位,则ARCH改为arm,CPU改为armv7-a,TARGET改为armv7a-linux-

    2024年02月13日
    浏览(48)
  • Android ffmpeg入门(1)—— 使用NDK交叉编译ffmpeg集成到Android项目

    最近在学习android NDK开发相关内容,借ffmpeg练练手。ffmpeg是做音视频方面功能的基础,后面会随着个人的学习更新一系列ffmpeg博客,防止自己遗忘。 这个系列博客主要目的是基于ffmpeg通过NDK开发的方式完成一个基本的视频播放器。 本篇博客主要实现了 ffmpeg编译 以及 引入 a

    2023年04月08日
    浏览(44)
  • 手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明

    win+R,输入cmd 填下指令如下 adb shell getprop ro.product.cpu.abi 1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它. 2.arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。 3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。

    2024年02月07日
    浏览(65)
  • Android:Device supports x86, but APK only supports armeabi, armeabi-v7a,arm64-v8a on device

    一、前言: 在我运行app的时候出现如下错误 二、解决方案: 我也在网上查了很多,经过自己的尝试验证过的结论分享给大家。 报错信息大概意思是:即设备支持x86,但APK仅支持armeabi, armeabi-v7a,arm64-v8a 原因 模拟机的设备是 x86,但是运行的这个程序的 apk 却只支持 armeabi-v7a

    2024年02月04日
    浏览(52)
  • Android-NDK的linux交叉编译环境

    NDK 下载  |  Android NDK  |  Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例,下载后将压缩包解压至/usr目录下 编译平台变量判断条件中增加一下android条件下CMake的变量 详细变量设置参考 C++ 库支持  |  Android NDK  |  Android Developers 编译出的程

    2024年04月10日
    浏览(45)
  • FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。 登录Linux服务器(比如华为云的欧拉系统),依次执行下面的命令。 重

    2024年03月24日
    浏览(50)
  • Linux 下编译和交叉编译FFmpeg、OpenCV(contrib )库

    目录 一、Linux下FFmpeg库的编译 1.1 yasm库 1.2 安装X264 1.3 安装FFmepg 1.4 实验 报错 二、Linux 下OpenCV库的编译 三、环境变量设置 四、FFmpeg Linux交叉编译 4.1 FFmpeg不依赖其他库编译 4.2 FFmpeg编译依赖库(如X264) 以上3部分验证过得,是正确的,第四步没验证 五、OpenCV的交叉编译 hkx@ubun

    2024年01月22日
    浏览(70)
  • FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址。FFmpeg若要访问https视频,就必须集成第三方的openssl库,但编译FFmpeg时却默认关闭了openssl。为了让App能够播放采用https的在线视频,需要

    2024年04月22日
    浏览(39)
  • FFmpeg开发笔记(九)Linux交叉编译Android的x265库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需x265的so库。 执行以下命

    2024年04月08日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包