Agg*_*sor 5 audio xcode avaudioplayer avaudiosession swift
我正在播放几种声音,每个声音都会使背景音频变暗。完成后,我恢复背景音频。每次播放其中一个音频文件时,背景都会变暗(根据需要)。当最后一个音频完成播放时,背景音频将恢复(也需要)。但是,大约 5 秒后,它会抛出此错误并再次使音频变暗(这不是我想要的,因为现在所有声音都已完成)。
错误:[0x19c9af310] AVAudioSession.mm:646:-[AVAudioSession setActive:withOptions:error:]:停用正在运行 I/O 的音频会话。在停用音频会话之前,应停止或暂停所有 I/O。
据我所知,我正在停止并删除所有音频。
我在这里找到了 1 个帖子:
iOS8 AVAudioSession setActive 错误
但该解决方案对我不起作用。这是我的音频播放器类。如果你能告诉我可能会发生什么,我将不胜感激。
import Foundation
import AVFoundation
private var _singleton:O_Audio? = O_Audio()
private var _avAudioPlayers:Array<AVAudioPlayer> = []
//Manages dimming and resuming background audio
class O_Audio:NSObject, AVAudioPlayerDelegate
{
class var SINGLETON:O_Audio
{
if(_singleton == nil)
{
_singleton = O_Audio()
}
return _singleton!
}
class func dimBackgroundAudio()
{
AVAudioSession.sharedInstance().setActive(true, error: nil)
}
class func restoreBackgroundAudio()
{
AVAudioSession.sharedInstance().setActive(false, error: nil)
}
class func playSound(path:String)
{
var sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(path, ofType: "m4a")!)
var audioPlayer = AVAudioPlayer(contentsOfURL: sound, error: nil)
_avAudioPlayers.append(audioPlayer)
audioPlayer.delegate = O_Audio.SINGLETON
audioPlayer.prepareToPlay()
audioPlayer.play()
}
func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool)
{
//this was from the 1 stack post I found but these
//two lines do not solve my problem
player.stop()
player.prepareToPlay()
var index:Int!
for i in 0..._avAudioPlayers.count - 1
{
if(_avAudioPlayers[i] == player)
{
index = i
break
}
}
_avAudioPlayers.removeAtIndex(index)
if(_avAudioPlayers.count == 0)
{
O_Audio.restoreBackgroundAudio()
}
}
func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer!, error: NSError!)
{
println("error")
}
}
Run Code Online (Sandbox Code Playgroud)
重要更新
所以我找到了我认为问题的粗略原因。我们的应用程序建立在 Cordova 之上。所以我们有很多 Safari(浏览器)调用。每当我们播放视频(通过 Safari 播放)时,就会发生此错误。似乎 Safari 以某种方式使音频变暗并保持运行的 I/O 线程。
问题是 MPMoviePlayerController 对象正在播放。事实上任何 AVPlayerItem 都会导致这种情况。如果您播放电影并尝试调暗音频,您将收到此错误。
目前,在 iOS 上播放的任何电影都具有不可变的音轨(即使电影文件上没有音频)。这将永久导致鸭子问题(它是源代码中的错误)。我尝试了很多解决方法,但没有任何效果。我确信这是 Xcode 源代码错误。