У меня есть клиентское приложение 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
Мое приложение взаимодействует с устройством Chromecast, отправляя URL-адреса, подобные приведенному выше, на медиа-канал, а приложение-приемник 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?
- Нужно ли кодировать видеофайлы особым образом?
Для справки, я также попробовал другой HTTP-сервер под названием Swifter, но столкнулся с той же проблемой.