av_seek_frame

写开源项目的时候需要做seek功能,使用了av_seek_frame的功能,记录如下。先看段文档


int av_seek_frame   (   AVFormatContext * s,

int stream_index,

int64_t timestamp,

int flags

)

Seek to the keyframe at timestamp.

'timestamp' in 'stream_index'.

Parameters

s   media file handle

stream_index    If stream_index is (-1), a default stream is selected, and timestamp is automatically converted from AV_TIME_BASE units to the stream specific time_base.

timestamp   Timestamp in AVStream.time_base units or, if no stream is specified, in AV_TIME_BASE units.

flags   flags which select direction and seeking mode

#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward

#define AVSEEK_FLAG_BYTE    2 ///< seeking based on position in bytes

#define AVSEEK_FLAG_ANY      4 ///< seek to any frame, even non-keyframes

#define AVSEEK_FLAG_FRAME    8 ///< seeking based on frame number

Returns

>= 0 on success

解释###

timebase指的是时间戳,对应pts时间戳,如果index是-1,则使用AV_TIMEBASE作为timebase并由ffmpeg自动转换成默认时间戳, 如果指定了stream那么就要使用相应的stream的timebase来计算pts了。这里注意的是比如seek到32s不能简单的直接32*AV_TIMEBASE来计算时间戳,因为pts不一定是从0开始的,所以要加上起始的pts。

stream_index是选择针对哪一条媒体流来做seek

flag用来指定寻找寻找的I帧和指定点之间的位置关系,因为seek过去的时间点不一定就处在I帧的地方,解码需要依赖于I帧,所以这时候就得选择一个附近的I帧,flag表明要seek到当前帧的前面一个I帧还是后面一个I帧

seek到32s的例子###


int ret = av_seek_frame(inputFormatContext, -1, ((double)ms/(double)1000)*AV_TIME_BASE + (double)inputFormatContext->start_time, AVSEEK_FLAG_BACKWARD);//不指定stream进行seek

int ret = av_seek_frame(inputFormatContext, videoIndex, (double)videoTimeBase.den/(double)videoTimeBase.num * ((double)ms/(double)1000)*AV_TIME_BASE + (double)inputFormatContext->start_time/(double)AV_TIME_BASE*((double)videoTimeBase.den/(double)videoTimeBase.num)*/, AVSEEK_FLAG_BACKWARD);//指定stream进行seek

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,854评论 0 3
  • 图片转视频 为什么想将图片转视频? 是这样的,我打造的任性动图软件,在编辑制作GIF动图方面,已经基本完善。现在想...
    古典小说阅读 1,737评论 1 0
  • 一片叶 凋零了数载 一朵云 空灵了时光 静 触碰了流金的岁月 言 到苍老了双鬓 回眸间 片刻嫣然 刹那时 罗衣婆娑...
    拂晓晨曦i阅读 383评论 27 70
  • 今天看二美转发的这一则新闻: 噩梦!女孩裸体逃出公寓楼,不停的向路人喊着“报警!报警!报警!” 据安徽电视台报道,...
    码字好玩儿阅读 263评论 2 1
  • 我一直以为我适合当一个作家(小说家),因为我喜欢读书。 一个月前给《意林》投稿,是续写小说。我信心满满,花了一天来...
    非鱼38432阅读 239评论 0 0