Android FFmpeg命令行工具支持进度回调

本工程是基于FFmpeg4.2.3,在工程里面也有一个3.3.2的版本,有需要的可以自己去Git库里面checkout,工程17年就做好了,一直没有开源,原谅我懒,哈哈哈

源码地址:https://www.raoyunsoft.com/wordpress/index.php/2020/06/29/bzcmdffmpeg/

工程支持进度回调,移动端常用的的功能都支持,如果需要支持更多的功能需要重新编译FFmpeg,请参考我之前的编译工程:https://www.raoyunsoft.com/wordpress/index.php/2020/05/26/ffmpeg-build-android/ 来启用更多的FFmpeg所支持的功能。

工程大致结构如下:

在这里插入图片描述

思路是这样的,FFmpeg本来就是只支持命令行调用的,也就是它的main函数,我们要做的就是基于这个函数进行改造,原始工程有很多exit_program操作,这个在电脑上的命令行工具调用没有问题,但是在Android手机上直接退出就有问题了,这个需要改,还有就是一些静态,全局变量使用之后需要还原,最后就是支持进度回调了。需要注意的是之前我工程里面包含cpp文件,然后怎么编译都会有问题,最后全部改成c文件编译成功了。

1.首先你需要把这些文件从FFmpeg源文件中Copy出来,以及编译过后的头文件copy过来
cmdutils.c
cmdutils.h
ffmpeg.c
ffmpeg.h
ffmpeg_filter.c
ffmpeg_hw.c
ffmpeg_opt.c
2.然后把编译好的libbzffmpeg.so放到对应的jniLibs下面,作为依赖库
3.修改源文件里面的exit_program函数,并全局搜索使用了的地方,然后在使用过exit_program函数的后面加上return逻辑,这么做是为了保持原始程序的调用流程
4.把ffmpeg.c里面静态以及全局变量还原到初始值,在ffmpeg_cleanup函数里面,如下:
ffmpeg_exited = 1;
nb_filtergraphs = 0;
progress_avio = NULL;
input_streams = NULL;
nb_input_streams = 0;
input_files = NULL;
nb_input_files = 0;
output_streams = NULL;
nb_output_streams = 0;
output_files = NULL;
nb_output_files = 0;
run_as_daemon = 0;
nb_frames_dup = 0;
dup_warning = 1000;
nb_frames_drop = 0;
want_sdp = 1;
5.写回调函数

我们可以看到,写文件都是在write_packet函数里面,那么我们可以根据 当前帧的时间/总时间 这样就可以计算出进度了,具体的看代码

6.运行把缺了的头文件从FFmpeg源码里面copy出来,放到对应的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值