FFmpeg中mov/mp4 seek分析

使用的FFmpeg代码版本为3.2.
1、mov包括mov,mp4,m4a,3gp,3g2,mj2
2、ffplay播放mp4文件,seek之后发现seek_flags为0,在av_seek_frame的时候设置flags为1即AVSEEK_FLAG_BACKWARD。
3、seek_frame_internal调用av_find_default_stream_index得到index一般是视频index。
4、s->iformat->read_seek即mov_read_seek,其中mov_seek_stream得到sample。
5、mov_seek_stream中调用av_index_search_timestamp-> ff_index_search_timestamp
其中使用二分法得到与wanted_timestamp最邻近的两个entry a&b。
根据flags得到m = (flags & AVSEEK_FLAG_BACKWARD) ? a : b;
如果不是AVSEEK_FLAG_ANY的情况,则从上面m的位置开始根据flag的方向找出最近的关键帧(entries[m].flags & AVINDEX_KEYFRAME)返回:
m += (flags & AVSEEK_FLAG_BACKWARD) ? -1 : 1;
若m==nb_entries则失败,返回-1.
6、在mov_read_seek中若VIDEO返回的sample为0,则再用AUDIO继续查找sample。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值