Ios 当AVPlayer暂停时,iPhone锁屏控件不显示,如何修复此问题?
我正在播放视频文件,但仅使用AVPlayer播放音频。我能够成功地播放/暂停,在后台继续播放,并与锁屏控件交互以控制播放器。唯一的问题是,如果我暂停音频,然后锁定手机,锁定屏幕控件现在确实会显示。但是,如果我暂停锁定屏幕上的音频,控制按钮仍会显示 代码库非常广泛,因此下面是一些相关的代码Ios 当AVPlayer暂停时,iPhone锁屏控件不显示,如何修复此问题?,ios,objective-c,avplayer,mpnowplayinginfocenter,mpremotecommandcenter,Ios,Objective C,Avplayer,Mpnowplayinginfocenter,Mpremotecommandcenter,我正在播放视频文件,但仅使用AVPlayer播放音频。我能够成功地播放/暂停,在后台继续播放,并与锁屏控件交互以控制播放器。唯一的问题是,如果我暂停音频,然后锁定手机,锁定屏幕控件现在确实会显示。但是,如果我暂停锁定屏幕上的音频,控制按钮仍会显示 代码库非常广泛,因此下面是一些相关的代码 -(void)viewDidLoad { ... [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlay
-(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文件作为音频。我仍然有同样的问题,当音频暂停时,锁定屏幕控件不显示。关于如何解决这个问题,还有其他想法吗?正如我在评论中所说,我基本上想模仿苹果的播客应用程序。音频文件是流式传输的(而不是下载的),即使在暂停时也会显示锁屏控件。您所描述的是视频文件的工作方式。你知道有哪个应用程序的行为会有所不同吗?我见过一些能够流式传输(而不是下载音频文件)并且在暂停时仍会显示锁定屏幕控件的应用程序。例如,iPhone播客应用程序可以流式播放剧集。我假设这些应用程序使用AVPlayer,因为AVAudioPlayer不允许流媒体。这有意义吗?那些是音频文件。我在问你有关视频文件的事。你有没有见过一个应用程序在播放视频文件时的行为与你描述的一样?所以现在我正在播放视频文件,但只使用音频(我不是在创建AVPlayerViewController并分配它的播放器)。你是说如果我使用相同的代码,但是指向一个纯音频文件(如mp3),那么锁屏控件的问题就会消失吗?我什么也没说。我在问你一个问题。我要求第三次。你能举一个例子,说明任何一个流式传输视频文件的应用程序(我不在乎它播放的是文件的哪一部分)都能做到你所说的应用程序应该做的事情吗?你所描述的是视频文件是如何工作的。你知道有哪个应用程序的行为会有所不同吗?我见过一些能够流式传输(而不是下载音频文件)并且在暂停时仍会显示锁定屏幕控件的应用程序。例如,iPhone播客应用程序可以流式播放剧集。我假设这些应用程序使用AVPlayer,因为AVAudioPlayer不允许流媒体。这有意义吗?那些是音频文件。我在问你有关视频文件的事。你有没有见过一个应用程序在播放视频文件时的行为与你描述的一样?所以现在我正在播放视频文件,但只使用音频(我不是在创建AVPlayerViewController并分配它的播放器)。你是说如果我使用相同的代码,但是指向一个纯音频文件(如mp3),那么锁屏控件的问题就会消失吗?我什么也没说。我在问你一个问题。我要求第三次。你能举一个例子,说明任何流式传输视频文件的应用程序(我不在乎它播放的是文件的哪一部分)都能做到你所说的应用程序应该做到的事情吗?