I have implemented audio playback using AVPlayer, playing a remote mp3 url.
I want to display the information about the currently playing audio using the MPNowPlayingInfoCenter
nowPlayingInfo
method.
When I lock the screen, I do see the image and title I set, so I know that this method is registering the information in some way, but when I switch to AirPlay to an AppleTV, the display looks like a generic video output, with the progress bar at bottom, but elapsed time and duration correctly displayed.
If I set this same nowPlayingInfo
, but then start some audio using an AudioQueue, then it properly displays the image on half the screen (it looks just like playing a podcast with the iPod/Music app).
Is this just a limitation of AirPlay support for audio using AVPlayer, or is there some way to get it to display the image and info properly?
If you're on iOS7 you've got to disable external playback :
self.player.allowsExternalPlayback = NO;
Ok - I dug through the apple dev forums and found a hint.
If you are using AVPlayer for audio only, and want it to work in the background while doing airplay, you need to disable the
allowsAirPlayVideo
setting.Apparently AVPlayer on iOS 5+ assumes that it is playing back video via AirPlay, and so does not allow backgrounding, unless you explicitly disable video AirPlay.
Once you disable this (i.e.
self.player.allowsAirPlayVideo = NO;
) then your audio will still play via AirPlay, but now it will now show the audio/ipod like interface correctly.