使用 AVPlayer -> iPhone 播放器控件无法从 url 流式传输广播
Stream radio from url with AVPlayer -> iPhone player controls not working
我使用 AVPlayer 从 url 流式传输现场声音。
它运行完美,除非我的应用程序在后台并且我想在向上滑动菜单中播放或暂停 iPhone 播放器(我不知道它的确切名称)。音量控制有效,但 play/pause 控制无效。
我已经在 SO 和互联网上查找了几个小时,但无法弄明白。
有什么帮助吗?
这是代码(如果您需要更多代码,请不要犹豫):
// Set AudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
// Init player
self.playerItem = [AVPlayerItem playerItemWithURL:url];
self.audioPlayer = [AVPlayer playerWithPlayerItem:self.playerItem];
[self.audioPlayer play];
您需要自己在您的应用中实现远程控制。这不是由 AVPlayer
处理的。
想要你需要阅读的是Remote Control Events。
你需要让一些 class 成为第一响应者,比如你的根视图控制器。通过调用 [self becomeFirstResponder]
确保它正在接收所有事件。
然后只需实现远程控制事件的事件处理程序:
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
[self playOrStop: nil];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self previousTrack: nil];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self nextTrack: nil];
break;
default:
break;
}
}
我使用 AVPlayer 从 url 流式传输现场声音。
它运行完美,除非我的应用程序在后台并且我想在向上滑动菜单中播放或暂停 iPhone 播放器(我不知道它的确切名称)。音量控制有效,但 play/pause 控制无效。
我已经在 SO 和互联网上查找了几个小时,但无法弄明白。
有什么帮助吗?
这是代码(如果您需要更多代码,请不要犹豫):
// Set AudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
// Init player
self.playerItem = [AVPlayerItem playerItemWithURL:url];
self.audioPlayer = [AVPlayer playerWithPlayerItem:self.playerItem];
[self.audioPlayer play];
您需要自己在您的应用中实现远程控制。这不是由 AVPlayer
处理的。
想要你需要阅读的是Remote Control Events。
你需要让一些 class 成为第一响应者,比如你的根视图控制器。通过调用 [self becomeFirstResponder]
确保它正在接收所有事件。
然后只需实现远程控制事件的事件处理程序:
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
[self playOrStop: nil];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self previousTrack: nil];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self nextTrack: nil];
break;
default:
break;
}
}