メディア トランスポート ライブラリ (MTL) は、メディア データの高スループット、低遅延の送受信用に設計されたソフトウェア ベースのソリューションです。これは、メディア転送用に特別に作成された効率的なユーザー空間の LibOS UDP スタックを備えており、マネージド IP ネットワーク上のプロフェッショナル メディア向けの SMPTE ST 2110 準拠の実装が組み込まれています。
メディア トランスポート ライブラリは、ソフトウェア ライブラリと IP ネットワークを使用して、ST2110 準拠のメディア ストリームをトランスポートする際の厳しいタイミングの課題を解決します。このライブラリは、特殊なハードウェアの代わりに、SMPTE ST 2110 標準の厳しいタイミング課題を満たすレート制限を組み込んだ従来の NIC を備えた既存の一般的に入手可能な CPU プラットフォームを活用します。
私たちのプロジェクトに価値があると感じたら、スターを付けることを検討してください。あなたのサポートは、私たちが成長し、オープンソース コミュニティのより多くの人々にリーチするのに役立ちます。どの星も重要であり、非常に感謝しています。
サポートされているデータ パス バックエンド: DPDK PMD、ネイティブ カーネル ソケット、および eBPF フィルターを備えた AF_XDP。
ユーザー空間の LibOS UDP スタックは、POSIX ソケット互換の API を備えています。
非ルート実行。
マルチプロセス処理により、プロセスごとに最大 8 つの NIC を使用できます。
SR-IOV による仮想化のサポート。
ハードウェア タイムスタンプ オフロードを備えた組み込みの PTP プロトコル。
FFMPEG プラグイン、OBS (Open Broadcaster Software) プラグイン、およびインテル® メディア SDK のサポート。
ネイティブ C/C++ API に加えて、Python と Rust のバインディングも提供します。
狭くて広いペース。弊社のソフトウェア ソリューションに関する ST2110 ナロー レポートについては、コンプライアンス ページをご覧ください。
ST2110-10、ST2110-20、ST2110-21、ST2110-30、ST2110-40、ST2022-7。
1080p、1080i、720p、4k、8kなど。
FPS: 120、119.88、100、60、59.94、50、30、29.97、25、24、23.98。
YUV 4:2:2 10 ビットなどを含む、ST2110-20 にリストされているすべてのビデオ形式がサポートされています。
ビッグエンディアンとリトルエンディアンの間の SIMD 色空間コンバーター。
エンコーダ/デコーダプラグインインターフェイスを備えたST2110-22。
RTP パススルー インターフェイスによる ST2022-6。
ST2110-20 ハードウェア RX タイムスタンプ オフロードを備えた RX タイミング コンプライアンス パーサー。
メディア トランスポート ライブラリは、DPDK (データ プレーン開発キット) EAL (メモリおよびコア管理を含む環境抽象化レイヤー) を利用して、高効率、リアルタイム、低遅延のメディア トランスポート ソリューションを実装します。このソフトウェアベースのメディア トランスポート スタックにより、COTS ハードウェアを使用したエッジおよびクラウド環境への展開が可能になります。
このライブラリには、さまざまな NIC 実装を抽象化し、上位ネットワーク層に統合されたパケット TX/RX インターフェイスを提供するように設計された仮想データ パス バックエンド層が組み込まれています。現在、次の 3 種類の NIC デバイスをサポートしています。
DPDK ポーリング モード ドライバー (PMD): これらのドライバーは、「ポーリング モード」ドライバーを利用して、カーネルのネットワーク スタックを完全にバイパスします。このアプローチは、ハードウェアへの直接アクセスを提供し、頻繁なユーザー/カーネルのコンテキスト切り替えを排除し、IRQ (割り込み要求) 切り替えを回避します。その結果、DPDK PMD は超低遅延と高スループットを実現し、要求の厳しいネットワーキング アプリケーションに最適です。
ネイティブ Linux カーネル ネットワーク ソケット スタック: このオプションは、カーネル エコシステムの全範囲をサポートします。
eBPF フィルターを備えた AF_XDP: AF_XDP は、Linux ネットワーキング スタックの大幅な進歩を表し、生のパフォーマンスとカーネルのネットワーキング エコシステムとの統合の間のバランスをとります。これは、パフォーマンスが重要であるものの、DPDK のような完全なカーネル バイパス ソリューションが実現可能ではない、または望ましくないシナリオで特に役立ちます。
このライブラリには、CPU リソースの使用率を最適化するタスクレット ベースの非同期スケジューラが導入されており、さまざまなパケット処理ユニットやアクセラレータとの統合が容易になります。
さらに、パケット ペーシング モジュールは、部分的にハードウェア オフロードされる RL (レート制限) や完全にソフトウェア ベースの TSC (タイムスタンプ カウンター) など、さまざまなペーシング アルゴリズムのサポートを提供します。
また、MTL には、ビッグエンディアンとリトルエンディアンの CSC (色空間フォーマット変換) 用の SIMD (単一命令、複数データ)、DMA (ダイレクト メモリ アクセス)、プラグイン インターフェイスが組み込まれており、包括的なビデオ制作エコシステムの構築が可能です。
詳細なデザインについてはデザインガイドをご参照ください。
MTL は、DPDK PMD、カーネル ソケット、および AF_XDP バックエンドとの互換性により、多用途のイーサネット サポートを提供します。
DPDK PMD のサポートについては、DPDK PMD サイト https://doc.dpdk.org/guides/nics/ でサポートされるイーサネット ハードウェアの包括的なリストを参照してください。
NIC が DPDK でサポートされていない場合、MTL はカーネル (Linux) ソケット トランスポート サポートを備えたフォールバック オプションを提供します。
ただし、日々の開発と検証は主に Intel E810 シリーズと AWS ENA に対して行われているため、他のネットワーク インターフェイス カード (NIC) のステータスは保証できないことに注意してください。
注意すべき重要な点は、レート制限機能のため、TX のナロー ペーシングは DPDK PMD を備えた Intel E810 シリーズでのみサポートされていることです。他のすべてのタイプの使用法では、ペーシング ソースとして TSC (タイムスタンプ カウンター) を使用する必要がありますが、これにより確保できるのは広範囲のペーシングのみです。
DPDK、ライブラリ、サンプル アプリケーションのビルド方法については、ビルド ガイドを参照してください。
Windows の場合、ビルド方法については Win ビルド ガイドを参照してください。
DPDK PMD バックエンドに基づくデモ パイプライン アプリケーションをセットアップして実行する方法については、実行ガイドを参照してください。
Windows の場合は、Windows 実行ガイドを参照してください。
さらに、VF パススルーに基づいて Linux および Windows ゲスト VM を設定する手順については、VM ガイドおよび Windows VM ガイドを参照してください。
AWS (クラウド環境) の場合、デモのセットアップおよび実行方法については、AWS 実行ガイドを参照してください。
組み込みのカーネル NIC ドライバーを使用してカーネル ネットワーク スタック上でこのライブラリを実行するには、カーネル ソケット ガイドに記載されている手順に従ってください。
メディア トランスポート ライブラリに基づいてアプリケーションを迅速に開発するには、設計ガイドの## 6. ST2110 API
を参照してください。
MTL は、現在のプロセス コンテキスト内で直接動作する LD プリロード POSIX 互換のユーザー空間 UDP スタックをサポートしています。この機能強化により、他のユーザー空間の UDP スタックで使用されるクライアント サービス アーキテクチャに通常関連するコア間のメッセージ コストが排除され、パフォーマンスが大幅に向上します。 MTL のスタックにより、NIC の送受信機能が sendto/recvfrom API から直接実行できるため、コア間呼び出しの必要性がなくなり、UDP コンシューマーへのデータ アフィニティ (LLC) が維持されるため、パフォーマンスが最適化されます。
LibOS UDP スタックの使用方法については、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
2022 DPDK Userspace Summit: DPDK に基づくリアルタイムかつ低遅延のメディア トランスポート スタック。 https://www.youtube.com/watch?v=fiiOvHezpBs
私たちは、メディア トランスポート ライブラリ プロジェクトへのコミュニティからの貢献を歓迎します。アイデアや問題がある場合は、GitHub の問題を使用するか、プル リクエストを開いて、私たちと共有してください。
プル リクエストを開く前に、次の手順に従ってください。
このリポジトリを自分のスペースにフォークします。
変更内容に応じて新しいブランチを作成します。
変更を加えてコミットします。
変更をフォークされたリポジトリにプッシュします。
メイン リポジトリへのプル リクエストを開きます。
メイン ブランチをアップストリームに自動的に同期したくない場合は、 Actions
に移動してUpstream Sync
ワークフローを無効にしてください。
スタイルチェックにはスーパーリンターアクションを使用します。
C/C++ コーディングの場合、次のコマンドを実行してスタイルをすばやく修正できます。
./フォーマットコーディング.sh
Python の場合、 black
およびisort
フォーマッタが使用されます。
sudo pip インストールブラック sudo pip install isort sudo pip install pylint
ブラックパイソン/ アイソートPython/ find 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 "シェル チェック"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 ;