Об этом проекте
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 года.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.