AudioQueueStart 返回错误代码 -50
Posted
技术标签:
【中文标题】AudioQueueStart 返回错误代码 -50【英文标题】:AudioQueueStart is returning error code -50 【发布时间】:2017-12-18 11:58:10 【问题描述】:开始录音有时会报错,下面的方法返回错误
错误域=NSOSStatusErrorDomain 代码=-50 "(null)" UserInfo= status = AudioQueueStart(_state.queue, NULL);
按照以下步骤录制 audo -
为录制音频数据创建了一个新的音频队列。
status = AudioQueueNewInput(&_state.dataFormat,
AudioInputCallback,
&_state,
CFRunLoopGetCurrent(),
kCFRunLoopCommonModes,
0,
&_state.queue);
设置音频队列属性值。
status = AudioQueueSetProperty(_state.queue,kAudioQueueProperty_EnableLevelMetering,&on,sizeof(on));
用于分配缓冲区的音频队列。
status = AudioQueueAllocateBuffer(_state.queue, buffer_size, &_state.buffers[i]);
将缓冲区分配给音频队列以进行录制或播放。
status = AudioQueueEnqueueBuffer (_state.queue, _state.buffers[i], 0, NULL);
为属性添加了监听回调。
status = AudioQueueAddPropertyListener(_state.queue,
kAudioQueueProperty_IsRunning,
recordingRunningChangedCallback,
&_state);
开始播放或录制音频。
status = AudioQueueStart(_state.queue, NULL);
最后一步返回错误
错误代码-50
【问题讨论】:
【参考方案1】:我也遇到了同样的问题。无论出于何种原因,两次调用AudioQueueStart
都对我有用:
status = AudioQueueStart(_state.queue, NULL);
if (status == -50)
status = AudioQueueStart(_state.queue, NULL);
【讨论】:
【参考方案2】:可以找到here,这是AVAudiosessionErrorCodeBadParam
。
显然您指定的参数之一无效或缺少参数。
this 可能有帮助吗?
由于在 iOS 中设置音频相当复杂,我建议您从工作示例代码开始,或者遵循一个体面的教程。根据自己的经验,我可以说很容易错过一些东西并得到这样的错误。
祝你好运!
【讨论】:
【参考方案3】:我收到此错误是因为我的 AVAudioSession
配置不正确。
如果您只有一个输出队列,您需要将您的AVAudioSession
配置为AVAudioSessionCategoryPlayback
类别。这是一些代码:
AVAudioSession *session = [AVAudioSession sharedInstance];
NSString *category = AVAudioSessionCategoryPlayback;
NSString *mode = AVAudioSessionModeDefault;
NSUInteger options = AVAudioSessionCategoryOptionMixWithOthers;
NSError *err = nil;
[session setCategory:category mode:mode options:options error:&err];
如果你想同时输出和输入,你可以用AVAudioSessionCategoryPlayAndRecord
做同样的事情
【讨论】:
以上是关于AudioQueueStart 返回错误代码 -50的主要内容,如果未能解决你的问题,请参考以下文章
AudioQueueStart 返回 561015905 (AVAudioSessionErrorCodeCannotStartPlaying)
AudioQueueStart() 方法无法在 ios4 后台播放音乐