ffmpeg播放H264裸流 实现快进快退功能
大家好!我使用ffmpeg的h264标准对摄像头捕获的视频进行编码并保存,得到test.264裸码流文件,并实现对该码流进行解码播放,我现在想要增加该视频播放器的快进快退功能,但没有思路陷于疑惑中,希望有这方面经验的同行分享一下你们的见解,谢谢。
因为是裸码流,不能通过ffmpeg提供的函数获得播放时间和总帧数,如下代码操作无效:
AVFormatContext* pFormatCtx;
int ret = av_open_input_file(&pFormatCtx, fileIn, NULL, 0, NULL);
if (av_open_input_file(&pFormatCtx, fileIn, NULL, 0, NULL) != 0 )
{//读取文件信息的头部并保存到AVFormatContext结构体
//后三个参数:文件格式 缓冲大小 格式参数
fprintf(fLog, "Can't Open video file!\n");
return;
}
if (av_find_stream_info(pFormatCtx) < 0)
{
fprintf(fLog, "There is No stream in File!\n");
return;
}
得到的int dura = pFormatCtx->duration; dura值为0
所以我想不能用这种常规的方式获取播放时间和总帧数。我现在的想法是在编码的时候构建一个结构体包含:编码数据、数据长度和该编码数据块的索引。然后在播放的时候,如果有快进或者拖动,计算进度条的比例然后定位到某一数据块再进行解码播放。但如果这样做的话我又不知道该如何定位每一帧,如何确定关键帧?我原来是用getNextNal函数通过查找0x000001来确定帧开始的,现在不知道该如何去确定了。
另,我用暴风影音播放我的test.264文件能自由拖动,不知道它是怎么实现的?
谢谢!