MPMoviePlayerController 中断 AirPlay iPod 音频,但在设备上工作正常

Posted

技术标签:

【中文标题】MPMoviePlayerController 中断 AirPlay iPod 音频,但在设备上工作正常【英文标题】:MPMoviePlayerController interrupts AirPlay iPod audio, but it works fine on the device 【发布时间】:2012-08-01 21:15:03 【问题描述】:

我正在使用 MPMoviePlayerController 播放循环播放的视频剪辑。在应用程序委托中,我将 AVAudiosession 的类别设置为 AVAudioSessionCategoryAmbient,这样我的视频剪辑就不会中断 iPod 音频。

这在设备上播放 iPod 音频时效果很好,但在使用 AirPlay 时,每次我循环播放的视频重新开始时,音频都会短暂中断,这非常频繁(而且很烦人)。

在 AppDelegate.m 中:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:@"AVAudioSessionCategoryAmbient" error:nil];

在我的视频视图控制器中:

self.videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
self.videoPlayer.useApplicationAudioSession = YES;
self.videoPlayer.controlStyle = MPMovieControlStyleNone;
self.videoPlayer.repeatMode = MPMovieRepeatModeOne;

我已经搜索了网络,但似乎无法找到答案。任何建议都会很棒。谢谢!

【问题讨论】:

【参考方案1】:

问题解决了!我只需要使用 AVPlayer 而不是 MPMoviePlayerController。

self.avPlayer = [AVPlayer playerWithURL:url];
self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;

self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
self.avPlayerLayer.frame = self.view.bounds;

[self.view.layer addSublayer:self.avPlayerLayer];
[self.avPlayer play];

让它循环:

[[NSNotificationCenter defaultCenter] addObserver:self
   selector:@selector(movieDidFinish:)
   name:AVPlayerItemDidPlayToEndTimeNotification
   object:[self.avPlayer currentItem]];

...

- (void)movieDidFinish:(NSNotification *)notification 
   [self.avPlayer seekToTime:kCMTimeZero];

【讨论】:

以上是关于MPMoviePlayerController 中断 AirPlay iPod 音频,但在设备上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionViewCell 中滚动时 MPMoviePlayerController 变为空白

MPMoviePlayerController 起始图像

MPMoviePlayerController 隐藏 AirPlay 按钮

使用 URL 在 MPMoviePlayerController 中播放视频 - iOS

MPMoviePlayerController 仅显示白色背景

是否可以将 MPMoviePlayerController 静音?