FFmpeg avformat_open_input 错误返回 -5 的可能原因

在使用FFmpeg进行音频录制时,avformat_open_input函数返回-5错误,可能是因为音频设备名称包含中文字符,需要将其从ANSI转换为UTF-8格式。确保文本编码正确,特别是使用VS时,要保存为UTF-8无BOM格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于FFmpeg项目中遇到一些问题

  使用FFmpeg编写录制音频程序时,在avformat_open_input 函数处卡住,该函数一直报错并返回错误码 -5, 百思不得其解,查了很多资料,仍不得解答,后观看 雷神 文章 发现该问题是由于:
  我的音频设备名中含有中文字符:

audio=麦克风 (Realtek® Audio)

  需要从ANSI字符格式转换成UTF-8格式,因为这是FFmpeg支持的字符格式。
  转换代码如下:

	std::string AnsiToUTF8(const char *_ansi, int _ansi_len)
	{
		std::string str_utf8("");
		wchar_t* pUnicode = NULL;
		BYTE * pUtfData = NULL;
		do
		{
			int unicodeNeed = MultiByteToWideChar(CP_ACP, 0, _ansi, _ansi_len, NULL, 0);
			pUnicode = new wchar_t[unicodeNeed + 1];
			memset(pUnicode, 0, (unicodeNeed + 1) * sizeof(wchar_t));
			int unicodeDone = MultiByteToWideChar(CP_ACP, 0, _ansi, _ansi_len, (LPWSTR)pUnicode, unicodeNeed);

			if (unicodeDone != unicodeNeed)
			{
				break;
			}

			int utfNeed = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)pUnicode, unicodeDone, (char *)pUtfData, 0, NULL, NULL);
			pUtfData = new BYTE[utfNeed + 1];
			memset(pUtfData, 0, utfN
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值