网站首页 > 技术教程 正文
一,下载资源并配置环境变量
1.配置ndk编译环境
具体操作参考:ndk交叉编译这篇博客
2.下载并解压ffmpeg
此处下载ffmpeg4.0.2这个版本其他版本不能保证成功,下载地址:http://www.ffmpeg.org/releases/
wget http://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
tar -xvf ffmpeg-4.0.2.tar.bz2解压后可以看到下面的目录结构
二,编译ffmpeg
1.切换用户
切换到root用户下,并执行./configure检查配置(非root用户会存在权限问题而无法编译项目)
./configure2.编写脚本
检查完毕后,编写脚本传参给 configure对项目进行交叉编译这里取名为android_build.sh
#!/bin/bash
#NDK目录所在位置
NDK_PATH=/home/administrator/android/ndk/tool/android-ndk-r17c
#编译产物目录路径
PREFIX=../output/arm
#编译工具链前缀,这里写死arm-linux-androideabi-4.9(目标机器是arm32位)此处也可提取出一个变量在外部控制
TOOLCHAIN=$NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
#传递给gcc的参数,从as的 externalNativeBuild/xxx/build.ninja参考过来,  反正下面的配置,可以压制警告的意思
FLAGS="-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"
INCLUDE=" -isystem $NDK_PATH/sources/android/support/include"
# 1.--prefix=$PREFIX 指定编译产物输出目录
# 2.--enable-small 优化大小 非常重要,必须优化才行的哦
# 3.--disable-programs 不编译ffmpeg程序(命令行工具),我们是需要获取静态、动态库
# 4.--disable-avdevice 关闭avdevice模块,此模块在android中无用
# 5.--disable-encoders 关闭所有编码器(播放不需要编码)
# 6.--disable-muxers 关闭所有复用器(封装器),不需要生成mp4这样的文件,所有关闭
# 7.--disable-filters 关闭所有滤镜
# 8.--enable-cross-compile 开启交叉编译(ffmpeg是跨平台的,注意:并不是所有库都有这么happy的选项)
# 9.--cross-prefix 看右边的值就知道是干嘛的,gcc的前缀..
# 10.disable-shared / enable-static 这个不写也可以,默认就是这样的,(代表关闭动态库,开启静态库)如果编译动态库就传enable-shared / disable-static
# 11.--sysroot 传递编译时用到的系统库所在的路径
# 12.--extra-cflags 会传给gcc的参数
# 13.--arch  --target-os 
./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-shared \
--enable-static \
--sysroot=$NDK_PATH/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDE" \
--extra-cflags="-isysroot $NDK_PATH/sysroot/" \
--arch=arm \
--target-os=android \
 
make clean
make install3.执行脚本
sh android_build.sh如果执行过程中,出现make notfound,表示系统没有安装make程序,执行apt install make即可解决
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
三,集成静态库到安卓工程
1.新建安卓ndk工程
具体步骤可以参考:交叉编译安卓动态/静态链接库_交叉编译链接动态库_Hfengxiang的博客-CSDN博客
2.拷贝源文件到项目中
3.编写CMakeList.txt文件
cmake_minimum_required(VERSION 3.10.2)
project("ffmpeg_test")
#TODO 第一步,导入头文件
include_directories("include")
#TODO 第二步批量导入所有源文件
aux_source_directory("${CMAKE_SOURCE_DIR}" my_source_path)
#TODO 第三步 导入库文件 CMAKE_SOURCE_DIR=CMakeList.txt所在位置
#静态库的位置
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/${CMAKE_ANDROID_ARCH_ABI}")
#动态库的位置
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")
 
add_library( # Sets the name of the library.
             native-lib
 
             # Sets the library as a shared library.
             SHARED
 
             # Provides a relative path to your source file(s).
             ${my_source_path} )
 
find_library( # Sets the name of the path variable.
              log-lib
              log )
 
target_link_libraries( # Specifies the target library.
                       native-lib
 
                       # Links the target library to the log library
                       # included in the NDK.
        #TODO 第四步 将ffmpeg相关的库链接到总库
                       ${log-lib}
                        avformat
                        avfilter
                        swscale
                        avcodec
                        avutil
        )4.调用ffmpeg库的方法
5.效果展示
原文 编译ffmpeg并集成到安卓工程中_Hfengxiang的博客-CSDN博客
猜你喜欢
- 2024-11-05 ffmpeg编译for android(ffmpeg编译ffplay)
- 2024-11-05 FFmpeg交叉编译、脚本参数配置(fio交叉编译)
- 2024-11-05 Linux 交叉编译FFmpeg库(linux 交叉编译工具)
- 2024-11-05 FFmpeg4.2.2 交叉编译(netperf交叉编译)
- 2024-11-05 使用基于 PHP 的开源软件 YOURLS 搭建短链接地址服务
- 2024-11-05 尚大软考上午真题3精解-2020年11月-信息系统项目管理师
- 2024-11-05 ScalersTalk成长会Java小组第7周学习笔记
- 2024-11-05 一文读懂 Android FFmpeg 视频解码过程与实战分析
- 2024-11-05 直播预告丨知风险、守规程、会逃生,这场培训可千万别错过!
- 2024-11-05 基于WEB的新闻发布系统论文(基于web的新闻发布系统的设计毕业论文)
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
- 
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
 
- 标签列表
- 
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
 

本文暂时没有评论,来添加一个吧(●'◡'●)