网站首页 > 技术教程 正文
一,下载资源并配置环境变量
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用户会存在权限问题而无法编译项目)
./configure
2.编写脚本
检查完毕后,编写脚本传参给 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 install
3.执行脚本
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的新闻发布系统的设计毕业论文)
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (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)
本文暂时没有评论,来添加一个吧(●'◡'●)