Sobre o projeto
Media Transport Library (MTL) é uma pilha de transporte de mídia de código aberto e baseada em software, voltada para transmissão e recepção de dados de mídia com alta taxa de transferência e baixa latência sobre redes IP. Inclui uma implementação integrada do conjunto SMPTE ST 2110 para mídia profissional em redes IP gerenciadas, e é projetada para rodar em hardware comercial de prateleira (COTS), em vez de equipamentos especializados.
Abordagem e arquitetura
MTL atende aos requisitos rigorosos de temporização dos fluxos ST 2110 em software, aproveitando plataformas de CPU comuns e NICs convencionais com capacidades de limitação de taxa. Baseia-se na Camada de Abstração de Ambiente do DPDK para gerenciamento de memória e núcleos, e introduz uma camada de backend de caminho de dados virtual que apresenta uma interface unificada de TX/RX de pacotes para camadas superiores. Três tipos de backend são suportados:
- Drivers de Modo de Polling (PMDs) do DPDK, que contornam a pilha de rede do kernel para acesso direto ao hardware e evitam trocas de contexto usuário/kernel e manipulação de IRQ.
- Pilha nativa de sockets de rede do kernel Linux, para compatibilidade com o ecossistema mais amplo do kernel.
- AF_XDP com filtro eBPF, equilibrando desempenho com integração ao kernel.
Um agendador assíncrono baseado em tasklets é usado para otimizar o uso da CPU e integrar com unidades de processamento de pacotes e aceleradores. O pacing de pacotes suporta múltiplos algoritmos, incluindo RL (Rate Limit), que é parcialmente descarregado no hardware, e TSC (Timestamp Counter), que é totalmente baseado em software. SIMD é usado para conversão de espaço de cor big-endian/little-endian, juntamente com interfaces DMA e de plugins.
Recursos
- Backends de caminho de dados: DPDK PMD, socket nativo do kernel e AF_XDP com filtro eBPF.
- Operação sem root.
- Manipulação de múltiplos processos, com até 8 NICs por processo.
- Suporte a virtualização via SR-IOV.
- Protocolo PTP integrado com descarregamento de timestamp de hardware.
- Plugin FFmpeg, plugin OBS (Open Broadcaster Software) e suporte ao Intel Media SDK.
- API nativa C/C++ além de bindings Python e Rust.
Capacidades ST 2110
- Pacing estreito e largo, com relatório de conformidade publicado para pacing estreito na solução de software.
- ST 2110-10, -20, -21, -30, -40 e ST 2022-7.
- Resoluções incluindo 1080p, 1080i, 720p, 4K e 8K.
- Taxas de quadros: 120, 119.88, 100, 60, 59.94, 50, 30, 29.97, 25, 24 e 23.98.
- Todos os formatos de vídeo listados no ST 2110-20, incluindo YUV 4:2:2 de 10 bits.
- Conversor de espaço de cor SIMD entre big-endian e little-endian.
- ST 2110-22 com interface de plugin de codificador/decodificador.
- ST 2022-6 via interface de passagem RTP.
- Parser de conformidade de temporização RX ST 2110-20 com descarregamento de timestamp RX de hardware.
Notas de hardware
O suporte Ethernet depende do backend escolhido. Para DPDK PMD, a lista de hardware suportado é mantida pelo projeto DPDK. Se uma NIC não for suportada pelo DPDK, o transporte por socket de kernel está disponível como alternativa. O projeto afirma que o desenvolvimento e a validação diários focam nas placas Intel E810 e E830, e que o comportamento em outras NICs não é garantido. O pacing TX estreito é suportado apenas em Intel E810/E830 com DPDK PMD devido ao recurso de limitação de taxa; outras configurações devem usar TSC como fonte de pacing, que fornece apenas pacing largo.
Compilação e execução
Instruções de compilação para DPDK, a biblioteca e aplicativos de exemplo são fornecidas no guia de compilação do projeto, com um guia separado para Windows. A execução do pipeline de demonstração ST 2110 baseado no backend DPDK PMD é coberta no guia de execução, com guias adicionais para Windows, Linux e VMs convidadas Linux usando passagem de VF, ambientes de nuvem AWS e o caminho de socket de kernel. Um guia de fuzzing também está incluído.
Desenvolvimento e contribuição
Aplicativos podem ser desenvolvidos contra a API ST 2110 descrita no guia de design. O repositório documenta um fluxo de trabalho de contribuição baseado em fork, branch e pull requests, e fornece um único script checkpatch que instala ferramentas fixadas via pre-commit, executa verificações no commit e valida todos os arquivos rastreados. Correções automáticas de formatação são aplicadas com um script complementar. O documento de padrão de codificação é a referência para regras e onde cada verificação é executada. Antes de abrir um pull request, os contribuidores são solicitados a executar formatação e verificações até ficarem limpos, garantir que a compilação e os testes de unidade passem, adicionar um teste no nível mais barato que possa capturar a mudança (unidade, integração com VFs ou aceitação ponta a ponta) e usar mensagens no estilo Conventional Commits.
Status do projeto e licenciamento
O projeto observa que o código-fonte e os recursos no branch principal são destinados a testes ou avaliação e não estão prontos para produção, com código avaliado marcado por versão de lançamento. É licenciado sob BSD 3-Clause e possui selos OpenSSF Scorecard e Best Practices, além de selos de CI para compilação base, Coverity, linter, Trivy e revisão de dependências. Publicações relacionadas incluem um artigo MHV'23, um whitepaper da Intel e uma palestra no DPDK Userspace Summit de 2022.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.