デマルチプレクサ出力ピンの設定

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

MPEG-2 demux がデータのパケットを受信する場合、データを解析して配信する出力ピンを決定する必要があります。 プログラム ストリーム モードでは、demux はストリーム ID を出力ピンにマップします。 トランスポート ストリーム モードでは、PID を出力ピンにマップします。 たとえば、トランスポート ストリーム モードでは、PID 0x31がピン 0 にマップされている場合、その PID 番号を持つすべての TS パケットが出力ピン 0 にルーティングされます。 デマルチプレクサは、ストリーム ID または PID が出力ピンにマップされていないパケットを受信した場合、単にパケットを破棄します。

プル モードでは、demux によって、ファイル内のオーディオ ストリームとビデオ ストリームの出力ピンが自動的に作成され、ストリーム ID がピンにマップされます。

プッシュ モードでは、出力ピンはアプリケーションまたは別のフィルターによって構成する必要があります。 ブロードキャスト ドライバー アーキテクチャ (BDA) を使用するデジタル テレビ ソースの場合、ネットワーク プロバイダー フィルターは TIF フィルターと連携して demux を構成します。 アプリケーションは何もする必要はありません。 その他のシナリオでは、アプリケーションで出力ピンを構成する必要があります。

デマルチプレクサは出力ピンなしで始まります。 出力ピンを作成するには、フィルターで IMpeg2Demultiplexer::CreateOutputPin メソッドを呼び出します。 このメソッドは、メディアの種類とピン名を受け取り、 IPin ポインターを返します。 メディアの種類は、ピンが別のフィルター (通常はデコーダー) に接続するときに使用されます。例として、「 基本ストリームでの Demux の使用」セクションが示されています。 ピン名は、重複するピン名が許可されないことを除き、任意の名前にすることができます。

次に、1 つ以上のストリーム ID または PID を新しい出力ピンに割り当てます。 プログラム ストリームの場合は、 IMPEG2StreamIdMap のピンに対してクエリを実行し、 IMPEG2StreamIdMap::MapStreamId を呼び出します。 トランスポート ストリームの場合は、 IMPEG2PIDMap のピンに対してクエリを実行し、 IMPEG2PIDMap::MapPID を呼び出します。

demux で TS パケットを解析するには、いくつかの方法があります。 出力ピンごとに、解析メソッドは MapPID メソッドへの MediaSampleContent パラメーターによって決定されます。

説明
MEDIA_ELEMENTARY_STREAM フィルターは PES ペイロードを提供します。 このモードでは、フィルターは PES パケットをデパックするため、ダウンストリーム フィルターは PES パケット ヘッダーなしで ES バイト ストリームを受信します。 (オーディオストリームとビデオストリームのみ)。
MEDIA_MPEG2_PSI このフィルターは、PAT テーブル、PMT テーブル、CAT テーブルなどの完全な PSI セクションを提供します。
MEDIA_TRANSPORT_PAYLOAD フィルターは、TS パケットからペイロードを抽出し、それ以上解析せずに配信します。 基本ストリームの場合、これは demux が PES パケット ヘッダーを含む PES パケット全体を配信することを意味します。
MEDIA_TRANSPORT_PACKET フィルターは TS パケット全体を配信します。 demux は、ID に従って TS パケットをルーティングしますが、それ以外の場合はパケットを調べたり処理したりしません。 エラーのあるパケットは除外されません。demux はパケットを再多重化せず、結果の出力ストリームは準拠している MPEG-2 トランスポート ストリームではありません。 このモードは パススルー モードと呼ばれます。

 

プログラム ストリームの場合、demux は常に PES ペイロードを配信します。

MPEG-2 デマルチプレクサーの使用