我有一个客户端 iOS 应用程序,它使用GCDWebServerNSSearchPathDirectory.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”错误,GCDWebServer
视频播放被中断。来自服务器的日志如下:
....
[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 服务器,但我遇到了同样的问题。