
今日科技新闻
近日,有外媒报道称,中国正计划打击包括比特币在内的虚拟货币集中场外交易。对象包括提供场外集中交易的场所和平台、为此类交易提供清算结算服务的服务提供商以及为集中交易提供做市服务的个人和机构。
关于作者
本文来自牟飞的贡献,分享了FFmpeg4Android移植包的实现技术。希望大家会喜欢!
牟飞的博客地址:
前言
一个公司项目,iOS端说Android端拍的视频码率不对开yun体育app官网网页登录入口,他无法播放。我一直使用PictureSelector来选择或拍摄图片和视频。询问开源作者后,发现录音没有经过任何处理。直接调用的系统拍摄只提供了将拍摄质量设置为0或1的方法kaiyun.ccm,我无奈地思考。它压缩了自己。说到视频处理,现在最流行的肯定是FFmpeg了。 FFmpeg的移植并不难,但是太棘手了。由于移植比较麻烦,所以就想是否可以移植FFpemg,打包成lib。以后其他项目直接引用就可以了,不再需要移植了。经过三天的各种折腾和测试,终于成功了。 。 。 。
文本
源码下载:首先下载ffmpeg-3.2.4的源码。最好下载源码。我首先使用的是官网最新版本。我建的时候老是报错。最后我改成了3.2.4,就没有再报错了。知道了! ffmpeg-3.2.4地址:下载并解压到纯英文路径,然后将源码路径添加到环境变量中编译FFmpeg生成.so文件

将FFmpeg的源代码和.mk文件复制到jni中。将Demo中jni中的这些文件复制到您模型中的jni中。图中红框选中的三个不要复制。这是根据项目生成的(如果你直接引用这个模型,就不用担心)。


在控制台切换到java文件夹,输入javah com.ffmpegtest.xxx.utils.FFmpegKit(FFmpegKit的引用路径)。该命令只有在java目录下执行才能成功。直接进入Utils目录会报找不到。到 .so 文件。编译成功后,会生成图中黑框内的两个c++文件。将这两个文件剪切并粘贴到 jni 文件夹中。


您可能会注意到,新创建的文件与生成的 .h 文件具有相同的名称,但格式不同。是的,没错,他们必须保持一致。这是根据项目包名生成的,不能随便改!更改Android.mk中LOCAL_SRC_FILES值和FFmpeg源代码路径

在Application.mk中,设置so库的生成。这里我们只设置了armeabi-v7a下的生成(添加空格供其他库生成,考虑到生成的so文件都是10M+,所以没有设置其他设置)

在app下的gradle中设置so库支持和路径读取:

在Manifest中添加版本设置(别忘了添加读、写和相机权限)

将 android.useDeprecatedNdk=true 添加到 gradle.properties。如果不添加,可能会出现“xxx.so”是32位而不是64位的错误。

编译FFmpeg生成.so文件。上述配置完成后,就可以编译了。在控制台切换到jni目录,执行ndk-build命令(需要配置ndk)。执行完成后,会自动生成libs和obj两个文件夹。这就是我们需要的.so 文件。

这里引用一句话:如果编译时报各种警告,则生成的.so将无法运行。拿我们上面创建的 com_ffmpegtest_www_utils_FFmpegKit.c 文件,随机删除一些东西,保存它,执行 ndk-build,然后将其恢复到正确的状态。再次执行ndk-buildkaiyun全站网页版登录,别问我为什么,我们就明白编译器不知道什么是好什么是坏!
结论
至此,FFmpeg的移植就完成了。至于如何压缩和添加水印,那就是FFmpeg命令行的具体应用了。你可以将Demo和FFmpeg文档结合起来,你就会有福了。 Demo中的ffmpeglib已经打包完毕。可以直接导入模型并在项目中使用(个人测试没有问题),这样就避免了每次都编译。而且,独立的mk和gradle配置避免了与其他第三方库的冲突。 。
非常感谢reverse_Android对此集成的帮助和解答。
参考文章如下
基于FFmpeg的最简单移动端示例:Android HelloWorld
FFmpeg-Android拍摄压缩Demo(敲黑板)
仿微信视频拍摄UI,基于ffmpeg进行视频录制与编辑(第1部分)(api>22时找不到so文件,谨慎使用)
项目github地址:
如有疑问,请留言,谢谢!
欢迎长按图片->识别图片中的二维码

