Media Transport Library (MTL) adalah solusi berbasis perangkat lunak yang dirancang untuk transmisi dan penerimaan data media dengan throughput tinggi, latensi rendah. Ini menampilkan tumpukan UDP LibOS ruang pengguna yang efisien yang dibuat khusus untuk transportasi media, dan dilengkapi dengan implementasi bawaan yang sesuai dengan SMPTE ST 2110 untuk Media Profesional melalui Jaringan IP Terkelola.
Perpustakaan Transportasi Media memecahkan tantangan waktu yang ketat dalam mengangkut aliran media yang sesuai dengan ST2110 menggunakan perpustakaan perangkat lunak dan melalui jaringan IP. Daripada menggunakan perangkat keras khusus, perpustakaan ini memanfaatkan platform CPU yang umum tersedia dengan NIC konvensional yang menggabungkan pembatasan kecepatan untuk memenuhi tantangan pengaturan waktu yang ketat dalam standar SMPTE ST 2110.
Jika Anda menemukan nilai dalam proyek kami, mohon pertimbangkan untuk memberikannya bintang. Dukungan Anda membantu kami berkembang dan menjangkau lebih banyak orang di komunitas sumber terbuka. Setiap bintang berarti dan sangat dihargai.
Backend jalur data yang didukung: DPDK PMD, soket kernel asli, dan AF_XDP dengan filter eBPF.
Tumpukan UDP LibOS ruang pengguna dilengkapi dengan API yang kompatibel dengan soket POSIX.
Jalankan tanpa root.
Penanganan multi-proses, memungkinkan hingga 8 NIC per proses.
Dukungan virtualisasi oleh SR-IOV.
Protokol PTP bawaan dengan pembongkaran stempel waktu perangkat keras.
Plugin FFMPEG, plugin OBS (Open Broadcaster Software), dan dukungan Intel® Media SDK.
Selain API C/C++ asli, ia juga menawarkan binding untuk Python dan Rust.
Langkah yang sempit dan lebar. Silakan lihat halaman kepatuhan untuk laporan sempit ST2110 pada solusi perangkat lunak kami.
ST2110-10, ST2110-20, ST2110-21, ST2110-30, ST2110-40, ST2022-7.
1080p, 1080i, 720p, 4k, 8k dan lainnya.
FPS: 120, 119,88, 100, 60, 59,94, 50, 30, 29,97, 25, 24, 23,98.
Semua format video yang terdaftar di ST2110-20, termasuk YUV 4:2:2 10-bit dan lainnya, didukung.
Konverter ruang warna SIMD antara big-endian dan little-endian.
ST2110-22 dengan antarmuka plugin encoder/decoder.
ST2022-6 dengan antarmuka passthrough RTP.
ST2110-20 Pengurai kepatuhan waktu RX dengan pembongkaran stempel waktu RX perangkat keras.
Perpustakaan Transportasi Media memanfaatkan DPDK (Data Plane Development Kit) EAL (Lapisan Abstraksi Lingkungan termasuk memori dan manajemen inti) untuk mengimplementasikan solusi transportasi media yang sangat efisien, real-time, dan latensi rendah. Tumpukan transportasi media berbasis perangkat lunak ini memungkinkan penerapan di lingkungan edge dan cloud menggunakan perangkat keras COTS.
Pustaka ini menggabungkan lapisan backend jalur data virtual, yang dirancang untuk mengabstraksi berbagai implementasi NIC dan menyediakan antarmuka paket TX/RX terpadu ke lapisan jaringan atas. Saat ini mendukung tiga jenis perangkat NIC:
DPDK Poll-Mode Drivers (PMDs): Driver ini sepenuhnya melewati tumpukan jaringan kernel, memanfaatkan driver 'mode polling'. Pendekatan ini menyediakan akses perangkat keras langsung, menghilangkan peralihan konteks pengguna/kernel yang berat, dan menghindari peralihan IRQ (Interrupt Request). Hasilnya, PMD DPDK memberikan latensi yang sangat rendah dan throughput yang tinggi, menjadikannya ideal untuk aplikasi jaringan yang menuntut.
Tumpukan Soket Jaringan Kernel Linux Asli: Opsi ini mendukung seluruh ekosistem kernel.
AF_XDP dengan filter eBPF: AF_XDP mewakili kemajuan signifikan dalam tumpukan jaringan Linux, memberikan keseimbangan antara kinerja mentah dan integrasi dengan ekosistem jaringan kernel. Ini sangat berharga dalam skenario di mana kinerja sangat penting, namun solusi bypass kernel lengkap seperti DPDK tidak layak atau tidak diinginkan.
Perpustakaan memperkenalkan penjadwal asinkron berbasis tugas yang mengoptimalkan pemanfaatan sumber daya CPU, memfasilitasi integrasi dengan berbagai unit pemrosesan paket dan akselerator.
Selain itu, modul pacing paket menawarkan dukungan untuk berbagai algoritma pacing, termasuk RL (Rate Limit), yang sebagian dibongkar perangkat kerasnya, dan TSC (timestamp Counter), yang sepenuhnya berbasis perangkat lunak.
MTL juga menggabungkan SIMD (Instruksi Tunggal, Banyak Data) untuk CSC (Konversi Format Ruang Warna) dari big-endian dan little-endian, DMA (Direct Memory Access), dan antarmuka plugin, memungkinkan terciptanya ekosistem produksi video yang komprehensif.
Untuk detail desain, silakan lihat panduan desain.
MTL menawarkan dukungan Ethernet serbaguna, berkat kompatibilitasnya dengan DPDK PMD, soket kernel, dan backend AF_XDP.
Untuk dukungan DPDK PMD, Anda dapat merujuk ke situs DPDK PMD https://doc.dpdk.org/guides/nics/ untuk daftar lengkap perangkat keras Ethernet yang didukung.
Jika NIC Anda tidak didukung oleh DPDK, MTL menyediakan opsi fallback dengan dukungan transport soket kernel (Linux).
Namun, perlu diketahui bahwa pengembangan dan validasi harian kami terutama dilakukan pada seri Intel E810 dan AWS ENA, sehingga kami tidak dapat menjamin status untuk kartu antarmuka jaringan (NIC) lainnya.
Hal penting yang perlu diperhatikan adalah tempo sempit TX hanya didukung untuk seri Intel E810 bersama dengan DPDK PMD karena fitur batas kecepatan. Semua jenis penggunaan lainnya harus menggunakan TSC (Timestamp Counter) sebagai sumber tempo, yang hanya dapat memastikan tempo yang luas.
Silakan merujuk ke panduan pembuatan untuk petunjuk tentang cara membuat DPDK, perpustakaan, dan contoh aplikasi.
Untuk Windows, silakan merujuk ke panduan pembuatan Win untuk petunjuk tentang cara membuat.
Silakan lihat panduan menjalankan untuk instruksi tentang cara mengatur dan menjalankan aplikasi pipa demo berdasarkan backend DPDK PMD.
Untuk Windows, silakan lihat panduan menjalankan Windows.
Selain itu, lihat panduan VM dan panduan VM Windows untuk petunjuk tentang menyiapkan VM tamu Linux dan Windows berdasarkan passthrough VF.
Untuk AWS (lingkungan cloud), lihat panduan menjalankan AWS untuk petunjuk tentang cara menyiapkan dan menjalankan demo.
Untuk menjalankan perpustakaan ini pada tumpukan jaringan kernel dengan driver NIC kernel bawaan, ikuti instruksi yang diberikan dalam panduan soket kernel.
Untuk mengembangkan aplikasi dengan cepat berdasarkan Media Transport Library, silakan merujuk ke ## 6. ST2110 API
dari panduan desain.
MTL memiliki dukungan untuk tumpukan UDP ruang pengguna yang kompatibel dengan POSIX preload LD yang beroperasi secara langsung dalam konteks proses saat ini. Peningkatan ini secara signifikan meningkatkan kinerja dengan menghilangkan biaya pesan lintas inti yang biasanya dikaitkan dengan arsitektur layanan klien yang digunakan di tumpukan UDP ruang pengguna lainnya. Tumpukan MTL memungkinkan fungsi transmisi dan penerimaan NIC dijalankan langsung dari API sendto/recvfrom, sehingga menghilangkan kebutuhan panggilan lintas inti dan menjaga afinitas data (LLC) ke konsumen UDP, sehingga mengoptimalkan kinerja.
Untuk mempelajari cara menggunakan tumpukan UDP LibOS, silakan merujuk ke dokumen udp.
MHV'23: Tumpukan Transportasi Media Waktu Nyata Berdasarkan Perangkat Keras Komersial yang Siap Pakai. https://dl.acm.org/doi/10.1145/3588444.3591002
Whitepaper: Perpustakaan Sumber Terbuka Mengaktifkan Media Real-Time melalui Jaringan 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: Tumpukan transport media real-time dan latensi rendah berdasarkan DPDK. https://www.youtube.com/watch?v=fiiOvHezpBs
Kami menyambut baik kontribusi komunitas pada proyek Perpustakaan Transportasi Media. Jika Anda memiliki ide atau masalah, silakan sampaikan kepada kami menggunakan masalah GitHub atau membuka permintaan tarik.
Sebelum membuka pull request, harap ikuti langkah-langkah berikut:
Garpu repositori ini ke ruang Anda sendiri.
Buat cabang baru untuk perubahan Anda.
Buat perubahan Anda dan komit.
Dorong perubahan Anda ke repositori bercabang Anda.
Buka permintaan tarik ke repositori utama.
Jika Anda tidak ingin cabang utama disinkronkan secara otomatis ke upstream, silakan buka Actions
dan nonaktifkan alur kerja Upstream Sync
.
Kami menggunakan tindakan super-linter untuk pemeriksaan gaya.
Untuk pengkodean C/C++, Anda dapat menjalankan perintah berikut untuk memperbaiki gaya dengan cepat:
./format-coding.sh
Untuk Python, formatter black
dan isort
digunakan.
sudo pip instal hitam sudo pip instal isort sudo pip install pylint
ular piton hitam/ mengurutkan python/ temukan python/contoh/ -nama "*.py" -exec pylint {} ;
Untuk bahasa lain, silakan periksa dengan contoh perintah berikut di dalam container 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 "pemeriksaan shell"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 ;