Безопасный надежный транспорт - 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 | PP | О | KK | р | Номер сообщения | |||||||||||||||||||||||||||
8 | 64 | Отметка времени | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор целевого сокета | |||||||||||||||||||||||||||||||
... | ... | Данные |
Поля в заголовке следующие:
- Порядковый номер пакета (31 бит)
- PP (2 бита): флаг позиции пакета
- О (1 бит): флаг заказа
- KK (2 бита): флаг шифрования на основе ключа
- р (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 бит)
- Контрольное информационное поле (переменная длина)
История
Безопасный надежный транспорт - это протокол передачи видео с открытым исходным кодом, первоначально разработанный Haivision. Согласно с SRT Альянс, организация, которая продвигает технологию, оптимизирует производительность потоковой передачи. Это помогает минимизировать влияние джиттера и изменений полосы пропускания, а механизмы исправления ошибок помогают минимизировать потерю пакетов. SRT поддерживает сквозное шифрование с AES.[3] При выполнении повторных передач SRT пытается повторно передать пакеты только в течение ограниченного периода времени в зависимости от задержки, настроенной приложением.[4]
По словам Марка Симонтовски, архитектора SRT, помимо отправки транспортных потоков MPEG через общедоступный Интернет, он также используется для подключения к Интернету вещей, обмена метаданными, в качестве протокола связи, а также для доставки несжатых данных.[5]
Эталонная реализация протокола изначально была опубликована под Стандартная общественная лицензия ограниченного применения версия 2.1,[6] но был перелицензирован под Общественная лицензия Mozilla 22 марта 2018 г.[7]
SRT поддерживается в свободное программное обеспечение мультимедийные рамки GStreamer, FFmpeg, OBS Studio И в VLC бесплатный программный медиаплеер.[4][8]
В Протокол передачи данных на основе UDP (UDT) был базой для проекта SRT.[9]API SRT C в значительной степени основан на UDT API.[10]
SRT был разработан для передачи видео в реальном времени с малой задержкой.[9][3]
Haivision выпустила протокол SRT и эталонную реализацию как открытый исходный код на конференции 2017 г. NAB Показать.[9]
В марте 2020 года индивидуальный Интернет-проект, draft-sharabayko-mops-srt,[11] был передан на рассмотрение рабочей группе Media OPerationS (MOPS) Инженерная группа Интернета.
SRT Альянс
SRT Альянс это организация, члены которой разрабатывают, используют и продвигают Безопасный надежный транспорт протокол и программное обеспечение на его основе. Членами-учредителями альянса являются 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]
- Необязательный Прямая коррекция ошибок механизм.
Дополнительную и более подробную документацию можно найти в Документация по исходному коду.
Заметки
- ^ а б c Биты отсортированы от наиболее значимого до наименее значимого; битовое смещение 0 - это самый старший бит первого октета. Октеты передаются в сетевой заказ. Порядок передачи битов зависит от среды.
использованная литература
- ^ «UDT: устранение узких мест при передаче данных». udt.sourceforge.io. Получено 2020-08-27.
- ^ "draft-sharabayko-mops-srt-00 - Протокол СТО". datatracker.ietf.org. Получено 2020-08-27.
- ^ а б Haivision. «Безопасный, надежный, транспортный». GitHub.
- ^ а б Оливье Крет (16 февраля 2018 г.). "SRT в GStreamer".
- ^ «Он объединяет все воедино: интервью с Марком Цимонтовски, евангелистом SRT». Блог Medialooks. 5 ноября 2019.
- ^ Майкл Ларабель (24 апреля 2017 г.). «Протокол передачи видео SRT с открытым исходным кодом». Фороникс.
- ^ Роман рнди (22 марта 2018). "Изменить лицензию на MPLv2.0 · Haivision / srt @ a75d4c4". GitHub.
- ^ Оливье Крет (июнь 2018 г.). «Безопасное видео достигает совершеннолетия». Журнал Linux Format (237).
- ^ а б c Марк Цимонтовски.«Почему мы создали SRT и разница между SRT и UDT».
- ^ "Документы API Haivision srt"
- ^ Шарабайко М.П .; Шарабайко, М.А. (2020). Протокол SRT. IETF. I-D draft-sharabayko-mops-srt. Получено 26 марта 2020.
- ^ «Microsoft присоединяется к проекту потоковой передачи с открытым исходным кодом SRT». Вещательный мост. 17 сентября 2018.
- ^ «Рекомендации по контролю доступа SRT». 7 ноября 2019.