Медиатранспортная библиотека (MTL) — это программное решение, предназначенное для передачи и приема мультимедийных данных с высокой пропускной способностью и малой задержкой. Он оснащен эффективным стеком UDP LibOS в пользовательском пространстве, специально созданным для передачи мультимедиа, и оснащен встроенной реализацией, совместимой со стандартом SMPTE ST 2110, для профессиональной мультимедиа через управляемые IP-сети.
Библиотека медиатранспорта решает строгие проблемы синхронизации при транспортировке медиапотоков, соответствующих стандарту ST2110, с использованием библиотеки программного обеспечения и через IP-сети. Вместо специализированного оборудования эта библиотека использует существующие общедоступные платформы ЦП с обычными сетевыми адаптерами, которые включают ограничение скорости для решения строгих задач синхронизации в стандарте SMPTE ST 2110.
Если вы считаете наш проект ценным, поставьте ему звездочку. Ваша поддержка помогает нам расти и охватывать больше людей в сообществе открытого исходного кода. Каждая звезда имеет значение и очень ценится.
Поддерживаемый серверный путь к данным: DPDK PMD, собственный сокет ядра и AF_XDP с фильтром eBPF.
Стек UDP LibOS в пользовательском пространстве имеет API, совместимый с сокетами POSIX.
Некорневой запуск.
Многопроцессная обработка, позволяющая использовать до 8 сетевых карт на процесс.
Поддержка виртуализации SR-IOV.
Встроенный протокол PTP с аппаратной разгрузкой временных меток.
Плагин FFMPEG, плагин OBS (Open Broadcaster Software) и поддержка Intel® Media SDK.
В дополнение к собственному API C/C++ он также предлагает привязки для Python и Rust.
Узкий и широкий шаг. См. страницу соответствия для узкого отчета ST2110 о нашем программном решении.
СТ2110-10, СТ2110-20, СТ2110-21, СТ2110-30, СТ2110-40, СТ2022-7.
1080p, 1080i, 720p, 4k, 8k и другие.
ФПС: 120, 119,88, 100, 60, 59,94, 50, 30, 29,97, 25, 24, 23,98.
Поддерживаются все видеоформаты, перечисленные в ST2110-20, включая YUV 4:2:2 10 бит и другие.
Преобразователь цветового пространства SIMD между прямым и прямым порядком байтов.
ST2110-22 с подключаемым интерфейсом кодера/декодера.
ST2022-6 через транзитный интерфейс RTP.
ST2110-20 Анализатор соответствия времени приема с аппаратной разгрузкой метки времени приема.
Библиотека транспорта мультимедиа использует DPDK (комплект разработки плоскости данных) EAL (уровень абстракции среды, включая управление памятью и ядром) для реализации высокоэффективного решения для транспортировки мультимедиа в реальном времени и с малой задержкой. Этот программный стек передачи мультимедиа обеспечивает развертывание в периферийных и облачных средах с использованием COTS-оборудования.
Библиотека включает в себя внутренний уровень виртуального пути данных, предназначенный для абстрагирования различных реализаций сетевых карт и предоставления унифицированного интерфейса передачи пакетов/приема для верхнего сетевого уровня. В настоящее время он поддерживает три типа сетевых карт:
Драйверы режима опроса DPDK (PMD): эти драйверы полностью обходят сетевой стек ядра, используя драйвер режима опроса. Этот подход обеспечивает прямой доступ к оборудованию, устраняет тяжелые переключения контекста пользователя/ядра и позволяет избежать переключений IRQ (запроса прерывания). В результате модули DPDK PMD обеспечивают сверхнизкую задержку и высокую пропускную способность, что делает их идеальными для требовательных сетевых приложений.
Собственный стек сетевых сокетов ядра Linux: этот вариант поддерживает весь спектр экосистем ядра.
AF_XDP с фильтром eBPF: AF_XDP представляет собой значительное усовершенствование сетевого стека Linux, обеспечивающее баланс между чистой производительностью и интеграцией с сетевой экосистемой ядра. Это особенно ценно в сценариях, где производительность имеет решающее значение, но решение полного обхода ядра, такое как DPDK, невозможно или нежелательно.
Библиотека представляет асинхронный планировщик на основе тасклетов, который оптимизирует использование ресурсов ЦП, облегчая интеграцию с различными блоками обработки пакетов и ускорителями.
Кроме того, модуль синхронизации пакетов предлагает поддержку различных алгоритмов синхронизации, включая RL (ограничение скорости), который частично разгружается аппаратно, и TSC (счетчик временных меток), который полностью основан на программном обеспечении.
MTL также включает в себя SIMD (одну инструкцию, несколько данных) для CSC (преобразование формата цветового пространства) с прямым и прямым порядком байтов, DMA (прямой доступ к памяти) и интерфейсы плагинов, позволяющие создать комплексную экосистему видеопроизводства.
Подробную информацию о проекте можно найти в руководстве по проектированию.
MTL предлагает универсальную поддержку Ethernet благодаря совместимости с DPDK PMD, сокетом ядра и бэкэндами AF_XDP.
Для поддержки DPDK PMD вы можете обратиться к сайту DPDK PMD https://doc.dpdk.org/guides/nics/, где представлен полный список поддерживаемого оборудования Ethernet.
В случаях, когда ваш сетевой адаптер не поддерживается DPDK, MTL предоставляет запасной вариант с поддержкой транспорта сокетов ядра (Linux).
Однако обратите внимание, что наша ежедневная разработка и проверка в основном проводятся для серии Intel E810 и AWS ENA, поэтому мы не можем гарантировать состояние других сетевых карт (NIC).
Важно отметить, что узкий темп передачи поддерживается только для серии Intel E810 вместе с DPDK PMD из-за функции ограничения скорости. Все остальные типы использования должны использовать TSC (счетчик временных меток) в качестве источника темпа, который может обеспечить только широкий темп.
Инструкции по сборке DPDK, библиотеки и примера приложения см. в руководстве по сборке.
Для Windows обратитесь к руководству по сборке Win для получения инструкций по сборке.
Инструкции по настройке и запуску демонстрационного конвейерного приложения на основе бэкэнда DPDK PMD см. в руководстве по запуску.
Для Windows см. руководство по запуску Windows.
Кроме того, обратитесь к руководству по виртуальным машинам и руководству по виртуальным машинам Windows для получения инструкций по настройке гостевых виртуальных машин Linux и Windows на основе сквозной передачи VF.
Для AWS (облачной среды) обратитесь к руководству по запуску AWS, чтобы получить инструкции по настройке и запуску демо-версии.
Чтобы запустить эту библиотеку в сетевом стеке ядра со встроенным драйвером сетевой карты ядра, следуйте инструкциям, приведенным в руководстве по сокетам ядра.
Чтобы быстро разработать приложения на основе библиотеки медиатранспорта, обратитесь к ## 6. ST2110 API
из руководства по проектированию.
MTL поддерживает POSIX-совместимый стек UDP пользовательского пространства с предварительной загрузкой LD, который работает непосредственно в контексте текущего процесса. Это усовершенствование значительно повышает производительность за счет устранения затрат на межъядерные сообщения, обычно связанных с архитектурами клиентских служб, используемыми в других стеках UDP в пользовательском пространстве. Стек MTL позволяет функциям передачи и приема NIC выполняться непосредственно из API sendto/recvfrom, устраняя необходимость в межъядерных вызовах и поддерживая привязку данных (LLC) к потребителю UDP, тем самым оптимизируя производительность.
Чтобы узнать, как использовать стек UDP LibOS, обратитесь к документу udp.
MHV'23: стек передачи мультимедиа в реальном времени на основе коммерческого готового оборудования. https://dl.acm.org/doi/10.1145/3588444.3591002
Технический документ: Библиотека с открытым исходным кодом обеспечивает передачу мультимедиа в реальном времени по IP-сетям. https://www.intel.com/content/www/us/en/content-details/786203/open-source-library-enables-real-time-media-over-ip-networks.html
Саммит DPDK Userspace Summit 2022: стек медиатранспорта в реальном времени и с низкой задержкой на основе DPDK. https://www.youtube.com/watch?v=fiiOvHezpBs
Мы приветствуем вклад сообщества в проект Media Transport Library. Если у вас есть какие-либо идеи или проблемы, поделитесь ими с нами, используя вопросы GitHub или открыв запрос на включение.
Прежде чем открыть запрос на включение, выполните следующие действия:
Создайте форк этого репозитория в своем собственном пространстве.
Создайте новую ветку для ваших изменений.
Внесите изменения и зафиксируйте их.
Отправьте изменения в свой раздвоенный репозиторий.
Откройте запрос на включение в основной репозиторий.
Если вы не хотите, чтобы основная ветка автоматически синхронизировалась с восходящей веткой, перейдите в Actions
и отключите рабочий процесс Upstream Sync
.
Для проверки стиля мы используем действие супер-линтер.
Для кодирования C/C++ вы можете запустить следующую команду, чтобы быстро исправить стиль:
./format-coding.sh
Для Python используется форматтер black
и isort
.
sudo pip установить черный sudo pip установить isort sudo pip установить pylint
черный питон/ сортировать питон/ найти python/example/ -name "*.py" -exec pylint {} ;
Для других языков проверьте следующий пример команды внутри контейнера Docker:
# super-linterdocker run -it --rm -v "$PWD":/opt/ --entrypoint /bin/bash github/super-lintercd /opt/# echo "shfmt check"find ./ -type f -name " *.sh" -exec shfmt -w {} +# echo "shell check"find ./ -name "*.sh" -execshellcheck {} ;# Hadolint checkhadolint docker/ubuntu.dockerfile# actionlint checkactionlint# markdownlint checkfind ./ -name "*.md" -exec markdownlint {} -c .markdown-lint.yml ;# find ./ -name "*.md" -exec markdownlint { } --fix -c .markdown-lint.yml ;# textlintfind ./ -name "*.md" -exec textlint {} ;# find ./ -name "*.md" -exec textlint {} --fix ;