Элементы управления экрана блокировки iPhone не отображаются при приостановке AVPlayer. Как это исправить? - PullRequest
1 голос
/ 22 октября 2019

Я транслирую видеофайл, но воспроизводю только аудио для него с помощью 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. Аудиофайлы передаются в потоковом режиме (а не загружаются), и элементы управления экраном блокировки отображаются, даже если он приостановлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...