2016-04-14 6 views
0

ここに、ローカルWebサーバーのPOSTハンドラーが実装されているコードを示します。これは、クライアントデバイスからアップロードされたサーバ上で、NSData((GCDWebServerURLEncodedFormRequestとしての要求)形式)の形式でソングをダウンロードします。AVAudioPlayerを使用してHTTP POST要求からNSDataを受け取る

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) 

この方法では、サーバー側でソングファイルのNSDataを正常に受信できます。受信したデータのサイズは、送信された実際のファイルに対応します。 受信した曲を再生しようとすると、その一部が再生されて停止します。しかし、アプリケーション全体がクラッシュすることはありません。

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

上記のすべてのメソッドは、AppDelegate.swiftで実行され、バックグラウンドスレッドで実行されます。 問題を解決するためのお手伝いをいたします。ありがとう.. !!

答えて

0

ほとんどの場合、ローカル変数にあるので、AVAudioPlayerインスタンスは保持されません。 return GCDWebServerDataResponse(HTML:html)が呼び出されると、ローカル変数とプレーヤーは破棄されます。

関連する問題