我有一个使用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];
是否需要设置其他属性来处理此用例?我该怎么做来调试这里发生的事情?这个人得到了我。
答案 0 :(得分:1)
这里有2个问题......
我设置MPNowPlayingInfoPropertyPlaybackQueueIndex
的方式与设置MPMediaItemPropertyAlbumTrackCount
的方式相同。查看文档后,我意识到MPNowPlayingInfoPropertyPlaybackQueueIndex
从零开始,我总是将队列索引设置为1并将队列计数设置为1.这导致汽车立体声根本不显示任何信息。
要使用AVPlayer
播放曲目,您只需将速率设置为0以外的其他值。我注意到在设置之前我已经对[audioQueue play]
进行了不必要的调用率到我的播放率。我删除了那个不必要的游戏,它修复了我的其他问题。出于某种原因,在我按下暂停按钮后,该呼叫产生了汽车音响立即发送播放命令的效果。