想在android的statefright中用av_seek_frame实现定位,可是在调用了av_seek_frame之后,av_read_frame就再也不能成功读取到包了,大概代码如下:
int64_t seekTimeUs;
ReadOptions::SeekMode mode;
// 重新定位的场合
if (options && options->getSeekTo(&seekTimeUs,&mode)) {
LOGE("seeking in Decoder,seekTimeUs:%lld",seekTimeUs);
CHECK(seekTimeUs >= 0);
// 此处的seekTimeUs是由android播放器直接传进来的时间戳,没经过任何转换
if(av_seek_frame(pFormatCtx,videoStream,seekTimeUs,AVSEEK_FLAG_BACKWARD) <0)
{
LOGE("seeking erro in XVIDDecoder ");
}
} else {
seekTimeUs = -1;
}
if(av_read_frame(pFormatCtx, &packet)>=0) {
// 调用av_seek_frame后就不会再进来
}
------解决方案--------------------------------------------------------
应该该是你的调用流程有问题,起参考FFPLAY的调用和你的有什么不同