ASF スプリッター オブジェクトの構成
ASF スプリッタ ー オブジェクトは、Advanced Systems Format (ASF) ファイルの ASF データ オブジェクトを解析する WMContainer レイヤー オブジェクトです。 メディア ファイルの ASF データ オブジェクトを解析するためにスプリッターを作成して初期化した後、特定のストリームのサンプルを生成するようにスプリッターを構成する必要があります。 IMFASFSplitter::SelectStreams を呼び出して、必要なストリームを選択します。
必要に応じて、アプリケーションは、サンプルを逆の順序で生成したり、保護されたコンテンツのサンプルを生成したりするように構成することもできます。 これらのオプションを設定するには、 IMFASFSplitter::SetFlags を呼び出し、サポートされているフラグの必要なビットごとの組み合わせを渡します。 このメソッドを呼び出す前に、クライアントは IMFASFSplitter::Initialize 呼び出しを正常に完了する必要があります。それ以外の場合、SetFlags はエラー コードMF_E_NOT_INITIALIZED失敗します。 スプリッターの初期化の詳細については、「 ASF スプリッター オブジェクトの作成」を参照してください。
このフラグがスプリッターで現在設定されているかどうかをチェックするには、IMFASFSplitter::GetFlags を呼び出します。
解析するストリームの選択
IMFASFSplitter::Initialize 呼び出しによる初期化プロセス中に、スプリッターは ASF ファイル内のストリーム数とストリーム識別子を検出します。 既定では、スプリッターによってストリームは選択されません。 アプリケーションでは、 IMFASFSplitter::SelectStreams を呼び出してストリームを選択する必要があります。 このメソッドは、ストリーム番号の配列を受け取ります。 ストリームのストリーム番号を取得するには、 ASF プロファイルで IMFASFProfile::GetStream を呼び出すか、ストリーム記述子で IMFStreamDescriptor::GetStreamIdentifier を呼び出します。 (ASF プロファイルとストリーム記述子の両方を ContentInfo オブジェクトから取得できます)。クライアントがスプリッターによって認識されないストリーム番号を渡すと、 MF_E_INVALIDSTREAMNUMBER エラーで失敗します。
SelectStreams を呼び出すと、前の選択がクリアされます。 配列で指定されていないストリームは選択されていません。 現在選択されているストリームの一覧を取得するには、 IMFASFSplitter::GetSelectedStreams を呼び出します。 このメソッドは配列へのポインターを受け取り、このメソッドはストリーム番号を入力します。 配列のサイズが選択したストリームの数より小さい場合、メソッドは MF_E_BUFFERTOOSMALL エラーで失敗します。 この場合、 メソッドは pwNumStreams パラメーターで選択したストリームの数を返します。 その後、この番号を使用して、正しいサイズの配列を割り当て、メソッドをもう一度呼び出すことができます。
コード例については、「 チュートリアル: ASF ファイルの読み取り」の「解析するストリームを選択する」を参照してください。
再生の反転設定
スプリッターの初期化プロセス中に、ASF コンテンツが逆再生をサポートしているかどうかを判断します。 その場合は、 MFASF_SPLITTER_REVERSE フラグを設定することで、サンプルを逆の順序で生成するようにスプリッターを構成できます。 コンテンツが逆再生をサポートしていない場合、 IMFASFSplitter::SetFlags は MF_E_INVALIDREQUESTを返しますが、フラグはスプリッターに設定されます。
スプリッターが逆方向に解析するように構成されている場合、スプリッターは常に ASF データ オブジェクトを含むバッファーの末尾で解析を開始します。 したがって、データ オフセットと解析するデータの長さを逆解析するには、適切に設定する必要があります。 正しい値の設定の詳細については、「 既存の ASF データ オブジェクトからストリーム サンプルを生成する」を参照してください。
保護されたコンテンツの設定
スプリッターは、IMFASFSplitter::SetFlags を使用してMFASF_SPLITTER_WMDRMを設定することで、パケット レベルの暗号化コンテンツを操作するように構成できます。 これにより、Windows Media Digital Rights Management (DRM) によって保護されているコンテンツのサンプルを配信するようにスプリッターに指示します。 このフラグが設定されている場合、スプリッターによって生成されるサンプルには、メディア データの暗号化を解除し、フレームを再構築するために必要な情報 ( MFSampleExtension_PacketCrossOffsets 属性など) が含まれます。 この属性は、 DWORDs の配列を含む BLOB です。 各 DWORD には、フレームの先頭を基準としたフレームのペイロード境界が用意されています。 この属性が存在しない場合、フレームは 1 つのペイロードに含まれます。 通常、スプリッターによって生成されるサンプルには複数のメディア バッファーが含まれています。アプリケーションは 、IMFSample::ConvertToContiguousBuffer を呼び出すことによって、すべてのバッファーを 1 つの連続したバッファーにコピーできます。 結果のバッファーにはフレームが含まれており、属性値にはこのバッファーへのオフセットが含まれます。
関連トピック