подходит ли HTTP2 для потокового видео или многопользовательских игр в реальном времени?

Пытаюсь понять, что возможно и как это сравнивается с веб-сокетами. Http2 позволяет серверу непрерывно передавать данные клиенту. Существуют ли какие-либо ограничения, которые не позволяют использовать его для отправки видеопакетов достаточно быстро для работы потокового видео?


person Nico Collie    schedule 26.04.2020    source источник


Ответы (1)


HTTP/2 push был разработан для отправки ресурсов, связанных с первичным ресурсом.

Он в основном используется для браузеров, где при запросе index.html страницы они получают style.css и application.js, на которые ссылается index.html.

Технически возможна потоковая передача видео клиенту в одном ответе на запрос клиента (массовая загрузка).

Для более продвинутых функций, таких как буферизация с небольшим опережением и загрузка только при потреблении видеопотока, HTTP-клиенты могут отправлять запросы диапазона. .

Для загрузки параллельных потоков с разным разрешением — 720p против 1080p — клиент может сделать два разных запроса.

HTTP/2 необходимо настроить так, чтобы у клиентов было большое окно управления потоком (см. этот ответ ), но для браузеров это уже так, и большинство клиентских библиотек HTTP/2 поддерживают такую ​​конфигурацию.

Технически это возможно, но как это сравнить с WebSocket?

В WebSocket полностью отсутствует понятие метаданных, поэтому разработчику приложения придется изобретать некоторый формат метаданных для запросов и ответов, таких как идентификатор/название видеопотока, разрешение, диапазон и т. д., а затем загружать необработанное видео.

Заголовок кадра HTTP/2 составляет 9 байт, заголовок кадра WebSocket — 10 байт (при условии, что кадры большие). Однако максимальный размер кадра составляет 16 КиБ для HTTP/2 и может быть больше для WebSocket, хотя, вероятно, не рекомендуется делать его слишком большим (поскольку клиент может решить не выделять ресурсы для сверхбольших кадров, отправляемых сервером).

Кроме того, в WebSocket существует понятие максимального размера сообщения. Обычно вы не можете просто отправлять кадры WebSocket, принадлежащие одному и тому же сообщению, поэтому вам нужно будет разделить видео на несколько небольших сообщений (но это чисто технический аспект).

Наконец, HTTP/2 может поддерживать связь WebSocket в потоке HTTP/2 (RFC8441).

Это означает, что запрос/ответ HTTP/2 может идеально имитировать связь через WebSocket: у вас будет «бесконечный» запрос — запрос, содержимое которого никогда не заканчивается (пока связь не будет закрыта) — для связи клиента с сервером, и « бесконечный" ответ - тот, у которого есть содержание ответа, которое никогда не заканчивается (пока связь не закрыта) - для связи сервера с клиентом.

Таким образом, я бы не стал использовать HTTP/2 push для потоковой передачи видео: обычный ответ HTTP/2 может выполнять эту работу более эффективно (как WebSocket).

Я считаю, что WebSocket действительно полезен для незапрашиваемой связи между сервером и клиентом. При использовании HTTP/2 клиент всегда должен инициировать запрос.

person sbordet    schedule 26.04.2020