Я транслирую видеофайл, но воспроизводю только аудио для него с помощью AVPlayer. Я успешно могу играть / приостанавливать, продолжать играть в фоновом режиме и взаимодействовать с элементами управления экрана блокировки для управления плеером. Единственная проблема заключается в том, что если я приостановил звук, а затем заблокировал телефон, теперь отображаются элементы управления экрана блокировки. Однако, если я приостанавливаю звук с экрана блокировки, элементы управления продолжают отображаться.
База кодов обширна, поэтому вот некоторые соответствующие коды.
-(void)viewDidLoad {
...
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMoviePlayback error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
...
}
-(void) setUpAvPlayer {
...
self.player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:mixComposition]];
self.player.automaticallyWaitsToMinimizeStalling = NO;
[self addObservers];
[self setUpRemoteCommandCenter];
[self.player.currentItem seekToTime:CMTimeMakeWithSeconds(videoSeekPosition, 60000)];
...
}
-(void)setUpRemoteCommandCenter {
// Provides all audio data to be displayed to user in lock screen
self.lockScreenInfo = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
lecture.topicName, MPMediaItemPropertyTitle,
[NSNumber numberWithDouble:CMTimeGetSeconds(self.player.currentItem.duration)], MPMediaItemPropertyPlaybackDuration,
[NSNumber numberWithDouble:CMTimeGetSeconds(self.player.currentItem.currentTime)], MPNowPlayingInfoPropertyElapsedPlaybackTime,
[NSNumber numberWithDouble:playerRate], MPNowPlayingInfoPropertyPlaybackRate, nil];
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:self.lockScreenInfo];
// For lock screen & remote audio controls
MPRemoteCommandCenter *remoteCommandCenter = [MPRemoteCommandCenter sharedCommandCenter];
[remoteCommandCenter.playCommand setEnabled:YES];
[remoteCommandCenter.playCommand addTarget:self action:@selector(playPauseVideo)];
[remoteCommandCenter.pauseCommand setEnabled:YES];
[remoteCommandCenter.pauseCommand addTarget:self action:@selector(playPauseVideo)];
[remoteCommandCenter.skipBackwardCommand setEnabled:YES];
[remoteCommandCenter.skipBackwardCommand addTarget:self action:@selector(skipBackward)];
remoteCommandCenter.skipBackwardCommand.preferredIntervals = @[@(15)];
[remoteCommandCenter.skipForwardCommand setEnabled:YES];
[remoteCommandCenter.skipForwardCommand addTarget:self action:@selector(skipForward)];
remoteCommandCenter.skipForwardCommand.preferredIntervals = @[@(15)];
// Drag slider to change audio position
// Check for iOS version here (later than iOS 9.0)
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_0) {
[remoteCommandCenter.changePlaybackPositionCommand setEnabled:YES];
[remoteCommandCenter.changePlaybackPositionCommand addTarget:self action:@selector(changedThumbSliderOnLockScreen:)];
}
}
Обновление: я взял Мэттасовет в комментариях и сейчас я использую mp3-файл для аудио. У меня все еще остается та же проблема, когда при приостановке звука элементы управления экрана блокировки не отображаются. Любые другие идеи относительно того, как я могу это исправить? Как я сказал в комментариях, я в основном хочу имитировать приложение Apple Podcast. Аудиофайлы передаются в потоковом режиме (а не загружаются), и элементы управления экраном блокировки отображаются, даже если он приостановлен.