アクティブ化オブジェクト
アクティブ化オブジェクトは、クラス ファクトリとやや似た別のオブジェクトを作成するために使用されるヘルパー オブジェクトです。 アクティブ化オブジェクトは、 IMFActivate インターフェイスを公開します。
アクティブ化オブジェクトを使用すると、ターゲット オブジェクトを作成せずに IMFActivate ポインターを保持できるため、ターゲット オブジェクトの作成を延期できます。 アクティブ化オブジェクトをシリアル化して、別のプロセスでターゲット オブジェクトを作成するために使用することもできます。 たとえば、アクティブ化オブジェクトは、アプリケーション プロセスから保護されたメディア パス (PMP) プロセスにパイプライン コンポーネントをマーシャリングするために使用されます。 アクティブ化オブジェクトは、 IMFActivate ポインターの一覧を返す特定の列挙関数でも使用されます。 アプリケーションがターゲット オブジェクトを作成する前に、アクティブ化オブジェクトの属性を調べることで、オブジェクトに関する情報を取得できます。
アクティブ化オブジェクトからターゲット オブジェクトを作成するには、 IMFActivate::ActivateObject メソッドを呼び出します。 呼び出し元は、作成されたオブジェクトを使用して終了したら、 IMFActivate::ShutdownObject を呼び出す必要があります。 多くの場合、アプリケーションはアクティブ化オブジェクトを作成し、メディア セッションは ActivateObject を呼び出します。 その場合、アプリケーションではなくメディア セッションで ShutdownObject を呼び出す必要があります。 その他の状況では、アプリケーションはメディア セッションから IMFActivate ポインターを受け取り、アプリケーションは ActivateObject と ShutdownObject を呼び出します。 (たとえば、「 保護されたメディア ファイルを再生する方法」を参照してください)。
アクティブ化オブジェクトは属性を持つ場合があり、 IMFActivate インターフェイスは IMFAttributes インターフェイスを 継承します。 一部のアクティブ化オブジェクトでは、属性を使用して作成されたオブジェクトを構成します。 各オブジェクトでサポートされている特定の属性については、そのアクティブ化オブジェクトの作成関数のリファレンスに記載されています。 関数から受け取る IMFActivate ポインターを使用して属性を設定します。
保護された再生の場合、アクティブ化オブジェクトは PMP プロセスにマーシャリングされます。 マーシャリングをサポートするには、アクティブ化オブジェクトで IPersistStream インターフェイスを公開する必要があります。 さらに、PMP が保護されたプロセスで実行されている場合は、アクティブ化オブジェクトと作成されたオブジェクトの両方が信頼できるコンポーネントである必要があります。 これは、保護されていないプロセスに PMP が読み込まれる場合の要件ではありません。
PMP プロセス内でカスタム パイプライン オブジェクト (メディア シンクなど) を使用するには、パイプライン オブジェクトのアクティブ化オブジェクトを実装する必要があります。
- アクティブ化オブジェクトは、 IMFActivate と IPersistStream を公開する必要があります。
- アクティブ化オブジェクトの IPersist::GetClassID メソッドは、アクティブ化オブジェクトの CLSID を返す必要があります。
- 必要に応じて、 IPersistStream::Save メソッドと IPersistStream::Load メソッドを実装して、アクティブ化オブジェクトを構成するために必要なデータをマーシャリングできます。
メディア セッションは、PMP プロセス内でトポロジを読み込むと、 CoCreateInstance を呼び出してアクティブ化オブジェクトの新しいインスタンスを作成します。 次に、 IMFActivate::ActivateObject を呼び出してパイプライン オブジェクトを作成します。
関連トピック