使用AVAudioPlayer从HTTP POST请求播放收到的NSData

时间:2016-04-14 07:58:57

标签: swift http-post nsdata avaudioplayer gcdwebserver

以下是实现本地Web服务器的POST处理程序的代码。它在从客户端设备上传的服务器上以NSData((请求为!GCDWebServerURLEncodedFormRequest).data)的形式下载歌曲。

 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中执行,并在后台线程中执行。 我们非常感谢您解决此问题的任何帮助。感谢.. !!

1 个答案:

答案 0 :(得分:0)

问题很可能是AVAudioPlayer实例没有被保留,因为它位于局部变量中。调用return GCDWebServerDataResponse(HTML:html)时,本地变量和播放器将被销毁。