android 获取录音时长_Android中集成FFmpeg ③执行进度

前言

在以命令方式调用 FFmpeg 的时候,可能会执行一些比较耗时的任务,这时如果没有进度展示,用户可能会以为程序崩溃了,体验十分不好.能不能在以命令方式调用 FFmpeg 时实时获取执行进度呢?谷歌关键词 “Android FFmpeg 命令” 可以得到很多教程,但加上关键词 “进度”就没有相关文章了,看来以命令方式调用 FFmpeg 实时获取执行进度这个需求没有前人的肩膀可站,要开动自己的小脑筋了。

首先来分析一下,以命令方式调用就是把一条命令交给 FFmpeg 执行,具体就是 ffmpeg.c 的 main 函数,待 main 函数执行完毕才会返回,执行过程相当于一个黑盒,执行进度显然是无法获取的.网上也没有相关文章,难道只有以函数方式调用 FFmpeg 才能获取到执行进度吗?当我快要下这样的定论时,看到了 FFmpeg 的 log 信息:

81c58d7440bbbd060de07e0269a71683.png

这是在执行混合音频命令时 FFmpeg 的日志输出,其中的 time 信息表示当前已合成的音频时长,这不就是进度信息吗!下面就针对混合音频命令获取实时执行进度.要做的就是提取日志中的进度信息,传递给 Android 层,首先回顾一下这些日志信息是怎样输出到 logcat 的,在Android 集成 FFmpeg(二) 以命令方式调用中有详细说明,这里只关注关键方法 log_callback_null ,位于 ffmpeg.c 中:

static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl){ static int print_prefix = 1; static int count; static char prev[1024]; char line[1024]; static int is_atty; av_log_format_line(ptr, level, fmt, vl, line, sizeof(line), &print_prefix); strcpy(prev, line); if (level <= AV_LOG_WARNING){ XLOGE("%s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值