AVAudioSession Audio-DIMM-Fehler: Deaktivieren einer audio-Sitzung, die ich laufen/O

Ich Spiele verschiedene sounds, die jede dim hintergrund-audio. Wenn Sie fertig sind, ich wieder hintergrund-audio. Was passiert, ist jedes mal einer der audio-Dateien zu spielen, der hintergrund Dimmt (wie gewünscht). Wenn der Letzte audio-beendet die Wiedergabe der audio im hintergrund wiederhergestellt wird (ist auch erwünscht). Aber nach etwa 5 Sekunden wirft er diesen Fehler und blendet den audio wieder (nicht das, was ich will, da alle sounds sind jetzt fertig).

FEHLER: [0x19c9af310] AVAudioSession.mm:646: -[AVAudioSession
setActive:withOptions:error:]: Deaktivieren einer audio-session, die
läuft I/O. Alle I/O sollte gestoppt werden oder pausiert, vor der Deaktivierung
die audio-Sitzung.

Meinem wissen, das ich bin zu stoppen und entfernen Sie alle audio.

Gibt es 1 Beitrag habe ich hier gefunden:

iOS8 AVAudioSession setActive Fehler

Aber die Lösung funktioniert bei mir nicht. Hier ist mein audio-player-Klasse. Wenn Sie können raten, was sein könnte, ich würde es zu schätzen wissen.

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")
    }
}

Wichtiges Update

So, ich habe gefunden, was ich denke, ist eine grobe Ursache des Problems. Unsere App wurde auf Cordova. So haben wir eine Menge von Safari (browser) fordert. Und dieser Fehler wird auftreten, wenn wir spielen ein video (gespielt über Safari). Es scheint, dass Safari irgendwie Dimmen der audio-und halten eine laufende I/O-thread.

  • Die code ruft die dim Funktion? Am wichtigsten ist, wenn. Sie sollten NSLog in allen Funktionen und verfolgen die Chronologie der Anrufe. Etwas ist dort passiert, nach 5 Sekunden und wir müssen wissen, die Reihenfolge der Ereignisse.
  • Nichts ist wirklich Berufung, die im moment. Das Dimmen geschieht automatisch, wenn der audioPlayer.play () - tritt auf. (Der OS ist automatisch abblendende die hintergrund-audio)
  • Haben Sie figered es aus, warum das display Dimmen?
  • leider habe ich noch nicht gehört, zurück von Apple. Ich reichte ein bug. Auf den ersten, antworteten Sie sehr, und ich gab Ihnen ein Beispiel-Projekt. Habe Sie einmal ging es dann dunkel und ich kann nicht ein Wort aus Ihnen heraus (nachdem ein halbes Dutzend Anfragen). Gotta love apple support!
  • Vielen Dank für die schnelle Antwort. Ich habe bemerkt, dass wenn ich einen audio-stream in safari der Bildschirm bekommt Dimmen, aber nicht gesperrt. Ich möchte das gleiche für meine app.
InformationsquelleAutor Aggressor | 2015-08-06
Schreibe einen Kommentar