解决方法:
AVDictionary* pOptions = NULL;
pFormatCtx->probesize = 500 * 1024;
pFormatCtx->max_analyze_duration = 8 * AV_TIME_BASE;
if (avformat_find_stream_info(pFormatCtx, NULL)<0) {
printf("Couldn't find stream information.\n");
return -1;
}
avformat_find_stream_info 的第二个参数不能设置空指针,否则会崩溃,原因如下:
http://blog.csdn.net/lanxiaziyi/article/details/71667267?locationNum=4&fps=1
av_register_all();
avformat_network_init();
url = "http://ltsbsy.qq.com/GB8lF6TL4NgUddNDzdolIN4HvPZ8zz5daxlsXsx5-6cZSDGZ6BCCX3rCl-gReh6iEaTVGJs0ZmqZVbOCYENLACEvBl-LtHkj-r6V9gAo4IcLvTrdg_yHcA/r0023flooix.320092.ts.m3u8?ver=4&sdtfrom=v4000&platform=10103&appver=5.0.2.4720";
//这个链接过一会儿就失效了
m_pFormatCtx = avformat_alloc_context();
AVDictionary *dic2 = NULL;
AVInputFormat *m_pInFmt = NULL;
int ret2 = avformat_open_input(&m_pFormatCtx, url.toLocal8Bit(), m_pInFmt, &dic2);
AVDictionary *dic3 = NULL;
ret3 = avformat_find_stream_info(m_pFormatCtx, &dic3);//这里寻找流的信息,会卡个1s左右,因为它在寻找流的信息
然后 avformat_find_stream_info 就崩溃了
为什么呢?
后来在以为大神的指导下,改为了
avformat_find_stream_info(m_pFormatCtx, NULL);
就OK了
以前以为传入一个指向NULL的指针,和 NULL一样,现在看来是不一样的
具体的解释,看这个函数的文档就知道了
* @param options If non-NULL, an ic.nb_streams long array of pointers to
* dictionaries, where i-th member contains options for
* codec corresponding to i-th stream.
* On return each dictionary will be filled with options that were not found.