У меня есть приложение, которое использует AVPlayer
(фактически AVQueuePlayer
) для воспроизведения звука. Он устанавливает MPNowPlayingInfoCenter
информацию, использует MPRemoteCommandCenter
для управления удаленными командами и позволяет использовать фоновый звук. Вся эта функциональность работает правильно через центр управления и экран блокировки. Когда я привожу свой телефон в свою машину, он также хорошо работает с интерфейсом Bluetooth. Однако, если я подключу свой телефон непосредственно к стереосистеме моего автомобиля через порт молнии iPhone 6, он сильно сломается. Он фактически воспроизводит звук, но ...Информация о MPNowPlayingInfoCenter не работает через USB-аксессуар
(1) Ни одна из воспроизводимых в настоящее время информации не отображается на приборной панели моего автомобиля. (2) Моя стереосистема автомобиля вызывает множество ошибок подключения, когда я пытаюсь что-либо сделать ,
Другие приложения на моем телефоне не имеют этой проблемы, поэтому я не думаю, что это вина моего стерео. Я использую официальные молниеотводы Apple, так что это тоже не связано.
Я попробовал свое приложение с AirPlay через свой Apple TV, и это было так же неудобно. Я заметил, что AVPlayer
имеет важное свойство, называемое allowsExternalPlayback
, которое должно быть установлено на NO
, если вы только воспроизводите аудио. После установки этого свойства на NO
, AirPlay через Apple TV работает правильно. Я предположил, что это была та же проблема, что и моя машина, но это, похоже, не так. Даже с allowsExternalPlayback
, установленным на NO
, воспроизведение звука через USB-соединение на моем автомобиле по-прежнему прикручено.
Кажется, что-то не так с тем, как либо (a) AVAudioSession
, либо (b) настроен AVPlayer
.
Моя конфигурация аудиоплеер довольно просто ...
self.audioQueue = [AVQueuePlayer queuePlayerWithItems:nil];
self.audioQueue.allowsExternalPlayback = NO;
[self.audioQueue addObserver:self forKeyPath:@"status" options:0 context:kAVPlayerStatusContext];
[self.audioQueue addObserver:self forKeyPath:@"rate" options:0 context:kAVPlayerRateContext];
[self.audioQueue addObserver:self forKeyPath:@"error" options:0 context:kAVPlayerErrorContext];
[self.audioQueue addObserver:self forKeyPath:@"currentItem" options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:kAVPlayerCurrentItemContext];
... как в моем аудио сессии ...
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error;
[audioSession setActive:YES error:&error];
// Error handling code
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
// Error handling code
// Audio session notifications
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(audioSessionInterruptionNotification:) name:AVAudioSessionInterruptionNotification object:audioSession];
[defaultCenter addObserver:self selector:@selector(audioSessionRouteChangeNotification:) name:AVAudioSessionRouteChangeNotification object:audioSession];
[defaultCenter addObserver:self selector:@selector(audioSessionMediaServicesWereResetNotification:) name:AVAudioSessionMediaServicesWereResetNotification object:audioSession];
Существуют ли другие свойства, которые необходимо установить для обработки это использование случай? Что я могу сделать, чтобы отладить, что здесь происходит? Это меня.