Об этом проекте

Media Transport Library (MTL) — это открытый программный стек медиатранспорта, предназначенный для высокопроизводительной передачи и приема медиаданных по IP-сетям с малой задержкой. Он включает встроенную реализацию набора стандартов SMPTE ST 2110 для профессиональных медиаданных в управляемых IP-сетях и рассчитан на работу на стандартном коммерческом оборудовании COTS, а не на специализированных устройствах. Подход и архитектура MTL обеспечивает строгие требования к синхронизации потоков ST 2110 программными средствами, используя обычные процессорные платформы и стандартные сетевые карты с возможностями ограничения скорости. Стек опирается на уровень абстракции среды DPDK для управления памятью и ядрами и вводит виртуальный уровень серверных компонентов пути данных, который предоставляет верхним уровням единый интерфейс передачи и приема пакетов. Поддерживаются три типа серверных компонентов: - Драйверы DPDK Poll-Mode Drivers, PMD, работающие в обход сетевого стека ядра для прямого доступа к оборудованию и исключающие переключения контекста пользователь/ядро и обработку прерываний. - Собственный стек сетевых сокетов ядра Linux для совместимости с более широкой экосистемой ядра. - AF_XDP с фильтром eBPF, обеспечивающий баланс производительности и интеграции с ядром. Для оптимизации использования ЦП и интеграции с блоками обработки пакетов и ускорителями применяется асинхронный планировщик на основе tasklet. Формирование темпа передачи пакетов поддерживает несколько алгоритмов, включая RL, Rate Limit, с частичной аппаратной разгрузкой, и TSC, Timestamp Counter, полностью реализованный программно. Для преобразования цветового пространства между big-endian и little-endian используется SIMD, наряду с интерфейсами DMA и плагинов. Возможности - Серверные компоненты пути данных: DPDK PMD, собственные сокеты ядра и AF_XDP с фильтром eBPF. - Работа без прав суперпользователя. - Поддержка нескольких процессов, до 8 сетевых карт на процесс. - Поддержка виртуализации через SR-IOV. - Встроенный протокол PTP с аппаратной разгрузкой меток времени. - Плагин FFmpeg, плагин OBS, Open Broadcaster Software, и поддержка Intel Media SDK. - Собственный API C/C++ вместе с привязками Python и Rust. Возможности ST 2110 - Узкий и широкий темп передачи; для программного решения опубликован отчет о соответствии узкому темпу. - ST 2110-10, -20, -21, -30, -40 и ST 2022-7. - Разрешения, включая 1080p, 1080i, 720p, 4K и 8K. - Частоты кадров: 120, 119.88, 100, 60, 59.94, 50, 30, 29.97, 25, 24 и 23.98. - Все видеоформаты, перечисленные в ST 2110-20, включая YUV 4:2:2 10-бит. - SIMD-преобразователь цветового пространства между big-endian и little-endian. - ST 2110-22 с интерфейсом плагинов кодера/декодера. - ST 2022-6 через интерфейс сквозной передачи RTP. - Анализатор соответствия времени приема ST 2110-20 с аппаратной разгрузкой RX-меток времени. Примечания об оборудовании Поддержка Ethernet зависит от выбранного серверного компонента. Для DPDK PMD список поддерживаемого оборудования ведется проектом DPDK. Если сетевая карта не поддерживается DPDK, в качестве резервного варианта доступна транспортировка через сокеты ядра. Проект отмечает, что ежедневная разработка и проверка сосредоточены на картах серий Intel E810 и E830, а работа на других сетевых картах не гарантируется. Узкий темп передачи TX поддерживается только на Intel E810/E830 с DPDK PMD из-за функции ограничения скорости; в других конфигурациях в качестве источника темпа необходимо использовать TSC, который обеспечивает только широкий темп. Сборка и запуск Инструкции по сборке DPDK, библиотеки и примеров приложений приведены в руководстве по сборке проекта, отдельно существует руководство по сборке для Windows. Запуск демонстрационного конвейера ST 2110 на основе серверного компонента DPDK PMD описан в руководстве по запуску; также доступны руководства для Windows, Linux и гостевых виртуальных машин Windows с сквозной передачей VF, облачных сред AWS и пути через сокеты ядра. Включено руководство по фаззингу. Разработка и участие Приложения можно разрабатывать с использованием API ST 2110, описанного в руководстве по проектированию. Репозиторий документирует рабочий процесс участия на основе форков, веток и pull request, а также предоставляет единый скрипт checkpatch, который устанавливает закрепленные версии инструментов через pre-commit, запускает проверки при коммите и проверяет все отслеживаемые файлы. Автоматическое исправление форматирования выполняется сопутствующим скриптом. Документ стандартов кодирования является справочником по правилам и местам выполнения каждой проверки. Перед открытием pull request участникам предлагается выполнять форматирование и проверки до полного отсутствия ошибок, убеждаться в успешной сборке и модульных тестах, добавлять тест самого простого уровня, способный обнаружить изменение, — модульный, интеграционный с VF или сквозной приемочный, — и использовать сообщения в стиле Conventional Commits. Статус проекта и лицензирование Проект отмечает, что исходный код и функции в основной ветке предназначены для тестирования или оценки и не готовы к промышленной эксплуатации; проверенный код помечается версиями выпусков. Проект распространяется по лицензии BSD 3-Clause и имеет значки OpenSSF Scorecard и Best Practices, а также значки CI для базовой сборки, Coverity, линтера, Trivy и проверки зависимостей. Связанные публикации включают статью MHV'23, технический документ Intel и доклад на DPDK Userspace Summit 2022 года.