Безопасный надежный транспорт
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Набор интернет-протоколов |
---|
Прикладной уровень |
Транспортный уровень |
Интернет-слой |
Слой связи |
Secure Reliable Transport ( SRT ) — это протокол передачи видео с открытым исходным кодом, который использует транспортный протокол UDP . Спецификация протокола SRT доступна в виде проекта IETF интернет - . [1]
Обзор
[ редактировать ]SRT обеспечивает соединение и контроль, надежную передачу, аналогичную TCP ; однако это происходит на уровне приложений , используя протокол UDP в качестве базового транспортного уровня. Он поддерживает восстановление пакетов, сохраняя при этом низкую задержку (по умолчанию: 120 мс). SRT также поддерживает шифрование с использованием AES .
Протокол был получен из проекта UDT , [2] который был разработан для быстрой передачи файлов. Он обеспечил механизм надежности за счет использования аналогичных методов подключения, порядковых номеров, подтверждений и повторной передачи потерянных пакетов. Он использует выборочную и немедленную (на основе NAK) повторную передачу.
Помимо этого, SRT добавила несколько функций для поддержки режима прямой трансляции:
- Контролируемая задержка с передачей времени источника (доставка пакетов на основе временных меток)
- Удобный контроль скорости отправителя
- Условное «слишком позднее» отбрасывание пакетов (предотвращает блокировку начала строки, вызванную потерей пакета, который не был восстановлен вовремя)
- Повторная передача пакетов Eager (периодический NAK-отчет)
Заголовок пакета
[ редактировать ]Пакеты SRT создаются на уровне приложений и передаются на транспортный уровень для доставки. Каждая единица мультимедийных или управляющих данных SRT, созданная приложением, начинается с заголовка пакета SRT. [1]
Смещения | Октет | 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 | Ф | Значение поля зависит от типа пакета | ||||||||||||||||||||||||||||||
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 | ПП | ТО | КК | Р | Номер сообщения | |||||||||||||||||||||||||||
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 через общедоступный Интернет, он также используется для подключения IoT, обмена метаданными, в качестве протокола связи, а также для доставки несжатых данных. [5]
Эталонная реализация протокола изначально была опубликована под лицензией Lesser General Public License версии 2.1. [6] но было повторно лицензировано в соответствии с Общественной лицензией Mozilla . 22 марта 2018 года [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 года индивидуальный Интернет-проект, проект-шарабайко-швабра-срт, [1] был представлен на рассмотрение рабочей группы Media OPerationS (MOPS) Internet Engineering Task Force .
СРТ Альянс
[ редактировать ]SRT Alliance — организация, члены которой разрабатывают, используют и продвигают протокол Secure Reliable Transport и программное обеспечение на его основе. Членами-учредителями альянса являются Haivision и Wowza Streaming Engine . [11]
Реализации
[ редактировать ]В настоящее время существует одна доступная реализация — библиотека SRT с открытым исходным кодом.
API языка C в основном основан на предыдущем API UDT с дальнейшими изменениями по мере добавления новых функций. API очень похож на TCP.
Фактически SRT предлагает три режима работы, первые два из которых были заимствованы из UDT:
- Режим файлового потока: как TCP
- Режим файловых сообщений: аналогичен протоколу SCTP – отправка блоков данных с четко определенными границами.
- Режим Live: данные должны отправляться небольшими пакетами (обычно до 1316 байт, если передаваемый поток MPEG-TS ) с уже соответствующими временными интервалами между ними. Затем на стороне получателя доставляются одни и те же отдельные пакеты с одинаковыми интервалами времени между ними.
Библиотека SRT также предлагает следующие функции:
- Шифрование с использованием предварительного ключа. Поддержка шифрования изначально обеспечивалась OpenSSL, теперь в качестве альтернативы можно использовать Nettle (GNU TLS) или mbedTLS.
- SRT Access Control (также известный как «StreamID») может использоваться приложениями для идентификации ресурсов и использования метода доступа с использованием пароля пользователя при использовании одного и того же номера сервисного порта для различных целей. [12]
- Дополнительный механизм прямого исправления ошибок .
Дальнейшую и более подробную документацию можно найти в документации по исходному коду .
См. также
[ редактировать ]- Надежный Internet Stream Transport , предназначенный для заполнения пробела на рынке профессиональных протоколов в отличие от «просьюмерского» SRT. [13]
Примечания
[ редактировать ]- ^ Перейти обратно: а б с Биты упорядочены от наиболее значимого к наименее значимому; Смещение бита 0 — это старший бит первого октета. Октеты передаются в сетевом порядке . Порядок передачи битов зависит от среды.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Шарабайко, депутат; Шарабайко, М.А. (2021). Протокол СТО . IETF . ID черновик-шарабайко-srt-01 . Проверено 20 октября 2023 г.
- ^ «UDT: устранение узких мест при передаче данных» . udt.sourceforge.io . Проверено 27 августа 2020 г.
- ^ Перейти обратно: а б Haivision (26 сентября 2021 г.). «Безопасный, надежный, транспортный» . Гитхаб.
- ^ Перейти обратно: а б Оливье Крет (16 февраля 2018 г.). «SRT в GStreamer» .
- ^ «Это склеивает все воедино: интервью с Марком Цимонтковски, евангелистом SRT» . Блог Medialooks . 5 ноября 2019 г.
- ^ Майкл Ларабель (24 апреля 2017 г.). «Протокол передачи видео SRT с открытым исходным кодом» . Фороникс.
- ^ Роман Рнди (22 марта 2018 г.). «Изменить лицензию на MPLv2.0 · Haivision/srt@a75d4c4» . Гитхаб.
- ^ Оливье Крет (июнь 2018 г.). «Безопасное видео достигает зрелости» . Журнал «Linux Format» . № 237.
- ^ Перейти обратно: а б с Марк Цимонтковски. «Почему мы создали SRT и разница между SRT и UDT» .
- ^ "Документация по API Haivision srt"
- ^ «Microsoft присоединяется к проекту потоковой передачи с открытым исходным кодом SRT» . Радиовещательный мост . 17 сентября 2018 г.
- ^ «Руководство SRT по контролю доступа» . Гитхаб . 7 ноября 2019 г.
- ^ «5 причин, по которым вам следует выбрать RIST, а не SRT» . Форум РИСТ . 27 мая 2020 г. Проверено 4 декабря 2021 г.