La Media Transport Library (MTL) est une solution logicielle conçue pour la transmission et la réception de données multimédias à haut débit et à faible latence. Il dispose d'une pile UDP LibOS d'espace utilisateur efficace spécialement conçue pour le transport multimédia et est équipé d'une implémentation intégrée compatible SMPTE ST 2110 pour les médias professionnels sur les réseaux IP gérés.
La bibliothèque de transport multimédia résout les problèmes de synchronisation stricts liés au transport de flux multimédias conformes à la norme ST2110 à l'aide d'une bibliothèque logicielle et via des réseaux IP. Au lieu d'un matériel spécialisé, cette bibliothèque exploite les plates-formes CPU existantes couramment disponibles avec des cartes réseau conventionnelles qui intègrent une limitation de débit pour répondre aux défis de synchronisation stricts de la norme SMPTE ST 2110.
Si vous trouvez de la valeur dans notre projet, pensez à lui donner une étoile. Votre soutien nous aide à grandir et à toucher davantage de personnes dans la communauté open source. Chaque étoile compte et est grandement appréciée.
Backend de chemin de données pris en charge : DPDK PMD, socket de noyau natif et AF_XDP avec filtre eBPF.
La pile LibOS UDP de l'espace utilisateur comprend une API compatible avec les sockets POSIX.
Exécution non root.
Gestion multi-processus, permettant jusqu'à 8 cartes réseau par processus.
Prise en charge de la virtualisation par SR-IOV.
Protocole PTP intégré avec déchargement de l'horodatage matériel.
Plugin FFMPEG, plug-in OBS (Open Broadcaster Software) et prise en charge du Intel® Media SDK.
En plus de l'API native C/C++, il propose également des liaisons pour Python et Rust.
Rythme étroit et large. Veuillez consulter la page de conformité pour le rapport détaillé ST2110 sur notre solution logicielle.
ST2110-10, ST2110-20, ST2110-21, ST2110-30, ST2110-40, ST2022-7.
1080p, 1080i, 720p, 4k, 8k et autres.
FPS : 120, 119,88, 100, 60, 59,94, 50, 30, 29,97, 25, 24, 23,98.
Tous les formats vidéo répertoriés dans ST2110-20, y compris YUV 4:2:2 10 bits et autres, sont pris en charge.
Convertisseur d'espace colorimétrique SIMD entre big-endian et little-endian.
ST2110-22 avec interface plugin encodeur/décodeur.
ST2022-6 par interface pass-through RTP.
Analyseur de conformité de synchronisation RX ST2110-20 avec déchargement de l'horodatage matériel RX.
La bibliothèque de transport multimédia exploite DPDK (Data Plane Development Kit) EAL (Environment Abstraction Layer, y compris la gestion de la mémoire et du cœur) pour mettre en œuvre une solution de transport multimédia très efficace, en temps réel et à faible latence. Cette pile de transport multimédia basée sur logiciel permet le déploiement sur des environnements Edge et Cloud à l'aide de matériel COTS.
La bibliothèque intègre une couche backend de chemin de données virtuel, conçue pour abstraire diverses implémentations de cartes réseau et fournir une interface TX/RX de paquets unifiée à la couche réseau supérieure. Il prend actuellement en charge trois types de périphériques NIC :
Pilotes DPDK Poll-Mode (PMD) : ces pilotes contournent complètement la pile réseau du noyau, en utilisant le pilote « mode sondage ». Cette approche fournit un accès direct au matériel, élimine les changements de contexte utilisateur/noyau lourds et évite les commutateurs IRQ (Interrupt Request). En conséquence, les PMD DPDK offrent une latence ultra-faible et un débit élevé, ce qui les rend idéaux pour les applications réseau exigeantes.
Pile de sockets réseau du noyau Linux natif : cette option prend en charge la gamme complète des écosystèmes du noyau.
AF_XDP avec filtre eBPF : AF_XDP représente une avancée significative dans la pile réseau Linux, établissant un équilibre entre performances brutes et intégration avec l'écosystème réseau du noyau. C'est particulièrement utile dans les scénarios où les performances sont critiques, mais où une solution de contournement complet du noyau comme DPDK n'est ni réalisable ni souhaitée.
La bibliothèque introduit un planificateur asynchrone basé sur des tâches qui optimise l'utilisation des ressources du processeur, facilitant ainsi l'intégration avec diverses unités et accélérateurs de traitement de paquets.
De plus, le module de régulation des paquets prend en charge divers algorithmes de régulation, notamment RL (Rate Limit), qui est partiellement déchargé sur le matériel, et TSC (timestamp Counter), qui est entièrement basé sur un logiciel.
MTL intègre également SIMD (Single Instruction, Multiple Data) pour CSC (Color Space Format Conversion) du big-endian et du small-endian, DMA (Direct Memory Access) et des interfaces de plug-in, permettant la création d'un écosystème complet de production vidéo.
Pour la conception détaillée, veuillez vous référer au guide de conception.
MTL offre une prise en charge Ethernet polyvalente, grâce à sa compatibilité avec les backends DPDK PMD, kernel socket et AF_XDP.
Pour la prise en charge de DPDK PMD, vous pouvez vous référer au site DPDK PMD https://doc.dpdk.org/guides/nics/ pour une liste complète du matériel Ethernet pris en charge.
Dans les cas où votre carte réseau n'est pas prise en charge par DPDK, MTL fournit une option de secours avec la prise en charge du transport de socket du noyau (Linux).
Cependant, veuillez noter que notre développement et notre validation quotidiens sont principalement effectués sur la série Intel E810 et AWS ENA, nous ne pouvons donc pas garantir le statut des autres cartes d'interface réseau (NIC).
Un point important à noter est que la stimulation étroite de l'émission n'est prise en charge que pour la série Intel E810 avec DPDK PMD en raison de la fonction de limite de débit. Tout autre type d'utilisation doit utiliser TSC (Timestamp Counter) comme source de stimulation, ce qui ne peut garantir qu'une stimulation large.
Veuillez vous référer au guide de construction pour obtenir des instructions sur la façon de créer DPDK, la bibliothèque et l'exemple d'application.
Pour Windows, veuillez vous référer au guide de construction Win pour obtenir des instructions sur la façon de créer.
Veuillez vous référer au guide d'exécution pour obtenir des instructions sur la façon de configurer et d'exécuter l'application de pipeline de démonstration basée sur le backend DPDK PMD.
Pour Windows, veuillez vous référer au guide d'exécution de Windows.
De plus, veuillez vous référer au guide VM et au guide Windows VM pour obtenir des instructions sur la configuration des machines virtuelles invitées Linux et Windows basées sur le relais VF.
Pour AWS (environnement cloud), veuillez vous référer au guide d'exécution AWS pour obtenir des instructions sur la configuration et l'exécution de la démo.
Pour exécuter cette bibliothèque sur la pile réseau du noyau avec le pilote NIC du noyau intégré, veuillez suivre les instructions fournies dans le guide des sockets du noyau.
Pour développer rapidement des applications basées sur la bibliothèque Media Transport, veuillez vous référer au ## 6. ST2110 API
du guide de conception.
MTL prend en charge une pile UDP d'espace utilisateur compatible POSIX de préchargement LD qui fonctionne directement dans le contexte de processus actuel. Cette amélioration améliore considérablement les performances en éliminant les coûts de messages intercœurs généralement associés aux architectures de service client utilisées dans d'autres piles UDP de l'espace utilisateur. La pile de MTL permet aux fonctions de transmission et de réception de la carte réseau de s'exécuter directement à partir de l'API sendto/recvfrom, éliminant ainsi le besoin d'appels cross-core et maintenant l'affinité des données (LLC) avec le consommateur UDP, optimisant ainsi les performances.
Pour savoir comment utiliser la pile LibOS UDP, veuillez vous référer à la documentation udp.
MHV'23 : une pile de transport multimédia en temps réel basée sur du matériel commercial disponible dans le commerce. https://dl.acm.org/doi/10.1145/3588444.3591002
Livre blanc : La bibliothèque Open Source permet les médias en temps réel sur les réseaux IP. https://www.intel.com/content/www/us/en/content-details/786203/open-source-library-enables-real-time-media-over-ip-networks.html
Sommet DPDK Userspace 2022 : pile de transport multimédia en temps réel et à faible latence basée sur DPDK. https://www.youtube.com/watch?v=fiiOvHezpBs
Nous apprécions les contributions de la communauté au projet Media Transport Library. Si vous avez des idées ou des problèmes, partagez-les avec nous en utilisant les problèmes GitHub ou en ouvrant une pull request.
Avant d'ouvrir une pull request, veuillez suivre ces étapes :
Forkez ce référentiel dans votre propre espace.
Créez une nouvelle branche pour vos modifications.
Apportez vos modifications et validez-les.
Envoyez vos modifications vers votre référentiel forké.
Ouvrez une pull request vers le référentiel principal.
Si vous ne souhaitez pas que la branche principale soit automatiquement synchronisée avec la branche amont, veuillez accéder à Actions
et désactiver le workflow Upstream Sync
.
Nous utilisons l'action super-linter pour les vérifications de style.
Pour le codage C/C++, vous pouvez exécuter la commande suivante pour corriger rapidement le style :
./format-coding.sh
Pour Python, un formateur black
et isort
est utilisé.
sudo pip installer noir sudo pip install isort sudo pip installer pylint
python noir/ isort python/ find python/example/ -name "*.py" -exec pylint {} ;
Pour les autres langues, veuillez vérifier avec l'exemple de commande suivant dans le conteneur 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" -exec shellcheck {} ;# 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 ;