Я пытаюсь написать простое личное приложение для радио и имел неприятную проблему.Использование пульта дистанционного управления с AVPlayer в iOS 7 и 8
Я пытаюсь воспроизвести файл .pls (stream) с удаленного сервера с помощью AVPlayer, и мне удалось это сделать. Теперь я могу воспроизвести поток, но, как я упоминал в названии, я не могу дистанционно управлять параметром play/pause, когда приложение находится в фоновом режиме.
Я много искал в Интернете по этой теме и нашел два решения.
1 Как в Apple Remote Control Events Документация с использованием класса «MPRemoteCommandCenter» для обработки этого, но для этого решения я не могу найти никакого объяснения, как я буду использовать AVPlayer с ним. Это приводит меня ко второму решению, так как я понятия не имею, как использовать класс MPRemoteCommandCenter.
2- Как почти все люди упомянули о remoteControlReceivedWithEvent: способ. Однако, когда я пытаюсь использовать этот подход, я не могу ответить. Мой remoteControlReceivedWithEvent: метод никогда не вызывался. Вот мой код, как я реализовал поведение:
У меня есть два класса, один из которых называется EGPlayRadio.m, который содержит материалы AVPlayer и AVAudioSession, а другой - EGMainMenuViewController.m, который отображает кнопку воспроизведения и кнопку приостановки транслировать радио.
Я оплатил внимание к первому вызову [AVSession sharedInstance] перед вызовом [[UIApplication sharedApplication] beginReceivingRemoteControlEvents] метода.
Также я обратил внимание на это, предоставляя разрешение на воспроизведение фонового звука приложения из настроек сборки проекта.
Однако, после поиска много в Интернете не могу найти подходящее решение для моей проблемы. Вот мои два класса, которые я реализовал:
EGPlayRadio.m
#import "EGPlayRadio.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
@interface EGPlayRadio() <AVAudioPlayerDelegate>
@property (nonatomic, strong) AVAudioSession *audioSession;
@property (nonatomic, strong) AVPlayer *player;
@end
@implementation EGPlayRadio
- (id)initDefault
{
self = [super init];
if (self)
{
_audioSession = [AVAudioSession sharedInstance];
[_audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
NSURL *url = [[NSURL alloc] initWithString:@"http://LINK-OF-THE-PLS-FILE"];
_player = [[AVPlayer alloc] initWithURL:url];
}
return self;
}
- (void)playRadio
{
[self.player play];
}
- (void)pauseRadio
{
[self.player pause];
}
EGMainMenuViewController.m
@interface EGRMainMenuViewController()
@property (nonatomic, strong) IBOutlet UIButton *playButton;
@property (nonatomic, strong) IBOutlet UIButton *pauseButton;
@property (nonatomic, strong) EGPlayRadio *radioControl;
@end
@implementation EGRMainMenuViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.radioControl = [[EGPlayRadio alloc] initDefault];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
self.pauseButton.enabled = NO;
self.pauseButton.alpha = 0.3f;
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (IBAction)musicInteracted:(id)sender
{
if (sender == self.playButton)
{
self.pauseButton.enabled = YES;
self.pauseButton.alpha = 1.0f;
self.playButton.enabled = NO;
self.playButton.alpha = 0.3f;
[self.radioControl playRadio];
}
else
{
self.pauseButton.enabled = NO;
self.pauseButton.alpha = 0.3f;
self.playButton.enabled = YES;
self.playButton.alpha = 1.0f;
[self.radioControl pauseRadio];
}
}
-(void)remoteControlReceivedWithEvent:(UIEvent *)event
{
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
//[streamer pause];
break;
case UIEventSubtypeRemoteControlPlay:
//[streamer start];
break;
case UIEventSubtypeRemoteControlPause:
//[streamer pause];
break;
case UIEventSubtypeRemoteControlStop:
//[streamer stop];
break;
default:
break;
}
}
@end
Использование необъявленной идентификатора «MediaController» дать мне эту ошибку @ JeffB6688 –