菜鸟教程小白 发表于 2022-12-13 07:23:50

objective-c - AVAssetReader 读取音频,然后失败


                                            <p><p>我的应用读取音频并在生产者/消费者设置中播放。消费者线程请求新样本以呈现给硬件。生产者线程使用 AVAssetReader 将音频数据从磁盘读取到其缓冲区中。生产者线程循环运行,检查是否需要读取更多样本。生产者的缓冲区大小等于 4 秒的音频。 </p>

<p>当我指示我的应用缓冲音频时,样本被成功读取而没有错误。当我触发我的生产者线程开始渲染音频时,4 秒缓冲区完美播放,然后静音。进一步调查显示,我的 Assets 读取器在开始播放时失败,因此在初始缓冲后没有进一步的样本读取:</p>

<pre><code>CMSampleBufferRef ref = ;
if (ref == NULL &amp;&amp; filereader.status == AVAssetReaderStatusFailed) {
    NSLog(@&#34;reader failed: %@&#34;, filereader.error);
}
// this produces:
// {NSLocalizedFailureReason=An unknown error occurred (-12785),
// NSUnderlyingError=0x161f60 &#34;The operation couldn’t be completed.
// (OSStatus error -12785.)&#34;, NSLocalizedDescription=The operation
// could not be completed}
</code></pre>

<p>我的生产者线程代码与功能代码示例 <a href="http://www.cogs.susx.ac.uk/users/nc81/code.html" rel="noreferrer noopener nofollow">MusicLibraryRemoteIODemo</a> 相同.我的消费者线程代码不同,但我已经将这两条线逐行比较了几天,似乎找不到问题所在。知道可能导致 AVAssetReader 阅读器失败的原因吗? </p>

<p> <a href="https://stackoverflow.com/questions/4763598/avassetreader-and-audio-queue-streaming-problem" rel="noreferrer noopener nofollow">This post</a>描述了类似的解决方案,并得出结论认为需要正确设置 Audio Session (尽管没有说明如何设置)。 AVAudioSesion 配置和 AVAssetReader 的行为之间有什么联系吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我遇到了同样的错误,我也在另一个帖子上发布了这个答案</p>

<pre><code>- (void)setupAudio {
    [ setDelegate:self];
    [ setCategory:AVAudioSessionCategoryAmbient error:nil];
    NSError *activationError = nil;
    [ setActive: YES error:&amp;activationError];

    NSLog(@&#34;setupAudio ACTIVATION ERROR IS %@&#34;, activationError);
    [ setPreferredIOBufferDuration:0.1 error:&amp;activationError];
    NSLog(@&#34;setupAudio BUFFER DURATION ERROR IS %@&#34;, activationError);
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - AVAssetReader 读取音频,然后失败,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/5775548/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/5775548/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - AVAssetReader 读取音频,然后失败