我有一个客户端iOS应用程序,使用GCDWebServer来服务于存储在设备上我应用程序的NSSearchPathDirectory.DocumentDirectory
文件夹中的图像和视频。
在应用程序启动时,我启动了一个GCDWebServer
实例,并为我的请求添加了一个文件响应处理程序:
self.addDefaultHandlerForMethod("GET", requestClass: GCDWebServerFileRequest.self) { request in
return GCDWebServerFileResponse(file: self.filePathForResponse(request.URL))
}
我可以验证,当应用程序正在运行时,我可以成功从我的设备下载文件。
curl -O http://192.168.0.15:8080/files/IMG_1213-1280x720.MOV
我的应用程序通过向媒体通道发送类似于上面的URL来与Chromecast设备通信,Chromecast接收器应用程序会加载并播放指定URL的视频 - 到目前为止都很好。
我的问题是,我想为当前正在播放的视频实现寻找支持,但是一旦我向媒体通道发送寻找请求,我就会从收到“Broken pipe”错误,视频播放会中断。服务器日志如下:
....
[DEBUG] Connection sent 32768 bytes on socket 24
[DEBUG] Connection sent 32768 bytes on socket 24
[ERROR] Error while writing to socket 24: Broken pipe (32)
[DEBUG] Did close connection on socket 24
我最好的理解是正常播放能够工作是因为它就像从头到尾下载文件一样,可以使用常规的
GCDWebServerFileResponse
进行服务,然而寻找等同于 '跳转' 到文件的不同部分,我不确定这样读取文件是否适用于我的配置。
- 有没有办法可以配置
GCDWebServer
使其可行?我知道问题可以得到解决,因为有几个实时应用程序可以做到这一点。 - 我需要使用支持其他协议(如HLS或RTSP)的服务器吗?
- 我需要以特定方式对视频文件进行编码吗?
byteRange
,但在我的情况下,消费者不是AVPlayer,而是发送视频数据请求的Chromecast。看起来byteRange.length == -1
,contentType = nil
和contentLength = -1
。即使使用hasByteRange()
,视频也非常卡顿,我得到了很多这样的错误:[ERROR] Error while writing to socket 18: Broken pipe (32)。 - bizz84byteRange
,那么播放就没问题,但我就无法寻找,这是我的最初问题。 - bizz84GCDWebServer
或其他解决方案。我也尝试过Swifter https://github.com/httpswift/swifter,但是断开管道问题似乎更严重。 - bizz84