HTTP
::: info В курсе сетевых видеотехнологий мы рассматриваем HTTP применительно к передаче медиаданных и команд управления.
:::
HTTP может использоваться для передачи видеопотоков, но это происходит в рамках других технологий, таких как HLS (HTTP Live Streaming) и MPEG-DASH (Dynamic Adaptive Streaming over HTTP). Эти технологии основаны на разбиении медиапотока на сегменты, которые передаются через HTTP. В отличие от RTSP, работающего с RTP/RTCP, они не обеспечивают передачу данных в реальном времени, но позволяют адаптивно менять качество видео в зависимости от скорости интернета.
Общее назначение
HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня, предназначенный для передачи гипертекстовых документов, таких как HTML, CSS и JavaScript, а также других типов данных в интернете. HTTP функционирует на уровне приложений модели OSI/ISO, седьмом уровне, и опирается на транспортные уровни (чаще всего TCP/IP) для надежной передачи данных.
Основные версии HTTP:
- HTTP/1.0: Первая версия, использующая одно соединение для каждого запроса.
- HTTP/1.1: Улучшена поддержка параллельной обработки запросов и кэширования.
- HTTP/2: Добавлена возможность мультиплексирования запросов и ответов, сжатия заголовков и приоритизация запросов.
- HTTP/3: Новая версия, основанная на протоколе QUIC, обеспечивающем более быструю и надежную передачу данных.
1. Передача медиапотоков (MPEG-DASH, HLS)
HTTP активно используется для передачи медиапотоков, особенно в формате адаптивного стриминга. Два основных стандарта, работающих поверх HTTP, — это MPEG-DASH (Dynamic Adaptive Streaming over HTTP) и HLS (HTTP Live Streaming).
MPEG-DASH
MPEG-DASH делит медиапоток на сегменты, каждый из которых доступен в нескольких вариантах качества (битрейта). Клиентский плеер анализирует состояние сети и выбирает подходящий сегмент для загрузки. Информация о сегментах хранится в файле манифеста .mpd.
Пример манифеста MPEG-DASH:
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
type="static"
mediaPresentationDuration="PT30M"
minBufferTime="PT10S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period duration="PT30M">
<AdaptationSet>
<Representation id="1" mimeType="video/mp4" codecs="avc1.42E01E" width="640" height="360" startWithSAP="1" bandwidth="1500000">
<SegmentTemplate timescale="1000" media="$Number$.mp4" initialization="init.mp4"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
HLS
HLS был разработан компанией Apple и стал популярным стандартом для адаптивного стриминга. Медиапоток делится на короткие сегменты, каждый из которых представлен отдельным файлом. Информация о сегментах хранится в плейлисте формата .m3u8.
Пример плейлиста HLS:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.009,
fileSequence0.ts
#EXTINF:9.009,
fileSequence1.ts
#EXTINF:9.009,
fileSequence2.ts
...
2. Передача команд другими протоколами
HTTP также служит транспортным уровнем для множества других протоколов, используемых для передачи команд и управления устройствами. Один из примеров — ONVIF, который использует SOAP поверх HTTP для управления IP-камерами и другими устройствами видеонаблюдения.
Команды ONVIF поверх HTTP
ONVIF (Open Network Video Interface Forum) — это открытый стандарт для обмена информацией между устройствами видеонаблюдения. Команды управления отправляются через SOAP-сообщения, инкапсулированные в HTTP-запросы.
Пример SOAP-запроса для изменения настроек PTZ-камеры:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Body>
<Move xmlns="http://www.onvif.org/ver20/ptz/wsdl">
<ProfileToken>token</ProfileToken>
<Velocity>
<PanTilt x="0.1" y="0.1" />
<Zoom x="0.1" />
</Velocity>
<Timeout>PT5S</Timeout>
</Move>
</s:Body>
</s:Envelope>
Этот SOAP-запрос отправляется через HTTP POST:
POST /onvif/ptz_service HTTP/1.1
Host: camera.example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<SOAP-ENV:Envelope ...>
...
</SOAP-ENV:Envelope>
Ответ от устройства также приходит в формате SOAP, инкапсулированном в HTTP-ответе.
Эти два примера показывают, насколько универсален и важен протокол HTTP в современных системах передачи данных и управления устройствами.