Как передать потоковое видео изначально неизвестного размера в тег HTML5?
Я пытаюсь написать веб-сервис (используя C# и WebAPI, хотя реальная серверная технология, вероятно, не важна), в котором размещаются динамические видеофайлы для использования базовым элементом HTML5-видео.
Вот моя ситуация и мои требования:
- Видео транскодируется на лету, поэтому окончательный размер файла неизвестен. Я не могу предоставить
Content-Length
, Однако длительность видео заранее известна. - Видео должно воспроизводиться сразу после загрузки страницы, даже если оно не было перекодировано.
- Пользователь должен иметь возможность с помощью элементов управления видео HTML5 осуществлять поиск вперед и назад в видео. Если они попытаются перейти к точке, которая не перекодирована, запрос будет заблокирован, пока транскодирование не будет установлено.
Я пытался использовать 206: Partial Content
ответ с Content-Range
заголовок, но так как я не могу предоставить content-length
проигрыватель в Chrome, похоже, не может искать дальше, чем первый фрагмент видео, который он получает, а проигрыватель в Firefox даже не пытается загрузить больше, чем первый фрагмент. Также недопустимо отвечать диапазоном за пределами того, что запрашивает клиент, но видеоплеер всегда запрашивает байты 0+.
Без длины контента я подумал об использовании Transfer-Encoding: chunked
и чанкинг выхода. Однако Chrome не позволяет искать видео, если сервер не поддерживает ранжированные запросы.
Я также подумал о том, чтобы указать поддельную длину контента в 1 ТБ или что-то смешное, просто чтобы я мог использовать опцию дальнего ответа, но я не знаю, повлияет ли это на индикатор выполнения или возможности поиска. Определяет ли проигрыватель HTML5 размеры индикатора выполнения в зависимости от размера или продолжительности файла?
Так какие у меня варианты? Я уверен, что это проблема, которая была решена раньше. Можно ли использовать ранжированные ответы в сочетании с кусочным кодированием?