首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AVAssetReader读取音频,然后失败

AVAssetReader读取音频,然后失败
EN

Stack Overflow用户
提问于 2011-04-25 13:37:15
回答 1查看 2K关注 0票数 2

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

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

代码语言:javascript
运行
复制
CMSampleBufferRef ref = [readaudiofile copyNextSampleBuffer];
if (ref == NULL && filereader.status == AVAssetReaderStatusFailed) {
    NSLog(@"reader failed: %@", filereader.error);
}
// this produces: 
// {NSLocalizedFailureReason=An unknown error occurred (-12785), 
// NSUnderlyingError=0x161f60 "The operation couldn’t be completed. 
// (OSStatus error -12785.)", NSLocalizedDescription=The operation 
// could not be completed}

我的生产者线程代码与函数代码示例MusicLibraryRemoteIODemo相同。我的消费者线程代码是不同的,但我已经逐行比较了几天,似乎找不到问题所在。你知道是什么原因导致AVAssetReader阅读器失败吗?

This post描述了类似的解决方案,并得出结论,音频会话需要正确设置(尽管它没有说明如何设置)。AVAudioSesion配置和AVAssetReader的行为之间是否有联系?

EN

回答 1

Stack Overflow用户

发布于 2011-05-07 02:40:02

我得到了同样的错误,我也在另一个帖子上发布了这个答案

代码语言:javascript
运行
复制
- (void)setupAudio {
    [[AVAudioSession sharedInstance] setDelegate:self];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
    NSError *activationError = nil;
    [[AVAudioSession sharedInstance] setActive: YES error:&activationError];

    NSLog(@"setupAudio ACTIVATION ERROR IS %@", activationError);
    [[AVAudioSession sharedInstance] setPreferredIOBufferDuration:0.1 error:&activationError];
    NSLog(@"setupAudio BUFFER DURATION ERROR IS %@", activationError);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5775548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档