gpt4 book ai didi

objective-c - AVURLAsset 用于 ipod 上的长音

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:31 27 4
gpt4 key购买 nike

长期阅读,第一次提问...

我正在制作一个音乐应用程序,它使用 AVAssetReader 从 iTunes 库中读取 mp3 数据。我需要精确的时间,所以当我创建一个 AVURLAsset 时,我使用“AVURLAssetPreferPreciseDurationAndTimingKey”来提取时间数据。这有一些开销(当我不使用它时我没有问题,但我需要它!)

在 iphone(4) 和 ipad(1) 上一切正常。我希望它能在我的 ipod touch(第二代)上运行。但事实并非如此:如果声音文件太长(> ~7 分钟),则 AVAssetReader 无法开始读取并抛出错误(AVFoundationErrorDomain 错误 -11800。)

看来我在 ipod touch 的 scanter 资源方面碰壁了。知道发生了什么,或者如何管理创建 AVURLAsset 的开销以便它可以处理长文件?(我尝试使用性能工具运行它,但我没有看到内存出现重大峰值)。

谢谢丹

最佳答案

也许你也开始读书了?据我了解,对于 mp3,它需要遍历整个文件才能实现精确计时。因此,请尝试延迟阅读。您还可以尝试注册为某些 AVAsset 属性的观察者。 iOS 4.3 具有“可读”属性。我从未尝试过,但我的猜测是它最初设置为 NO,一旦 AVAsset 完成加载,它就会设置为 YES。

编辑:实际上,只是查看了文档。您应该为此使用 AVAsynchronousKeyValueLoading 协议(protocol),Apple 提供了一个示例

NSURL *url = <#A URL that identifies an audiovisual asset such as a movie file#>;
AVURLAsset *anAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
NSArray *keys = [NSArray arrayWithObject:@"duration"];

[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^() {

NSError *error = nil;
AVKeyValueStatus durationStatus = [asset statusOfValueForKey:@"duration" error:&error];
switch (durationStatus) {
case AVKeyValueStatusLoaded:
[self updateUserInterfaceForDuration];
break;
case AVKeyValueStatusFailed:
[self reportError:error forAsset:asset];
break;
case AVKeyValueStatusCancelled:
// Do whatever is appropriate for cancelation.
break;
}
}];

如果“持续时间”无济于事,请尝试“可读”(但正如我之前提到的,“可读”需要 4.3)。也许这会解决您的问题。

关于objective-c - AVURLAsset 用于 ipod 上的长音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com