使用windows10+qt creator14.0.1+vs2022编译器的组合编写ffmpeg相关的程序时出现这个bug。
[dshow @ 000001fe7fa096c0] Could not find audio only device with name [��˷�(USB
Live Camera audio Devi)] among source devices of type audio.
[dshow @ 000001fe7fa096c0] Searching for audio device within video devices for �
�˷�(USB Live Camera audio Devi)
[dshow @ 000001fe7fa096c0] Could not find audio only device with name [��˷�(USB
Live Camera audio Devi)] among source devices of type video.
出现这个bug的原因:因为设备名称中出现了汉字,编译器对汉字的编码结果与ffmpeg库所要求的不匹配。
vs编译器对源码文件编译过程中,默认会将字符串汉字编码转为ANSI编码存放到变量中,而ffmpeg库内部需要的是utf8编码的字符串去进行匹配,最终会导致匹配匹配失败而找不到驱动报出这样的错误。
这是vs编译器的默认强制行为!!!不管源文件是什么编码,都会被转变为编译器的excution_charset参数所设置的字符编码!!源文件中的汉字字符串就会因此而被偷偷转变字符编码。vs2015、vs2019、vs2022的编译参数excution_charset的默认值都是ansi(中国)所代表的GBK。
对字符编码有兴趣的了解的可以参考:
qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码及隐藏的字符编码转换_qt编码设置-优快云博客
解决办法有3种
1、是在带有汉字的字符串前方加上u8,让其强制解析成utf8编码。
2、在程序运行后再进行汉字输入,而不是将汉字写入源码文件中被编译器操控编码,运行过程中自己控制字符串的编码再传入ffmpeg库。可以通过ui、控制台或者读取文件进行输入。
3、给vs编译器加上编译参数/execution-charset:utf-8,vs2015+undate 2补丁包及以上或者更高版本的vs才能支持这个编译器参数。(vs2015+undate 2以下版本的编译器是不支持utf8编码的)
4、gcc编译器也有个类似的参数,exec-charset ,其默认值为utf-8,可以改为使用gcc类的编译器如mingw,或者直接到linux相关平台下用gcc进行编译。
尝试过修改设备名称,但是类似这样的修改设备名称并没有用
TUTORIAL: How to change device names in Device Manager | Windows 8 Help Forums
设备管理器中的配置可以改名字吗? - 知乎
ffmpeg将设备名list出来后名称并没有改变。并且重启后,连设备管理器中的名称也会重新更改回来,更改名称暂时没有找到好办法。