调用AUGraphStart进行播放时接收kAUGraphErr_CannotDoInCurrentContext

问题描述 投票:106回答:1

我正在使用AUGraph和Audio Units API在我的iOS应用中播放和录制音频。现在,当AUGraph无法启动并出现以下错误时,我遇到一个罕见的问题:

结果= kAUGraphErr_CannotDoInCurrentContext(-10863)

[当我们尝试调用为音频播放设置的AUGraphStart时,发生了意外错误:

(BOOL)startRendering
{
    if (playing) {
        return YES;
    }

    playing = YES;

    if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) {
        print_error("Failed to create play AUGraph",0);
        playing = NO;
        return NO;
    }

    //result = kAUGraphErr_CannotDoInCurrentContext (-10863)
    OSStatus result = AUGraphStart(au_play_graph);
    if (noErr != result) {
        print_error("AUGraphStart", result);
        playing = NO;
    }

    return playing;
}

这是我们从文档中得到的:

为了避免旋转或在渲染线程中等待(一个坏主意!),许多对AUGraph的调用可以返回:kAUGraphErr_CannotDoInCurrentContext。仅产生此结果当您从其渲染回调调用AUGraph API时。 这意味着当时所需的锁由另一个线程持有。如果您看到此结果代码后,通常可以再次尝试执行操作-通常是NEXT渲染周期(因此与此同时,锁定可以是清除),或者您可以将该调用委托给应用中的另一个线程。您不应该旋转或休眠渲染线程。

此结果代码只是一个暂时状态,它将很快通过当其他线程对AUGraph(具有锁)的调用完成时。

就我而言,我只是启动AUGraph,它是新创建的。我该如何调试该案例,这里可能存在什么潜在问题?

ios audiounit audiotoolbox
1个回答
0
投票

您可以使用CSS或SQLite制作东西。这就是为什么

OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
    print_error("AUGraphStart", result);
    playing = NO;
}

return playing;

}

尝试仅操作此代码,代码中的布尔值有问题...

© www.soinside.com 2019 - 2024. All rights reserved.