例子:
int nRet = av_seek_frame(m_ifmt_ctx, -1, (m_start_play_time + nSecs) * AV_TIME_BASE, AVSEEK_FLAG_BACKWARD);
原型:使用时需要使用四个参数
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);
参数一: s为容器内容;
参数二: 流索引, 如果stream_index是-1,会选择一个默认流,时间戳会从以AV_TIME_BASE为单位向具体流的时间基自动转换。
参数三: 将要定位处的时间戳,time_base单位或者如果没有流是指定的就用av_time_base单位。
参数四: seek功能flag;
返回值:成功返回>=0
flag值:
#deflagfine 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
AVSEEK_FLAG_BACKWARD 是seek到请求的timestamp之前最近的关键帧
AVSEEK_FLAG_BYTE 是基于字节位置的查找
AVSEEK_FLAG_ANY 是可以seek到任意帧,注意不一定是关键帧,因此使用时可能会导致花屏
AVSEEK_FLAG_FRAME 是基于帧数量快进
AVSEEK_FLAG_BACKWARD与AVSEEK_FLAG_ANY是本人亲测使用的,其他两个flag没有使用过