2015-03-17 4 views
0

У меня есть приложение, которое использует 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]; 

Существуют ли другие свойства, которые необходимо установить для обработки это использование случай? Что я могу сделать, чтобы отладить, что здесь происходит? Это меня.

ответ

1

Были 2 проблемы в игре здесь ...

  1. Я настройка MPNowPlayingInfoPropertyPlaybackQueueIndex таким же образом я садился MPMediaItemPropertyAlbumTrackCount. Просмотрев документацию, я понял, что MPNowPlayingInfoPropertyPlaybackQueueIndex основан на нулевом значении, и я всегда указывал индекс очереди на 1 и количество очередей на 1. Это заставило стереосистему вообще не отображать какую-либо информацию.

  2. Для воспроизведения трека с AVPlayer, все, что вам нужно будет установить скорость на что-то другое, чем 0. Я заметил, что у меня был ненужный вызов [audioQueue play] прямо перед тем, как установить скорость моей скорости воспроизведения. Я удалил ненужный призыв к игре, и он исправил мои другие проблемы. По какой-то причине этот вызов привел к тому, что стереосистема сразу же отправила команду воспроизведения после нажатия кнопки паузы.

Смежные вопросы