我正在为iPhone和iPad编写一个收音机应用程序,并且在处理暂停和播放音频时会遇到一些奇怪的行为。我分别使用AVAudioSessionDelegate方法beginInterruption
和endInterruption
分别为pause
和play
AVPlayer。以下是相关的play
代码。
现在,以下情况似乎始终如一:
beginInterruption
并停止播放。如果中断停止,则按预期调用endInterruption
,并按预期恢复播放。pause
和play
与beginInterruption
和endInterruption
完全相同。播放按预期运行。endInterruption
并按预期播放暂停。但是,当中断完成时,beginInterruption
按预期调用,play
按预期调用,它实际到达并执行[self.player play]
行,但播放没有恢复!我什么都没听到。上面的情况3非常奇怪,所以我想知道我是否可能忽视了某些事情。有什么想法吗?
Play
代码
- (void)play {
NSError* error = nil;
AVKeyValueStatus keyStatus = [currentAsset statusOfValueForKey:@"tracks" error:&error];
if(error){
DLog(@"Error %@", [error localizedDescription]);
}
else {
DLog(@"Current Key Status: %i", keyStatus);
if(keyStatus == AVKeyValueStatusLoaded){
DLog(@"Continue playing source: %@", self.source);
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
if (error) {
DLog(@"Error during play while setting AVAudioSessionCategory: %@", [error localizedDescription]);
}
[[AVAudioSession sharedInstance] setActive:YES error:&error];
if (error) {
DLog(@"Error during play while setting AVAudioSessionCategory: %@", [error localizedDescription]);
}
[[AVAudioSession sharedInstance] setDelegate:self];
if(backgroundTaskID != UIBackgroundTaskInvalid){
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID];
}
backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[self.player play];
[self setStatus:kNPOMediaPlayerStatusPlaying];
}
else {
DLog(@"PlaySource: %@", self.source);
[self playSource:self.source];
}
}}
答案 0 :(得分:2)
我有同样的问题。实现远程控制事件处理后问题消失了。我在开始播放时拨打了[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
。
答案 1 :(得分:1)
事实证明,这是iOS中的已知错误,需要在applicationDidBecomeActive中进行一些仔细的解决方法来处理beginInterruption。可悲的是,我无法找到另一种解决方案。