OSStatus错误1718449215。

40

我创建了一个用于录制声音的iPhone应用程序。当我尝试录制时,以下语句会出现错误消息。


recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];

Error Domain=NSOSStatusErrorDomain Code=1718449215 "无法完成操作。(OSStatus错误1718449215。)"

如果我尝试录制.caf文件,它可以正常工作。但如果我尝试使用.m4a文件,则会出现此错误消息。

请帮助我解决这个问题。

谢谢。


3
这个问题已经过时了,但既然我通过谷歌来到这里,我想分享一下这个参考资料:osstatus.com 可以让你查找错误代码。 - Daneo
3
可能有点老旧,但并不过时。我在2017年也遇到了同样的错误! - StuartQ
我的情况也出现了同样的错误。@Daneo - Mayank Verma
8个回答

76

1718449215是kAudioFormatUnsupportedDataFormatError错误的四个字符代码的十进制表示。

一般情况下,您可以使用类似下面的内容从收到的错误中获取更多信息:

NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain
                          code:my_error_code
                          userInfo:nil];
NSLog(@"Error: %@", [error description]);

.m4a是一种文件格式,而不是编解码器。您录制的编解码器由AVFormatIDKey确定。 - memmons

13

如果这对其他人有帮助:我刚刚遇到了同样的错误,原因是尝试创建/使用错误格式的音频文件。 我已经预设了录音以创建一个 .caf 文件,但实际上却将文件命名为 xxx.wav。


3
当我将 AVFormatIDKey 设置为 kAudioFormatLinearPCM(即 wav 格式)时,遇到了相同的错误,但我忘记将目标文件的扩展名从 .m4a 更改为 .wav - Stewart Macdonald
你好,kAudioFormatAMR 应该用什么拓展名?谢谢! - ch271828n

4

OSStatus错误码很痛苦,它们通常太笼统而无法帮助。您尝试过解码四字符错误代码吗?有时这有帮助(其他时候只会得到垃圾)。创建并展示一个最小的代码示例来展示问题。在这种情况下,我敢打赌四字符代码是fmt?。谷歌一下数字代码,你应该会更明智。


4

当我将文件类型从 .caf 转换为 .mp3 时,也遇到了这个问题。之前我一直使用 AVAudioRecorder 来记录声音,而且是以 .caf 格式进行录制的。后来我再次将文件类型转换回 .caf 格式,就可以正常工作了。您可以使用以下格式:

AAC、PCM、IMA4、ULAW、ILBC


1
感谢提供这些格式,iOS支持哪些文件扩展名?例如,ULAW格式的文件的扩展名是什么? - Josh

1

我最喜欢用的解读OSStatus代码的工具是https://osstatus.com

OSStatus错误码1718449215是kAudioConverterErr_FormatNotSupported,这可能意味着:

  • 你尝试输出的格式不受支持(请仔细检查输出文件URL的文件扩展名)。

  • recordSettings存在问题。需要注意的一点是AVFormatIDKey的值是否与输出文件URL的文件扩展名匹配。


1

如果“NSDictionary”为空,则默认为高质量,如果您进行设置,此值将非常低,您可以尝试取消这些参数:

setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
setting[AVSampleRateKey] = @(600.0);
setting[AVNumberOfChannelsKey] = @(1);
setting[AVLinearPCMBitDepthKey] = @(8);

我已经从你的帖子中删除了中文评论。如果它们对你的答案至关重要,请将它们翻译成英文并添加回来。StackOverflow仅支持英文。谢谢! - Rob
1
哦,我明白了。谢谢你的澄清。亲爱的,请原谅我的英语不是很好,但你可以尝试这个答案,我希望这个答案能对你有所帮助。 - peng
1
谢谢你提醒我,原谅我的粗心大意,我会稍后注意的,并且我想说你是对的。谢谢! - peng
1
完全没有问题 :) - Rob
1
美好的一天,此时在中国已经很晚了,玩得愉快。再见。 - peng

0
UInt32 code = CFSwapInt32HostToBig(error);
NSLog(@"%4.4s"(char *)&code);

1
请考虑编辑您的答案,包括解释您的代码如何工作。 - Matt

0
如果你在C或C++代码中,你可以这样做。
char code[4];
*((SInt32*)&code[0]) = error;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接