MPNowPlayingInfoCenter信息无法通过USB附件工作

时间:2015-03-17 20:42:18

标签: objective-c avplayer

我有一个使用AVPlayer(实际上是AVQueuePlayer)来播放音频的应用。它设置MPNowPlayingInfoCenter信息,使用MPRemoteCommandCenter管理远程命令,并允许背景音频。所有这些功能都可以通过控制中心和锁定屏幕正常工作。当我将手机放入汽车时,它也可以与我汽车的蓝牙接口配合使用。但是,如果我通过iPhone 6闪电端口将手机直接插入汽车的立体声系统,它会严重损坏。它实际上播放音频,但是......

(1)现在播放的信息都没有显示在我汽车的仪表板上 (2)每当我尝试做任何事情时,我的汽车的立体声都会引发一系列连接错误。

我手机上的其他应用没有这个问题,所以我不认为这是我的立体声故障。我使用官方Apple避雷线,因此也没有相关性。

我通过Apple TV使用AirPlay尝试了我的应用程序,它同样很不稳定。我注意到AVPlayer有一个名为allowsExternalPlayback的重要属性,如果您只播放音频,则需要将其设置为NO。将该属性设置为NO后,通过Apple TV的AirPlay可以正常工作。我认为这是影响我的车的同样问题,但事实并非如此。即使将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 个答案:

答案 0 :(得分:1)

这里有2个问题......

  1. 我设置MPNowPlayingInfoPropertyPlaybackQueueIndex的方式与设置MPMediaItemPropertyAlbumTrackCount的方式相同。查看文档后,我意识到MPNowPlayingInfoPropertyPlaybackQueueIndex从零开始,我总是将队列索引设置为1并将队列计数设置为1.这导致汽车立体声根本不显示任何信息。

  2. 要使用AVPlayer播放曲目,您只需将速率设置为0以外的其他值。我注意到在设置之前我已经对[audioQueue play]进行了不必要的调用率到我的播放率。我删除了那个不必要的游戏,它修复了我的其他问题。出于某种原因,在我按下暂停按钮后,该呼叫产生了汽车音响立即发送播放命令的效果。