防止 AVPlayer 取消背景音频

Posted

技术标签:

【中文标题】防止 AVPlayer 取消背景音频【英文标题】:Prevent AVPlayer from canceling background audio 【发布时间】:2015-07-28 08:26:09 【问题描述】:

在我的应用中,我使用 AVPlayer 播放简单的视频。这些视频没有任何音轨。问题是当我播放它们时,所有背景音乐(不是来自我的应用程序)都停止了。我该如何防止这种情况?

有没有办法用 AVPlayer 播放视频而不取消背景音乐?

我的代码是:

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()
    

谢谢!

【问题讨论】:

你试过 AVAudiosessionCategoryOptions 吗? 【参考方案1】:

带有一些错误处理的 Swift 3:

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)

【讨论】:

【参考方案2】:

您需要为音频会话设置选项以将您的会话与其他会话混合:

NSError *error;
if (![[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error])

    NSLog(@"audio session error: %@", error);

【讨论】:

【参考方案3】:

我能够通过 GeneratorOfOne 的评论解决这个问题。我唯一需要的是在运行 player.play 之前运行这两行代码...

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

【讨论】:

以上是关于防止 AVPlayer 取消背景音频的主要内容,如果未能解决你的问题,请参考以下文章

防止无音频 AVPlayer 暂停背景音频

AVPlayer 和背景音频流

同时播放两个 AVPlayer 音频文件时出现音频故障

Xcode swift - 背景模式 - 锁定时AVPlayer中的音频

iOS AVPlayer:屏幕锁定时暂停视频

防止 AVPlayer 一次播放多个曲目的最佳方法