前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ffmpeg-编译

ffmpeg-编译

原创
作者头像
凌霄plus
发布2023-02-14 10:15:34
5880
发布2023-02-14 10:15:34
举报
文章被收录于专栏:凌霄的专栏

记一次编译ffmpeg过程:

环境准备
  1. ubuntu16.04 我是64位,所以还要额外安装32位依赖库
  2. ndk环境

首先去官网下载最新的源码:ffmpeg4.0.2

随便解压到一个目录,先运行一次命令./configure,如果没错可以进行下一步操作,编写脚本

新建一个xxx.sh文件,往里面写入如下内容:

代码语言:shell
复制
#!/bin/bash

NDK=/opt/android-ndk-r14b #ndk目录
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a  #需要编译哪种架构的so库
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

function build_android
{
./configure \
--prefix=$PREFIX \  #规定编译文件在哪里生成
--enable-neon \
--enable-hwaccels \
--enable-shared \ #生成动态库(共享库)
--target-os=android \ #目标系统
--enable-jni \
--enable-mediacodec \ #硬解码支持
--enable-decoder=h264_mediacodec \ 
--disable-static \ #禁止生成静态库
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \  #交叉编译链
--arch=arm \ #目标平台架构
--cpu=armv7-a \
--enable-cross-compile \  #启用交叉编译方式
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
build_android

放入解压之后的根目录,我这里命名为build.sh。然后在终端执行命令 bash build.sh。我第一次编译提示如下错误jni not found:

找了搜索好几天无果,后面拿着log结合别的文章看了又看,觉得可能是ndk版本的问题,于是换成r14,结果编译成功了。

ndk-r16版本:

ndk-r14版本:

主要是缺失了include文件夹,include文件夹里有个jni.h头文件,所以会报错jni not found。

然后再次运行脚本,没有错误,就执行下面两个命令:

代码语言:shell
复制
make 
make install

编译完成后,在当前目录下的android/arm/下会有inclue 和 lib两文件夹  inclue 存放的是相关模块的.h文件,lib 存放的就是.so文件 

最后放上ffmpeg编译好的github地址:ffmpeg_build_demo

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档