从0到1手撸FFmpeg播放器[1]:FFmpeg的so库编译
来源:互联网 发布:嘉嘉购物业软件 编辑:程序博客网 时间:2024/05/21 11:16
只要有基本的Linux基础,即可编译成功
FFmpeg编译需要的资源
- 1、FFmpeg源码包:http://ffmpeg.org/download.html
- 2、android NDK(我这里用的是13,在http://www.androiddevtools.cn/ 上下载的): https://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip
- 3、ubuntu 12 当然,其他linux也是可以的
实操环节:
1、进入linux,下面我基本都在/home目录下(当然也可以在其它目录),这个纠结没卵用。
2、mkdir ffmpeg 创建一个文件夹,后面文件就都放进来
3、把上面的FFmpeg源码包和ndk包复制到这个目录下面,可以使用WinSCP等工具。
4.1、首先安装ndk13,不过与其说安装不如说是解压(linux系统- -),解压命令为
unzip android-ndk-r13-linux-x86_64.zip ,unzip后面跟的是文件名字。
4.2、等待了几分钟(机器性能决定),包解压好了。下图所示:
4.3 下一步需要配置环境变量,这个跟java在window配置环境变量是同一回事(为了能找到这个程序运行)。
4.3.1、Vim工具少用,记不住指令,这里使用了简单的nano工具,这个挺好用的,编辑都挺方便。
命令:nano ~/.bashrc (bashrc 这个是环境配置的东西)。
4.3.2、把环境变量加上: export NDK=/home/ffmpeg/android-ndk-r13
(解压的路径) export PATH=${PATH}:$NDK
(不需要改)
^就是ctrl + 的意思,^V 就是ctrl + v 组合键,按到最后,把环境变量加上去
按 ctrl + o 保存,ctrl + x退出。
4.3.3、命令:source ~/.bashrc 刷新环境变量
4.3.4、检查 NDK是否安装成功 命令:ndk-build -v
如果出现:ERROR:Cannot find ‘make’ program.Please install make package or define the GNUMAKE variable to point to it. 这个是你系统没有安装 make,命令:apt-get install make 安装即可,至此 NDK安装完成。
5.1、把FFmpeg解压,命令:tar -vxf ffmpeg-3.3.2.tar.bz2 ,这个解压速度很快
5.2、现在开始配置FFmpeg,配置生成安卓的so库,进入ffmpeg目录,绿色的configure就是配置文件
5.2.1、编辑配置文件:使用ctrl + w 快速找到SLIBNAME_WITH_MAJOR
这里需要把
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
改为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
至于为什么要改成这样,网上都说是为了生成android的so文件,不这样的话,会生成其他东西,这里改成这样就完事了,喜欢可以纠结。
改完,保存,然后退出就行。
到此,准备完成,最后一步,配置脚本,生成各种abi(x86,armeabi,mips…)
6.1、一种脚本只能成功一种类型的abi的,下面就是比较通用的armeabi脚本
#!/bin/bashexport TMPDIR=/home/ffmpeg/tmpdir #临时目录路径,编译文件的缓存目录NDK=/home/ffmpeg/android-ndk-r13 #ndk的路径SYSROOT=$NDK/platforms/android-14/arch-arm/ #编译最小兼容到的android api版本,我这个是兼容到api 14.TOOLCHAIN=/home/ffmpeg/android-ndk-r13/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 #toolchains是工具链,我这里是编译arm肯定要找arm,如果x86就选x86的目录路径CPU=arm # 指定是arm指令集 下面的arch=arm也是这个意思PREFIX=/home/ffmpeg/output_arm #编译文件的输出目录ADDI_CFLAGS="-marm"function build_one{./configure \--prefix=$PREFIX \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-doc \--disable-symver \--enable-small \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--target-os=linux \--arch=arm \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake install}build_one
后面我将提供两个脚本 分别是armeabi 和 x86,同时也提供查考的脚本网址
6.2、脚本搞好就把他防盗ffmpeg目录下面:
脚本文件名字是build_android_arm.sh 和 build_android_x86.sh 此时是灰色的也就是没有执行权限,简单粗暴命令: chmod 777 build_android_arm.sh 和 chmod 777 build_android_x86.sh,加上全权限:
最最最最后一步: 运行脚本: ./build_android_arm.sh 生成arm的 ./build_android_x86.sh生成x86,生成过程挺长,我用了20多分钟,一次只能执行一个脚本,两个脚本,准备40分钟吧。。。
7:finish:
生成的文件不知道为何有软连接的,我也搞不懂,蓝色相当于window系统的快捷链接,不过也没影响,不要就是了,知道了可以留言。
8 上传文件要审核。。。 文件名字叫ffmpeg脚本.zip
其他脚本:https://github.com/RoyGuanyu/build-scripts-of-ffmpeg-x264-for-android-ndk
- 从0到1手撸FFmpeg播放器[1]:FFmpeg的so库编译
- ffmpeg编译android的so库
- iOS中编译FFMpeg和使用FFMpeg的播放器
- FFmpeg编译.so
- ios8.1下继续编译ffmpeg做完整功能的播放器
- Ubuntu下编译android所需ffmpeg的so库
- Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库
- Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库
- Linux FFmpeg 编译so动态库
- ffmpeg 编译时遇到的make:***[libavcodec-57.so]Errror 1问题
- ffmpeg+sdl教程----------编写一个简单的播放器1
- ffmpeg+sdl教程----------编写一个简单的播放器1
- ffmpeg+sdl教程----------编写一个简单的播放器1
- ffmpeg+sdl教程----------编写一个简单的播放器1
- 从ffmpeg中提取mp3播放器
- 从ffmpeg中提取mp3播放器
- 从ffmpeg中提取mp3播放器
- ffmpeg ios6.1编译
- FlexboxLayout
- Linux摄像驱动四:USB摄像驱动分析
- Qt基础 06_信号和槽(二)自定义信号和槽的实例
- 安卓自定义控件之仪表盘
- 物理静态资源路径映射逻辑资源路径
- 从0到1手撸FFmpeg播放器[1]:FFmpeg的so库编译
- 修改eclipse文件的编码格式
- Python-杂记
- 统计以a开头的词
- 学习9:rosed命令的简单介绍 + 创建ROS消息和ROS服务。
- xgboost详解
- CFRunloop 优化TableView加载高清大图UI卡顿问题。单独分批加载
- 第一个Ajax,判断用户名是否可用
- 并发服务器中的fork函数、 子进程与父进程的区别