【发布时间】:2016-08-07 16:20:08
【问题描述】:
我有一个客户端 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 加载和播放视频 - 到目前为止一切正常。
我的问题是我想为当前播放的视频实现寻求支持,并且一旦我向媒体频道发送寻求请求,我就会从GCDWebServer 收到“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 等其他协议的服务器?
- 我是否需要以特定方式对视频文件进行编码?
作为参考,我还尝试了另一个名为 Swifter 的 HTTP 服务器,但我遇到了同样的问题。
【问题讨论】:
标签: ios webserver video-streaming gcdwebserver