大家好,请教一个问题。。请问为什么调用av_find_stream_info()这个函数的时候会卡住很长时间才返回?如果是用av_open_input_file()打开文件后再调用这个函数就没有这个问题,该函数会马上返回;但如果我是这样:
AVFormatContext *pFmtCtx;
AVInputFormat *fmt = NULL;
AVProbeData probe_data, *pd = &probe_data;
ByteIOContext *pb = NULL;
pd->buf = pszNetBuf; //网络流的缓冲区,该指针已指向I帧开头
pd->buf_size = 400000; //随便写的,100000试过,200000也试过,都是这样
pd->filename = "rtsp://192.168.1.100/stream0"; //RTSP地址
if (!fmt) {
/* guess format if no file can be opened */
fmt = av_probe_input_format(pd, 0);
}
av_open_input_stream(&pFmtCtx, pb, "rtsp://192.168.1.100/stream0", fmt, NULL); //这个函数能正常地获取pFmtCtx相关的数据
av_find_stream_info(pFmtCtx); //卡住。。。。。大概15秒后才返回。
请问为什么会这样呢?应该怎样解决?谢谢!
------解决方案--------------------------------------------------------
你不是用avcodec_decode_video挺好的么
------解决方案--------------------------------------------------------
是这样子的,先用av_open_input_file()打开文件流,但这样有的时候有些参数的值仍然获取不到,比如时间,只好再调用av_find_stream_info()解码第一帧来得到具体的数值