2016-04-14 16 views
0

Hier ist der Code, in dem der POST-Handler für den lokalen Webserver implementiert ist. Es lädt das Lied in der Form von NSData ((Anfrage als! GCDWebServerURLEncodedFormRequest) .data) auf dem Server herunter, der von dem Client-Gerät hochgeladen wird.Abspielen empfangener NSData von einer HTTP-POST-Anfrage mit AVAudioPlayer

webServer.addHandlerForMethod("POST",path:"/", requestClass: GCDWebServerURLEncodedFormRequest.self, processBlock: 
     {request in 
let html: String = String(format: "<html><body><p>hi</p></body></html>") 
NSLog("Request Args %hhd bkmbk", (request as! GCDWebServerURLEncodedFormRequest).hasBody()) 

NSLog("Request Args %@ bkmbk", (request as! GCDWebServerURLEncodedFormRequest).contentType) 

Mit dieser Methode wird NSData der Song-Datei erfolgreich auf der Serverseite empfangen. Die Größe der empfangenen Daten entspricht der tatsächlich gesendeten Datei. Wenn der empfangene Song versucht wird abzuspielen, spielt er nur einen Teil davon ab und stoppt dann. Die Anwendung als Ganzes stürzt jedoch nicht ab.

do{ 
    print((request as! GCDWebServerURLEncodedFormRequest).data.length) 
    let player = try AVAudioPlayer(data: (request as! GCDWebServerURLEncodedFormRequest).data, fileTypeHint: "mp3") 
    player.prepareToPlay() 
    player.play() 
     }catch{ 
      // ... 
     } 
     return GCDWebServerDataResponse(HTML:html) 
    }) 

Alle Verfahren, die oben in AppDelegate.swift durchgeführt und sind in einem Hintergrund-Thread ausgeführt wird. Jede Hilfe zur Lösung des Problems wird sehr geschätzt. Vielen Dank..!!

Antwort

0

Höchstwahrscheinlich liegt das Problem darin, dass die AVAudioPlayer Instanz nicht beibehalten wird, da sie sich in einer lokalen Variablen befindet. Wenn return GCDWebServerDataResponse(HTML:html) aufgerufen wird, werden die lokale Variable und der Spieler zerstört.

Verwandte Themen