demux 出力ピンの構成
MPEG-2 demux は、データのパケットを受け取ったとき、どの出力ピンでデータを解析し送信するかを決める必要がある。プログラム ストリーム モードでは、demux はストリーム ID を出力ピンにマップする。トランスポート ストリーム モードでは、PID を出力ピンにマップする。たとえば、トランスポート ストリーム モードで、PID 0x31 がピン 0 にマップされた場合、PID 0x31 を持つすべての TS パケットは出力ピン 0 にルーティングされる。demux では、ストリーム ID または PID が出力ピンにマップされていないパケットを受け取ると、そのパケットを破棄する。
プル モードでは、demux はファイルのオーディオ ストリームとビデオ ストリーム用の出力ピンを自動的に作成し、ピンにストリーム ID をマップする。
プッシュ モードでは、出力ピンはアプリケーションまたは別のフィルタにより構成する必要がある。Broadcast Driver Architecture (BDA) を使うデジタル TV ソースの場合、ネットワーク プロバイダ フィルタは TIF フィルタと共に demux を構成する。アプリケーションでは何も行う必要がない。その他の場合、アプリケーションは出力ピンを構成する必要がある。
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 は PID に従って TS パケットをルーティングするが、それ以外にパケットの検査や処理は行わない。エラーのあるパケットはフィルタで出力できない。demux はパケットを再多重化せず、出力ストリームは互換性がある MPEG-2 トランスポート ストリームではない。このモードは "パス スルー" モードと呼ばれる。 |
プログラム ストリームの場合、demux は常に PES ペイロードを送信する。
参照