当前位置: 首页 > news >正文

FFmpeg 基本API av_seek_frame函数内部调用流程分析

1、av_seek_frame 函数定义

av_seek_frame() 是 FFmpeg 中用于跳转媒体文件中的某个时间点的 API,常用于播放器实现“快进/快退/定位”等功能。这个函数的作用是:根据时间戳,将解复用器(demuxer)跳转到合适的位置,以便从该位置开始读取数据帧(packet)。
可以跳到:

  • 指定时间戳的帧(通常为关键帧)
  • 或者粗略估计字节位置(用于某些格式如 MPEG-TS)
//以下为 av_seek_frame() 的内部调用流程(位于 libavformat/utils.c)
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);// 调用 avformat_seek_file() 做具体的 seek 工作return avformat_seek_file(s, stream_index, INT64_MIN, timestamp, INT64_MAX, flags);
}//然后:
int avformat_seek_file(...) {-> seek_frame_internal()-> ff_seek_frame_binary()av_index_search_timestamp()-> 如果找不到直接偏移点,则调用 demuxer 的 read_seek / read_seek2
}
  • AVFormatContext *s:当前打开的媒体上下文
  • int stream_index:要 seek 的流索引(如视频流索引)。-1 表示使用全局时间戳
  • int64_t timestamp:要 seek 到的时间戳,单位是流的 time_base(或 AV_TIME_BASE 如果 stream_index == -1)
  • int flags:控制 seek 行为的标志位(详见下)
    • AVSEEK_FLAG_BACKWARD : 往后找不到就往前找(向后 seek 时的安全保障)
    • AVSEEK_FLAG_BYTE : 用字节位置 seek(不基于时间戳)
    • AVSEEK_FLAG_ANY : 允许 seek 到非关键帧(否则只能 seek 到关键帧)
    • AVSEEK_FLAG_FRAME : 使用帧编号作为 timestamp(不常用)
  • 返回值:0:成功, < 0:失败(格式不支持 seek、找不到目标、参数错等)
    在这里插入图片描述

2、av_seek_frame 内部流程

2.1 av_seek_frame() 直接调用 avformat_seek_file()

兼容性包装,直接转调。

2.2 seek_frame_internal()

先尝试使用索引(AVStream->index_entries)做时间戳二分查找。如果不能用 index seek,会调用 demuxer 的 read_seek() / read_seek2() 回调

2.3 ff_seek_frame_binary()

通过 AVStream->index_entries(解复用器生成的 seek index,比如 .ts、.mp4 中的 moov atom 或 PTS 索引)进行二分查找。到合适关键帧的 offset

2.4 fallback

AVInputFormat->read_seek() / read_seek2()每种格式实现自己的跳转策略(比如 MPEG-TS 中的 PAT/PMT 结构)

3、av_seek_frame 调用流程图

在这里插入图片描述

http://www.dtcms.com/a/503590.html

相关文章:

  • FFmpeg 基本API avcodec_send_packet函数内部调用流程分析
  • 手机建站网站常德营销型网站建设
  • Flutter 与原生混合编程
  • DevOps 与 部署入门:加速软件交付与运维的实践指南
  • 优化网站seo中山做百度网站的公司名称
  • 上海袜网站建设电商营业执照
  • 找到K个最接近的元素
  • Java中JDK、JRE、JVM概念
  • MySQL 表操作核心指南:CRUD 与进阶技巧
  • 网站开发个人总结网页设计与网站建设在线考试1
  • 算法笔记 05
  • 游戏科技网站杭州建设工程交易中心网站
  • 网站做推广要备案吗四川seo快速排名
  • 有关房地产开发建设的网站哪些网站可以接点私活做的
  • 有关应广单片机数据类型与ROM空间优化的一点看法
  • 【2026计算机毕业设计】基于Jsp的医疗设备及业务综合巡检系统
  • 个人业务技能提升如何助力:从“做事”到“成事”的跃迁之路
  • 我们需要的中文编程是什么样子的?
  • 那些网站可以接私活做做兼职有哪些网站
  • 绚星智慧科技斩获智享会三项大奖,领跑AI时代学习与发展赛道
  • 零基础入门Java·基础篇 学习大纲
  • XSS 攻击详解:原理、类型与防范策略
  • 青岛网站建设 百度天津基础设施建设
  • 内蒙古住房和建设厅网站wordpress会员修改
  • 网站排名优化教程wordpress themes.php
  • 机器学习18:扩散模型(Diffusion Model)与Stable Diffusion
  • 17-机器学习与大模型开发数学教程-第1章 1-9 凸函数与凸优化基础
  • 空间建设网站企业建站程序推荐
  • 网站建设 点指成名网站开发调查问卷
  • 【经典书籍】C++ Primer 第10到12章精华讲解