码迷,mamicode.com
首页 > 其他好文 > 详细

unable to find a suitable output for 'i'一种情况的解决办法

时间:2020-07-04 16:46:11      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:对象   函数的参数   原因   解决办法   没有   支持   文件   就是   析构   

问题的可能原因:

可能是传递给avformat_alloc_output_context2()函数的filename参数不对,并不是一个正常的字符串。

问题解决办法:

检查avformat_alloc_output_context2()的输入参数是否都合理。

问题历程:

在使用QT+ffmpeg库做录屏软件时,需要打开一个output文件,用来保录制的视频。在打开输出文件时主要是使用avformat_alloc_output_context2()函数,这个函数需要给他传递输出格式名,以及输出文件名称,这些类型都是const char*。

一般而言,我们可能是通过参数化来传递给输出文件名称,所以可能存在需要将QString类型转换层const char*的操作,QT中支持这种操作,一般可以通过 para_filename.toStdString().c_str()来将QString类型的para_filename转换成const char* 类型。

逻辑上似乎都合理,但是偶尔情况下,可能会发生如标题所示的问题。很是奇怪,错误日志提示我们output怎么变成了‘i’,通过输出日志发现para_filename.toStdString().c_str()的转换并非按照我们的逻辑来的,因为.c_str()调用对象是一个由toStdString()生成的临时对象,很有可能在c_str()调用前已经被析构释放了,导致最后转换的结果并非我们所期望的。所以解决办法就是分开成两步:(1).定义std::string类型变量,并先由QString->std::string,(2).定义const char*类型变量,并从std::string->const char*。

通过上述两个步骤就可保证字符串类型的顺利及可靠的转换,传递给avformat_alloc_output_context2()函数的参数不再是错误的了。

一度以为是ffmpeg的问题,查了好久没有所以然,后来想到输入是不是有问题,遂定位到问题。

unable to find a suitable output for 'i'一种情况的解决办法

标签:对象   函数的参数   原因   解决办法   没有   支持   文件   就是   析构   

原文地址:https://www.cnblogs.com/chyshx/p/13235333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!