unabletofindasuitableoutputfori⼀种情况的解决办法
问题的可能原因:
可能是传递给avformat_alloc_output_context2()函数的filename参数不对,并不是⼀个正常的字符串。
问题解决办法:
检查avformat_alloc_output_context2()的输⼊参数是否都合理。
问题历程:
在使⽤QT+ffmpeg库做录屏软件时,需要打开⼀个output⽂件,⽤来保录制的视频。在打开输出⽂件时主要是使⽤
avformat_alloc_output_context2()函数,这个函数需要给他传递输出格式名,以及输出⽂件名称,这些类型都是const char*。
output的反义词
⼀般⽽⾔,我们可能是通过参数化来传递给输出⽂件名称,所以可能存在需要将QString类型转换层const char*的操作,QT中⽀持这种操作,⼀般可以通过 StdString().c_str()来将QString类型的para_filename转换成const char* 类型。
逻辑上似乎都合理,但是偶尔情况下,可能会发⽣如标题所⽰的问题。很是奇怪,错误⽇志提⽰我们output怎么变成了‘i’,通过输出⽇志发现StdString().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的问题,查了好久没有所以然,后来想到输⼊是不是有问题,遂定位到问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。