FFMpeg中seek函数解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFMpeg中seek函数解析相关的知识,希望对你有一定的参考价值。

参考技术A

FFmpeg提供了一个seek函数,原型如下

这个函数不管你当前在什么时间点上,都可以seek到任何合理位置。比如要实现在当前的基础上向后或向前跳转10秒,我们可以在av_read_frame函数拿到的包中含有当前时间戳的基础上增加或减少一个10000(换算成播放时间单位)再seek即可。所以这个函数可以用做进度的拖放、前进/后退一定时间、循环播放等功能。

s :操作上下文;

stream_index :基本流索引,表示当前的seek是针对哪个基本流,比如视频或者音频等等。

timestamp :要seek的时间点,以time_base或者AV_TIME_BASE为单位。

Flags :seek标志,可以设置为按字节,在按时间seek时取该点之前还是之后的关键帧,以及不按关键帧seek等,详细请参考FFmpeg的
avformat.h说明。基于FFmpeg的所有track mode几乎都是用这个函数来直接或间接实现的。

seek功能的实现

av_seek_frame(pFormatCtx, vid_index, 100000*vid_time_scale/time_base, AVSEEK_FLAG_BACKWARD);

av_seek_frame(pFormatCtx, aud_index, 80000*aud_time_scale/ time_base, AVSEEK_FLAG_BACKWARD);

av_seek_frame(pFormatCtx, vid_index, 0, AVSEEK_FLAG_BACKWARD);

上面的time_scale、time_base都能通过流信息获取到

以上是关于FFMpeg中seek函数解析的主要内容,如果未能解决你的问题,请参考以下文章

问题:FFMPEG 使用字节位置使用 av_seek_frame 搜索

MAC/iOS利用FFmpeg解析音视频数据流

发送 seek 命令到正在运行的 ffmpeg 实例

ffmpeg中关于ffplay部分的概要分析-2

FFmpeg中HLS文件解析源码

ffmpeg av_seek_frame