FFMpeg中seek函数解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFMpeg中seek函数解析相关的知识,希望对你有一定的参考价值。
参考技术AFFmpeg提供了一个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函数解析的主要内容,如果未能解决你的问题,请参考以下文章