RTSP 2.0 | Поле общего заголовка Range

RTSP 2.0 | Поле общего заголовка Range

Общие заголовки RTSP 2.0 — это заголовки, которые могут использоваться как в запросах, так и в ответах. Общие заголовки RTSP 2.0 перечислены в таблице 1

Общий заголовок «Range» указывает временной диапазон в запросах и ответах методов PLAY (раздел 13.4), PAUSE (раздел 13.6), SETUP (раздел 13.3) и PLAY_NOTIFY (раздел 13.5). Он МОЖЕТ быть включен в запросы метода GET_PARAMETER от клиента к серверу только с форматом Range и не иметь значения для запроса текущей медиа-позиции, независимо от того, находится ли сеанс в состоянии Play или Ready во включенном формате. Сервер ДОЛЖЕН, если поддерживает формат диапазона, отвечать текущей точкой воспроизведения или точкой паузы в качестве начала диапазона. Если в предыдущем запросе PLAY использовалась явная точка остановки, то это значение должно быть включено в качестве точки остановки. Обратите внимание, что если в настоящий момент сервер находится под каким-либо манипулированием воспроизведением мультимедиа, влияющим на интерпретацию заголовка Range, например значением масштаба, отличным от 1, этот факт также необходимо включить в любой ответ GET_PARAMETER, включив заголовок Scale для предоставления полной информации.

 

Диапазон может быть указан в нескольких единицах. Эта спецификация определяет единицы измерения диапазона smpte (раздел 4.4.1), npt (раздел 4.4.2) и тактового генератора (раздел 4.4.3). Несмотря на то, что октетные диапазоны (байтовые диапазоны) (см. Раздел 2.1 [RFC7233 #]) и другие расширенные блоки МОГУТ использоваться, их поведение не определено, поскольку они обычно не имеют значения в RTSP. Серверы, поддерживающие заголовок Range, ДОЛЖНЫ понимать формат диапазона NPT и ДОЛЖНЫ понимать формат диапазона SMPTE. Если заголовок Range отправляется в непонятном формате времени, получателю СЛЕДУЕТ вернуть 456 (поле заголовка недействительно для ресурса) и включить заголовок Accept-Ranges, указывающий поддерживаемые форматы времени для данного ресурса.

Пример:

Range: clock=19960213T143205Z-

Заголовок Range содержит диапазон одного формата диапазона. Диапазон — это полуоткрытый интервал с начальной и конечной точкой, включая начальную точку, но исключая конечную точку. Диапазон может быть либо полностью задан с явными значениями начальной и конечной точек, либо иметь неявную начальную или конечную точку. Неявная начальная точка указывает точку паузы сеанса, а если точка паузы не установлена, начало содержимого. Неявная конечная точка указывает конец содержимого. Использование неявных начальной и конечной точек не допускается в одном и том же заголовке Range; однако пропуск заголовка Range имеет это значение, то есть от точки паузы (или начала) до конца содержимого.

Как уже отмечалось, заголовки Range определяют полуоткрытые интервалы. Диапазон A-B начинается точно в момент времени A, но заканчивается непосредственно перед B. Относится только время начала медиа-блока, такого как видео или аудио кадр. Например, предположим, что видеокадры генерируются каждые 40 мс. Диапазон от 10,0 до 10,1 будет включать видеокадр, начинающийся с 10,0 или более позднего времени, и будет включать видеокадр, начинающийся с 10,08, даже если он длится за пределами интервала. Диапазон 10.0-10.08, с другой стороны, исключил бы кадр в 10.08.

Обратите внимание на разницу между временной шкалой NPT  «now» (сейчас) и неявным начальным значением. Неявные значения ссылаются на текущую точку паузы, а «now» (сейчас) — на текущее время. В сеансе с прогрессированием по времени с записью (сохранение в течение некоторого или полного времени) точка паузы может быть через 2 минуты в сеансе, в то время как теперь может быть через 1 час в сеансе.

По умолчанию интервалы диапазона увеличиваются, когда вторая точка больше первой.

Пример:

Range: npt=10-15

Однако интервалы диапазона также могут уменьшаться, если в заголовке Scale (см. Раздел 18.46 из RFC 7826) указано отрицательное значение масштаба. Например, это будет иметь место, когда желательно воспроизведение в обратном направлении.

Пример:

Scale: -1
Range: npt=15-10

Диапазоны уменьшения по-прежнему являются полуоткрытыми интервалами, как описано выше. Таким образом, для диапазона A-B A закрыто, а B открыто. В приведенном выше примере 15 закрыт, а 10 открыт. Исключением из этого правила является случай, когда B = 0 находится в убывающем диапазоне. В этом случае диапазон закрыт на обоих концах, так как в противном случае было бы невозможно достичь 0 при обратном воспроизведении для форматов, имеющих такое понятие, как NPT и SMPTE.

Пример:

Scale: -1
Range: npt=15-0

В этом диапазоне и 15, и 0 закрыты.

Уменьшающийся интервал диапазона без соответствующего отрицательного значения в заголовке Scale недопустим.

Синтаксис поля общего заголовка Range в RTSP 2.0

Range = "Range" HCOLON ranges-spec
ranges-spec = npt-range / utc-range / smpte-range / range-ext
range-ext = extension-format [EQUAL range-value]
range-value = 1*(rtsp-unreserved / quoted-string / ":" )

Ссылки

Скачать оригинальный документ на английском языке RFC 7826 — Real-Time Streaming Protocol Version 2.0

Читать полную версию документа на русском языке RFC 7826 — Потоковый протокол в реальном времени (RTSP), версия 2.0

Ссылка на синтаксис