iOS6 AVAudioPlayer - AAC音频文件的持续时间总是返回0。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS6 AVAudioPlayer - AAC音频文件的持续时间总是返回0。相关的知识,希望对你有一定的参考价值。

我正在将一个使用aac音频文件的应用程序移植到ios6,我发现了一个奇怪的行为,当我试图获取(有效的)aac音频文件的持续时间时,它总是返回0,在iOS4和iOS5中它工作正常。

AvAudioPlayer类是否有任何bug影响到 期限 属性?我读到过一些关于 当前时间 属性。

这是代码。

NSURL* urlFichero = [NSURL fileURLWithPath:rutaFichero];
avaPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: urlFichero error:nil];
segundos = avaPlayer.duration;
NSLog(@"[ControladorFicheros] Fichero: '%@' Duración: '%f'", nombreFichero, segundos);
[avaPlayer stop];
[avaPlayer release];

谢谢;)

答案

最后,问题是在最新版本的API中,AVAudioPlayer似乎只在文件准备好播放时才返回正确的持续时间,这就是为什么我的解决方案是错误的,如果你不想重现它,正确的方法是获取文件的持续时间(以秒为单位)。

AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:anURI_ToResource 
                  options:[NSDictionary dictionaryWithObjectsAndKeys:
                  [NSNumber numberWithBool:YES], 
                  AVURLAssetPreferPreciseDurationAndTimingKey,
                  nil]] autorelease];

 NSTimeInterval durationInSeconds = 0.0;
if (asset) 
     durationInSeconds = CMTimeGetSeconds(asset.duration) ;

Swift

let asset = AVURLAsset(url: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
let durationInSeconds = CMTimeGetSeconds(asset.duration)
另一答案

我也注意到了同样的问题。 我的解决方法是使用代替。

MPMoviePlayerController *testPlayer = [[MPMoviePlayerController alloc] initWithContentURL:filePath];
[testPlater prepareToPlay];
[testPlater play];

以上是关于iOS6 AVAudioPlayer - AAC音频文件的持续时间总是返回0。的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer initWithContentsOfURL 为 AAC/M4A 文件返回 nil

使用AVAudioPlayer播放音乐文件无声音

iOS 6 上的 RemoteIO 和录制 AAC

在 iOS 6.0 中找不到 AVAudioPlayer

在 iOS 上播放 MP3 或 AAC 文件都有哪些音频播放选项?

带有 iOS 6 AVAudioPlayer 的 iPhone 4S 工作正常,但没有声音