Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Набор интернет-протоколов |
---|
Уровень приложения |
Транспортный уровень |
|
Интернет-уровень |
|
Связующий слой |
|
Secure Reliable Transport ( SRT ) - это транспортный протокол видео с открытым исходным кодом, в котором используется транспортный протокол UDP .
Обзор [ править ]
SRT обеспечивает соединение и управление, надежную передачу, аналогичную TCP , однако делает это на прикладном уровне , используя протокол UDP в качестве нижележащего транспортного уровня. Он поддерживает восстановление пакетов при сохранении низкой задержки (по умолчанию: 120 мс). SRT также поддерживает шифрование с использованием AES .
Протокол был получен из проекта UDT , [1] который был разработан для быстрой передачи файлов. Он обеспечивает механизм надежности за счет использования аналогичных методов для соединения, порядковых номеров, подтверждений и повторной передачи потерянных пакетов. Он использует выборочную и немедленную (на основе NAK) повторную передачу.
В дополнение к этому SRT добавила несколько функций для поддержки режима прямой трансляции:
- Контролируемая задержка с передачей времени от источника (доставка пакетов на основе временных меток)
- Удобный контроль скорости отправителя
- Условное «слишком позднее» отбрасывание пакета (предотвращает блокировку заголовка линии, вызванную потерянным пакетом, который не был восстановлен вовремя)
- Неторопливая повторная передача пакетов (периодический NAK-отчет)
Заголовок пакета [ править ]
Пакеты SRT создаются на уровне приложений и передаются транспортному уровню для доставки. Каждая единица носителя SRT или управляющих данных, созданная приложением, начинается с заголовка пакета SRT. [2]
Смещения | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Бит [а] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 | 26 год | 27 | 28 год | 29 | 30 | 31 год |
0 | 0 | F | Значение поля зависит от типа пакета | ||||||||||||||||||||||||||||||
4 | 32 | Значение поля зависит от типа пакета | |||||||||||||||||||||||||||||||
8 | 64 | Отметка времени | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор целевого сокета | |||||||||||||||||||||||||||||||
... | ... | Содержимое пакета (зависит от типа пакета) |
Пакет данных [ править ]
Смещения | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Бит [а] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 | 26 год | 27 | 28 год | 29 | 30 | 31 год |
0 | 0 | 0 | Порядковый номер пакета | ||||||||||||||||||||||||||||||
4 | 32 | ПП | O | KK | р | Номер сообщения | |||||||||||||||||||||||||||
8 | 64 | Отметка времени | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор целевого сокета | |||||||||||||||||||||||||||||||
... | ... | Данные |
Поля в заголовке следующие:
- Порядковый номер пакета (31 бит)
- PP (2 бита): флаг позиции пакета
- O (1 бит): флаг заказа
- KK (2 бита): флаг шифрования на основе ключа
- R (1 бит): флаг повторно переданного пакета
- Номер сообщения (26 бит)
- Данные (переменной длины)
Контрольный пакет [ править ]
Смещения | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Бит [а] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 | 26 год | 27 | 28 год | 29 | 30 | 31 год |
0 | 0 | 1 | Тип управления | Подтип | |||||||||||||||||||||||||||||
4 | 32 | Информация по типу | |||||||||||||||||||||||||||||||
8 | 64 | Отметка времени | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор целевого сокета | |||||||||||||||||||||||||||||||
... | ... | Контрольное информационное поле (CIF) |
Поля в заголовке следующие:
- Тип управления (15 бит): Тип пакета управления
- Подтип (16 бит)
- Информация о типе (32 бита)
- Поле управляющей информации (переменной длины)
История [ править ]
Secure Reliable Transport - это протокол передачи видео с открытым исходным кодом, изначально разработанный Haivision. По данным SRT Alliance , организации, продвигающей эту технологию, она оптимизирует производительность потоковой передачи. Это помогает минимизировать влияние джиттера и изменений полосы пропускания, а механизмы исправления ошибок помогают минимизировать потерю пакетов. SRT поддерживает сквозное шифрование с помощью AES. [3] При выполнении повторных передач SRT пытается повторно передать пакеты только в течение ограниченного периода времени в зависимости от задержки, настроенной приложением. [4]
По словам Марка Цимонтковски, архитектора SRT, помимо отправки транспортных потоков MPEG через общедоступный Интернет, он также используется для подключения к Интернету вещей, обмена метаданными, в качестве протокола связи, а также для доставки несжатых данных. [5]
Эталонная реализация протокола первоначально была опубликована под Стандартной общественной лицензией ограниченного применения версии 2.1, [6], но 22 марта 2018 года была повторно лицензирована согласно Общей лицензии Mozilla . [7]
SRT поддерживается в бесплатных мультимедийных фреймворках GStreamer , FFmpeg , OBS Studio и в бесплатном медиаплеере VLC . [4] [8]
Проект протокола передачи данных (UDT) на основе UDP стал основой для проекта SRT. [9] API SRT C в значительной степени основан на UDT API [10]
SRT был разработан для передачи видео в реальном времени с малой задержкой. [9] [3]
Haivision представила протокол SRT и эталонную реализацию как открытый исходный код на выставке NAB Show 2017 . [9]
В марте 2020 года индивидуальный Интернет-проект, draft-sharabayko-mops-srt, [11] был представлен на рассмотрение рабочей группе Media OPerationS (MOPS) Инженерной группы Интернета .
SRT Alliance [ править ]
SRT Alliance - это организация, члены которой разрабатывают, используют и продвигают протокол Secure Reliable Transport и программное обеспечение на его основе. Членами-учредителями альянса являются Haivision и Wowza . [12]
Реализации [ править ]
В настоящее время доступна одна реализация - библиотека SRT с открытым исходным кодом.
API языка C в основном основан на предыдущем API UDT с дальнейшими изменениями по мере добавления новых функций. API очень похож на API TCP.
SRT предлагает фактически три режима работы, первые два из которых были заимствованы из UDT:
- Режим файлового потока: как TCP
- Режим файла-сообщения: аналогичен протоколу SCTP - отправка блоков данных с четко определенными границами
- Живой режим: данные должны отправляться небольшими пакетами (обычно до 1316 байт, если передаваемый поток - MPEG-TS ) с уже соответствующими временными интервалами между ними. Затем на стороне получателя доставляются одни и те же отдельные пакеты с одинаковыми временными интервалами между ними.
Библиотека SRT также предлагает следующие функции:
- Шифрование с использованием предварительного общего ключа. Первоначально поддержка шифрования предоставлялась OpenSSL, теперь также можно использовать Nettle (GNU TLS) или mbedTLS.
- Управление доступом SRT (также известное как «StreamID») может использоваться приложениями для идентификации ресурсов и использования метода доступа с использованием пароля пользователя при использовании одного и того же номера порта службы для различных целей. [13]
- Дополнительный механизм прямого исправления ошибок .
Дополнительную и более подробную документацию можно найти в документации по исходному коду .
См. Также [ править ]
- Надежный потоковый Интернет-транспорт , предназначенный как более надежный преемник безопасного надежного транспорта.
Заметки [ править ]
- ^ a b c Биты отсортированы от наиболее значимого до наименее значимого; битовое смещение 0 - это самый старший бит первого октета. Октеты передаются в сетевом порядке . Порядок передачи битов зависит от среды.
Ссылки [ править ]
- ^ «UDT: устранение узких мест при передаче данных» . udt.sourceforge.io . Проверено 27 августа 2020 .
- ^ "draft-sharabayko-mops-srt-00 - Протокол СТО" . datatracker.ietf.org . Проверено 27 августа 2020 .
- ^ a b Haivision. «Безопасный, надежный, транспортный» . GitHub.
- ^ a b Оливье Крет (16 февраля 2018 г.). «СТО в GStreamer» .
- ^ «Он склеивает все вместе: интервью с Марком Цимонтовски, евангелистом SRT» . Блог Medialooks . 5 ноября 2019.
- ^ Майкл Ларабель (24 апреля 2017 г.). «Протокол передачи видео SRT с открытым исходным кодом» . Фороникс.
- ^ Роман rndi (22 марта 2018). «Изменить лицензию на MPLv2.0 · Haivision / srt @ a75d4c4» . GitHub.
- ^ Оливье Крет (июнь 2018). «Безопасное видео достигает совершеннолетия» . Журнал Linux Format (237).
- ^ a b c Марк Цимонтковски. «Почему мы создали SRT и разница между SRT и UDT» .
- ^ "Документы API Haivision srt"
- ^ Sharabayko, МП; Шарабайко, М.А. (2020). Протокол SRT . IETF . ИД проект-шарабайко-швабры-ср . Проверено 26 марта 2020 года .
- ^ «Microsoft присоединяется к проекту потоковой передачи с открытым исходным кодом SRT» . Радиовещательный мост . 17 сентября 2018.
- ^ «Рекомендации по контролю доступа SRT» . 7 ноября 2019.
Внешние ссылки [ править ]
- Официальный веб-сайт
- OBS Studio
- Исходный код библиотеки SRT
- Слайды: Обзор протокола SRT - IETF 107 (рассылка)