6
votes

In my app I use AVPlayer to play simple videos. These videos do not have any audio track. The problem is that when I play them, all background music (not from my app) is stopped. How do I prevent this?

Is there a way to play videos with AVPlayer and not cancel background music?

My code is:

let urlAsset = AVURLAsset(URL: urlLocal, options: nil)
let item = AVPlayerItem(asset: urlAsset)
self.videoPlayer = AVPlayer(playerItem: item)

if let player = self.videoPlayer {
    self.videoLayer = AVPlayerLayer(player: player)
    if let layer = self.videoLayer {

        layer.frame = self.view.bounds
        self.view.layer.addSublayer(layer)

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoPlayerDidReachEnd:", name: AVPlayerItemDidPlayToEndTimeNotification , object: nil)

        player.actionAtItemEnd = AVPlayerActionAtItemEnd.None
        player.play()
    }
}

Thanks!

3
Did you try AVAudioSessionCategoryOptions ?Sandeep

3 Answers

14
votes

Swift 3 with some error handling:

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
} catch let error as NSError {
    print(error)
}

do {
    try AVAudioSession.sharedInstance().setActive(true)
} catch let error as NSError {
    print(error)
}
4
votes

You need to set option for audio session to mix your session with others:

NSError *error;
if (![[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error])
{
    NSLog(@"audio session error: %@", error);
}
2
votes

I was able to solve this with GeneratorOfOne's comment. The only thing I needed was to run these 2 line of code before running player.play...

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: &error)
AVAudioSession.sharedInstance().setActive(true, error: &error)