您当前的位置: 首页 >  音视频

命运之手

暂无认证

  • 2浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android音视频开发】【018】Linux下编译ffmpeg

命运之手 发布时间:2020-10-15 18:37:39 ,浏览量:2

什么是FFMPEG

FFMPEG是一套专业的音视频处理工具,它包含了多个组件,可以被编译为供不同平台和操作系统使用的动态库

完整的FFMPEG库体积特别大,而且还可能配合其它库来使用,因此我们必须学会自己根据功能和平台,来编译不同的FFMPEG库

编译FFMPEG存在的坑

  • 不同版本的FFMPEG库,功能和组件不一样,脚本选项不一样
  • 不同版本的NDK,工具链不一样,可用指令不一样
  • FFMPEG库会调用Linux系统的指令,不同版本的Linux系统,内嵌的工具链不一样,可用质量不一样
  • Linux系统和Windows系统编译方式不一样,大多权威的音视频库代码,都是为Linux系统而设计的。要编译成Windows上可用的动态库,必须借助交叉编译工具才能完成。这样又会带来更多问题,因为交叉编译工具也存在版本问题

上面的每个问题,都是非常难解决的

对于新手来说,基本是不可能靠自己解决的

所以最好的建议,就是大家使用版本完全相同的编译工具集

等以后大家自己弄清不同版本差异后,再换版本

编译工具及版本

  • VMWare 任意版本,用来安装虚拟Linux系统。不建议在Windows系统中交叉编译,虚拟机一般人花点时间都能自己学会,但是交叉编译的坑,大多人是没法解决的
  • ubuntu-14.04.6,注意必须是这个版本的,更高版本内置指令不一样,无法用来编译FFmpeg库
  • FFmpeg 4.3.1
  • ndk-r21b-linux,注意是Linux版本的

解压压缩包

  • 装好Ubuntu系统后,将FFmpeg库解压到Home/ffmpeg-4.3.1位置
  • 将ndk-r21b解压到Home/android-ndk-r21b-linux位置

修改configure脚本,指定so库命名规则

打开ffmpeg-4.3.1/configure文件,修改以下四个变量的值


	SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
	LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
	SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
	SLIB_INSTALL_LINKS='$(SLIBNAME)'

编写编译脚本

在ffmpeg-4.3.1下新建一个build_android_so.sh文件,写入以下代码,这个脚本用来最终生成so库

注意TARGET和TOOLCHAIN两个变量,如果你使用的路径和我的不一样,记得调整这两个路径


	#!/bin/bash
	
	TARGET=~/armeabi-v7a
	TOOLCHAIN=~/android-ndk-r21b-linux/toolchains/llvm/prebuilt/linux-x86_64
	
	build()
	{
	./configure \
	--prefix=$TARGET \
	--disable-asm
	--enable-static \
	--enable-shared \
	--enable-small \
	--enable-gpl \
	--disable-doc \
	--disable-programs \
	--disable-avdevice \
	--enable-cross-compile \
	--target-os=android \
	--arch=armeabi-v7a \
	--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang \
	--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
	
	make clean
	make -j4
	make install
	}
	
	build

执行编译脚本

在任意位置按下【Ctrl+Alt+T】,打开命令行窗口

输入【cd ~/ffmpeg-4.3.1】,进入ffmpeg文件夹

输入【chmod +x build_android_so.sh】,赋予脚本文件可执行权限

输入【./build_android_so.sh】,执行编译脚本

查看生成的so库

打开Target变量对应的目录,即【Home/armeabi-v7a/lib】,即可看到编译生成的so库,拷贝到安卓项目即可

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0412s