О СРТ | Особенности | Начало работы | Инструкции по сборке | Примеры приложений и инструментов | Внести вклад | Лицензия | Релизы
Secure Reliable Transport (SRT) — это транспортный протокол для потоковой передачи видео и аудио в реальном времени со сверхмалой (долей секунды) задержкой, а также для массовой передачи общих данных 1 . SRT доступна как технология с открытым исходным кодом, код которой находится на GitHub, опубликован в Интернете и растущее сообщество пользователей SRT.
SRT применяется к конечным точкам добавления и распространения как часть рабочего процесса видеопотока, чтобы всегда обеспечивать наилучшее качество видео и минимальную задержку.
Безопасный | Шифрует видеопотоки |
Надежный | Восстановление после серьезной потери пакетов |
Транспорт | Динамически адаптируется к изменяющимся условиям сети. |
В конфигурациях потокового вещания протокол SRT поддерживает постоянную сквозную задержку. Это позволяет воссоздать характеристики сигнала живого потока на стороне приемника, уменьшая необходимость в буферизации. Поскольку пакеты передаются от источника к месту назначения, SRT обнаруживает и адаптируется к условиям сети в реальном времени между двумя конечными точками. Это помогает компенсировать дрожание и колебания пропускной способности из-за перегрузки в шумных сетях.
SRT реализует шифрование AES для защиты полезной нагрузки медиапотоков и предлагает различные механизмы восстановления после ошибок для минимизации потери пакетов, типичной для интернет-соединений, основным методом которых является автоматический повторный запрос (ARQ). При использовании ARQ, когда получатель обнаруживает, что пакет отсутствует, он отправляет отправителю предупреждение с запросом на повторную передачу этого недостающего пакета. Протокол также поддерживает прямое исправление ошибок (FEC) и соединение соединений, которое обеспечивает непрерывную защиту потока и бесперебойное переключение при сбое.
Чтобы узнать больше о протоколе, подпишитесь на блог Innovation Labs на странице
Чтобы задать вопрос, присоединяйтесь к беседе на канале #development на
? Нажмите кнопку ►, чтобы развернуть описание функции.
Независимо от того, насколько ненадежна ваша сеть, SRT может восстановиться после серьезной потери пакетов и джиттера, гарантируя целостность и качество ваших видеопотоков.
Исправление ошибок потока SRT можно настроить в соответствии с условиями развертывания пользователя. Используя развитие IP-коммуникаций в реальном времени для расширения традиционных методов восстановления сетевых ошибок, SRT обеспечивает передачу мультимедиа со значительно меньшей задержкой, чем TCP/IP, обеспечивая при этом скорость передачи UDP со значительно повышенной надежностью.
В отличие от некоторых других протоколов потоковой передачи, которые поддерживают только определенные форматы видео и аудио, SRT не зависит от полезной нагрузки. Поскольку SRT работает на уровне сетевого транспорта, действуя как оболочка вашего контента, он может транспортировать любой тип видеоформата, кодека, разрешения или частоты кадров.
Процесс установления связи, используемый SRT, поддерживает исходящие соединения без потенциальных рисков и опасностей, связанных с открытием постоянных внешних портов в брандмауэре, тем самым поддерживая корпоративную политику безопасности локальной сети и сводя к минимуму необходимость вмешательства ИТ-специалистов.
Используя 128/192/256-битное шифрование AES, которому доверяют правительства и организации по всему миру, SRT гарантирует сквозную защиту ценного контента от его передачи до распространения, чтобы никакие посторонние лица не могли его прослушать.
В SRT 1.4 представлен API-интерфейс фильтра пакетов . Этот механизм позволяет выполнять пользовательскую обработку сетевых пакетов на стороне отправителя перед их отправкой и на стороне получателя после получения из сети. API позволяет пользователям писать свои собственные плагины, тем самым еще больше расширяя возможности протокола SRT за счет всевозможных фильтров пакетов. Пользователи могут манипулировать полученными данными фильтра пакетов любым способом, например, для специального шифрования, проверки пакетов или доступа к данным перед их отправкой.
Первый плагин, созданный в качестве примера того, чего можно достичь с помощью API-интерфейса фильтра пакетов, предназначен для прямого исправления ошибок (FEC), который в определенных случаях использования может обеспечивать немного меньшую задержку, чем автоматический повторный запрос (ARQ). Этот плагин поддерживает три разных режима:
Только ARQ – повторно передает потерянные пакеты,
Только FEC — обеспечивает накладные расходы, необходимые для восстановления FEC на стороне получателя.
FEC и ARQ – повторно передает потерянные пакеты, которые FEC не может восстановить.
Подобно SMPTE-2022-7 в управляемых сетях, Connection Bonding добавляет непрерывную защиту потока и бесперебойное переключение при сбое в протокол SRT. Эта технология опирается на более чем один путь IP-сети, чтобы предотвратить прерывание потоков видео в реальном времени в случае перегрузки или сбоев в сети, обеспечивая непрерывность обслуживания.
Это достигается с помощью групп сокетов, представленных в SRT v1.5. Общая концепция групп сокетов означает наличие группы, содержащей несколько сокетов, где к группе применяется одна операция для отправки одного сигнала данных. Отдельные розетки внутри группы возьмут на себя эту операцию и сделают все необходимое для доставки сигнала приемнику.
Поддерживаются два режима:
Широковещательная рассылка. В режиме широковещательной рассылки данные пересылаются избыточно по всем ссылкам-членам группы. Если один из каналов выходит из строя или испытывает дрожание сети и/или потерю пакетов, недостающие данные будут получены по другому каналу в группе. Избыточные пакеты просто отбрасываются на стороне получателя.
Основной/резервный — в режиме «Основной/резервный» для передачи данных одновременно используется только один (основной) канал, в то время как другие (резервные) соединения находятся в режиме ожидания, чтобы обеспечить продолжение передачи в случае сбоя основного канала. Целью режима «Основной/Резервный» является выявление потенциального разрыва канала до того, как он произойдет, обеспечивая таким образом временной интервал, в течение которого можно плавно переключиться на один из резервных каналов.
Контроль доступа позволяет вышестоящему приложению назначать идентификатор потока отдельным потокам SRT. Используя уникальный идентификатор потока, автоматически сгенерированный или настроенный, вышестоящее приложение может отправлять несколько потоков SRT на один IP-адрес и порт UDP. Идентификаторы потоков затем могут использоваться получателем для идентификации и различения потоков приема, применения методов доступа к паролю пользователя и в некоторых случаях даже применения автоматизации на основе именования идентификатора потока. Например, вклад может быть отправлен в рабочий процесс производства видео, а мониторинг — в службу мониторинга.
Для вещательных компаний идентификатор потока является ключом к замене RTMP для приема видеопотоков, особенно контента HEVC/H.265, в облачную службу или CDN, которые имеют один IP-сокет (адрес + порт), открытый для входящего видео.
API СРТ | Интернет-проект IETF | Примеры приложений |
Справочная документация по API библиотеки SRT | Интернет-проект протокола SRT | Инструкции по использованию тестовых приложений ( srt-live-transmit , srt-file-transmit и т.д.) |
Технический обзор SRT | Руководство по развертыванию SRT | Поваренная книга SRT |
Технический обзор раннего проекта (предшественник Интернет-проекта) | Полный обзор протокола с рекомендациями по развертыванию. | Замечания по разработке протокола SRT |
Блог инновационных лабораторий | YouTube-канал SRTLab | Слабый |
Блог на Medium с техническими статьями, связанными с SRT. | Технический канал на YouTube с полезными видео | Каналы Slack, чтобы получать последние обновления и задавать вопросы. Присоединяйтесь к SRT Alliance в Slack |
Почему СТО? - Краткая история и обоснование СТО Марка Цимонтковски.
RTMP против SRT: сравнение задержки и максимальной пропускной способности.
Документация на GitHub с документами SRT API, описаниями функций и т. д.
Интернет-проект протокола SRT: Datatracker | Последняя версия | Последняя рабочая копия | Репозиторий GitHub
Linux (Ubuntu/CentOS) | Окна | macOS | iOS | Андроид | Менеджеры пакетов
Компилятор, совместимый с C++03 или выше.
CMake 2.8.12 или более поздней версии в качестве системы сборки.
OpenSSL 1.1, чтобы включить шифрование, в противном случае создайте с -DENABLE_ENCRYPTION=OFF
.
Многопоточность обеспечивается одним из следующих способов:
C++11: стандартная библиотека ( std
с помощью опции -DENABLE_STDCXX_SYNC=ON
CMake),
C++03: Pthreads (для POSIX-систем встроена, для Windows есть портированная библиотека).
Tcl 8.5 является необязательным и используется сценарием ./configure
. В противном случае используйте CMake напрямую.
Подробное описание системы сборки и ее параметров можно найти в документе «Параметры сборки SRT».
В текущем репозитории представлены примеры приложений и примеры кода, демонстрирующие использование API библиотеки SRT. Среди них — srt-live-transmit
, srt-file-transmit
и другие приложения. Соответствующую документацию можно найти здесь. Обратите внимание, что все примеры предоставлены в учебных целях и не должны использоваться в производственной среде.
Утилита srt-xtransmit
активно используется для внутреннего тестирования и оценки производительности. Среди других функций он поддерживает генерацию фиктивной полезной нагрузки, маршрутизацию трафика и связывание соединений. Дополнительную информацию можно найти в самом репозитории srt-xtransmit
.
Инструменты Python, которые могут быть полезны во время разработки:
srt-stats-plotting
— скрипт, предназначенный для построения графиков на основе статистики SRT .csv
.
lib-tcpdump-processing
— библиотека, предназначенная для обработки файлов трассировки .pcap(ng)
tcpdump или Wireshark и извлечения интересующих пакетов SRT для дальнейшего анализа.
lib-srt-utils
— библиотека Python, содержащая вспомогательный код для запуска тестов SRT на основе конфигурации эксперимента.
Любой может внести свой вклад. Если вы решили принять участие, пожалуйста, найдите время и ознакомьтесь с правилами:
Руководство разработчика SRT
Содействие
Отчеты о проблемах
Для получения информации о том, как внести свой вклад в Интернет-проект или отправить вопросы, перейдите в следующий репозиторий. Репозиторий для участия в SRT CookBook можно найти здесь.
Внося код в проект SRT, вы соглашаетесь лицензировать свой вклад по лицензии MPLv2.0.
Примечания к выпуску
Управление версиями SRT
Термин «прямая потоковая передача» относится к непрерывной передаче данных (MPEG-TS или эквивалент) с управлением задержкой. Потоковая передача в реальном времени на основе сегментации и передачи файлов, как в протоколе HTTP Live Streaming (HLS) (как описано в RFC8216), не является частью этого варианта использования. В этом случае следует рассмотреть возможность передачи файлов в режиме сообщения или в режиме буфера. Подробности см. в разделе 7. Лучшие практики и советы по настройке передачи данных через SRT интернет-проекта. Обратите внимание, что SRT не зависит от содержимого, а это означает, что через его полезную нагрузку можно передавать данные любого типа. ↩