FFmpeg和RTMP结合编译

news/2024/7/10 19:53:12 标签: ffmpeg, rtmp, ndk, 结合编译

文章目录

  • 准备工作
  • 编译librtmp.a库
    • 写脚本
    • 查看编译结果
    • 下载库到mac
  • 编译FFmpeg
    • 打开configure
    • 显示行号
    • 定位到指定行
    • clang关闭
    • 关闭ffmpeg自带的rtmp
    • 写脚本

参考:
FFmpeg下载
librtmp的github

准备工作

新建MyFFmpeg4目录

mkdir MyFFmpeg4

在这里插入图片描述

ffmpeg422_18">下载 ffmpeg-4.2.2

wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2

解压缩

tar -xvf ffmpeg-4.2.2.tar.bz2

rtmp_28">下载librtmp

git clone https://github.com/yixia/librtmp.git

rtmpa_33">编译librtmp.a库

写脚本

进入librtmp目录

cd librtmp

写脚本

vim rtmp_build.sh

脚本内容如下:

#!/bin/bash

NDK_ROOT=/root/android-ndk-r17c

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`/result CRYPTO= SHARED=  XDEF=-DNO_SSL 

执行脚本

sh rtmp_build.sh

TOOLCHAIN的bin目录下的内容如下:
在这里插入图片描述

查看编译结果

在result目录中生成了如下5个目录
在这里插入图片描述
然后在lib目录中找到我们编译好的librtmp.a 库
在这里插入图片描述

下载库到mac

sz librtmp.a

编译FFmpeg

修改ffmpeg代码,不要使用clang,使用gcc,默认clang给关闭掉

打开configure

在这里插入图片描述
找到configure所在目录,修改内容

vim configure

显示行号

:set number

在这里插入图片描述

定位到指定行

可以使用如下命令进行行数跳转

参考:https://blog.csdn.net/varyall/article/details/79220745

  1. 编辑器中跳到文件的第一行:
       a 输入 :0 或者 :1 回车
       b 键盘按下 小写 gg
  2. 编辑器跳到文件最后一行:
       a 输入 : $ 回车
       b 键盘按下大写 G
       c 键盘按 shift + g (其实和第二种方法一样)
  3. 定位到4210行
    :4210

clang关闭

定位到4210行 :4210

注释掉以下代码,把默认为clang关闭掉

在这里插入图片描述

ffmpegrtmp_116">关闭ffmpeg自带的rtmp

定位到6256行 :6256
在这里插入图片描述

写脚本

cd MyFFmpeg4

创建目录 android/armeabi-v7a/ffmpeg_rtmp

vim build.sh

在这里插入图片描述

#!/bin/bash

NDK_ROOT=/root/android-ndk-r17c

CPU=arm-linux-androideabi

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

ANDROID_API=17

PREFIX=./android/armeabi-v7a/ffmpeg_rtmp

RTMP=/root/MyFFmpeg4/librtmp/result

./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 build.sh
cd  /root/MyFFmpeg4/ffmpeg-4.2.2/android/armeabi-v7a/ffmpeg_rtmp

在这里插入图片描述

压缩文件夹

zip -r fflib.zip  ffmpeg_rtmp #压缩 ffmpeg_rtmp目录

下载fflib.zip到mac

sz fflib.zip 

在这里插入图片描述
添加到项目中使用
在这里插入图片描述


http://www.niftyadmin.cn/n/1837448.html

相关文章

qt中mysql怎么支持事务_Qt踩坑之mysql数据库不支持事务操作?

文章已更新,最新地址:https://www.fearlazy.com/index.php/post/145.html现象:在调试数据库操作时发现还没commit数据已经插入表中,执行rollback也没有作用,明明已经调用了transaction(),这是为什么呢&…

查看swf导出类

最近经常要使用美工从Adobe Flash CS5导出的asset.swf,里面都是矢量图片素材。 不过在只有SWF没有FLA的情况下,是看不清楚SWF里面究竟有哪些素材是跟链接类相连的。 我用Sothink SWF Decompiler可以看到导出类,也也可以看到素材,但是却看不到…

PDF文件结构(二)

PDF文件结构(二) ————逻辑结构 作者:bobob 邮件:zxbbobobhotmail.com 要解析一个PDF文件,首先要掌握PDF的物理结构,这是第一步。但是这个仅仅只是基础,更重要的是对PDF逻辑结构的解析。P…

java强制类型转换_强制类型转换(Java)

刚学习了强制类型转换,用自己的理解总结了一下,如果有什么问题,希望大家可以批评指正(评论)。int a300;byte b(byte)a;System.out.println(a);System.out.println(b);运行结果为:当一个超出byte存储范围的int型数进行强制转换时&a…

FFmpeg开发必备的C语言

文章目录HelloWorld常用基本类型常量与变量指针与数组结构体枚举文件操作C语言编译器C语言调试器HelloWorld vi HelloWorld.c#include <stdio.h>int main(int argc,char* argv[]){printf("HelloWorld!\n");return 0; }clang -g -o helloworld HelloWorld.cls …

java -xms_JAVA_OPTS参数-Xms和-Xmx的作用 | 学步园

文章来源&#xff1a;http://www.cnblogs.com/zxp_9527/archive/2008/12/24/1361911.html因为调试JProfile&#xff0c;不断修改Tomcat初始内存参数&#xff0c;往往Servlet还没crash&#xff0c;环境先崩溃&#xff0c;开始怀疑初始化参数的作用。废话不多说&#xff0c;开始研…

理解向日葵甘特之五——使用数据组件)

在上一篇文章讲到SFData的设计的时候&#xff0c;已经简单的提到了数据组件要实现的功能&#xff0c;实际上&#xff0c;数据组件&#xff0c;是SFData的一个插件&#xff0c;这个插件可以调用 SFData的所有的方法和事件&#xff0c;用来完成一些附加的功能和数据逻辑&#xff…

Linux ls命令大全

参考&#xff1a;https://blog.csdn.net/Mechelle__/article/details/82560839 在Linux系统中&#xff0c;随时都会需要知道文件或者目录的相关信息。所以ls是Linux系统中最常被执行的命令之一。 ls&#xff1a;显示非隐藏文件的文件名&#xff0c;按文件名进行排序。ls -a&a…