作者:字节流动
来源:https://blog.csdn.net/Kennethdroid/article/details/86418725
FFmpeg 是什么?
FFmpeg 全称(First Forward MPEG),是一款领先的开源多媒体框架,采用 LGPL 或 GPL 许可证,除了具有音视频编解码功能外,还有视频格式转换、视频抓图、视频水印、推流等功能。 FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows 、Mac OS X 等。
FFmpeg的官方网站是:http://ffmpeg.org/
Windows 平台下,编译好的可用版本一般有三个: Static ,Shared ,Dev 。Static 里面有 3 个应用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe ,动态链接库都被编译在 exe 文件中,每个 exe 的体积都很大,可直接运行,如播放一段视频,命令行下执行:ffmpeg video.mp4
。Shared 里面除了 3 个应用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe 之外,还有一些动态链接库,如 avcodec-54.dll 之类的,Shared 里面的 exe 体积较小。Dev 版本主要用于开发的,里面包含了一些库文件 xxx.lib 和文件 xxx.h 。
Linux 平台下,本文选择的版本是 2.6.9 ,地址:http://ffmpeg.org/olddownload.html
编译 FFmpeg
搭建 Linux 开发环境,安装 Ubuntu 虚拟机或者电脑装成双系统,或者购买一个低配的阿里云主机,文件传输工具推荐 FileZilla 或 XFTP 。
Linux 环境下配置 NDK
首先下载 Linux 环境下的 NDK (注意*),如 android-ndk-r11c-linux-x86_64.bin
。
执行如下命令进行解压缩:
./android-ndk-r11c-linux-x86_64.bin
配置环境变量,首先编辑 .bashrc 文件。
vim ~/.bashrc
在文件结尾添加两行代码:
export NDKROOT=( NDK 解压的根目录)如 、/usr/workspace/ndk/android-ndk-r11c export PATH=$NDKROOT:$PATH
更新环境变量:
source ~/.bashrc
编译准备
首先下载 FFmpeg ,地址:http://ffmpeg.org/olddownload.html。
解压:uzip ffmpeg-2.6.9.zip
然后编写用于编译的 Shell 脚本,在 ffmpeg-2.6.9 根目录下执行:vim build_android.sh
然后修改根目录下的 configure 文件。
#找到并注释以下代码 #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)'
修改文件权限:
chmod +x build_android.sh configure
执行一下脚本开始编译:
./build_android.sh
约几分钟后,编译生成的动态库文件如下:
后续我们将在 Android 环境下的音视频编解码中使用这个动态库。
NDK 开发系列文章:
- NDK 编译的三种方式
- NDK 开发中引入第三方静态库和动态库
- NDK 开发中 Native 与 Java 交互
- NDK POSIX 多线程编程
- NDK Android OpenSL ES 音频采集与播放
- NDK FFmpeg 编译
- NDK FFmpeg 音视频解码
- NDK 直播流媒体服务器搭建
- NDK 直播推流与引流
- NDK 开发中快速定位 Crash 问题
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。