Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFSourceResolver

IMFSourceResolver

COM
IIDfbe5a32d-a497-4b61-bb85-97b1a848a6e3継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

URL またはバイトストリームからメディアソースを作成します。

メソッド 7

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT CreateObjectFromURL(LPWSTR pwszURL, DWORD dwFlags, IPropertyStore* pProps, MF_OBJECT_TYPE* pObjectType, IUnknown** ppObject)

URL からメディアソースまたはバイトストリームを作成します。このメソッドは同期的です。

pwszURLLPWSTRin解決する URL を含む、null 終端文字列。
dwFlagsDWORDin1 つ以上のフラグのビットごとの OR。Source Resolver Flags を参照してください。 下記の解説を参照してください。
pPropsIPropertyStore*inプロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、オブジェクトを作成するスキームハンドラーまたはバイトストリームハンドラーにプロパティストアを渡します。ハンドラーはこのプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。
pObjectTypeMF_OBJECT_TYPE*out作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。
ppObjectIUnknown**outオブジェクトの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS
dwFlags パラメーターに相互排他的なフラグが含まれています。
MF_E_UNSUPPORTED_SCHEME
この URL スキームはサポートされていません。

解説(Remarks)

dwFlags パラメーターには、MF_RESOLUTION_MEDIASOURCE フラグまたは MF_RESOLUTION_BYTESTREAM フラグのいずれかを含める必要がありますが、両方を含めることはできません。

入力引数 dwFlagsMF_RESOLUTION_WRITE を設定することは、そのシナリオで必要な場合を除き、推奨されません。ほとんどのユースケースでは、メディアソースを書き込み機能付きで作成する必要はありません。書き込み機能付きでメディアソースを作成すると、書き込み機能なしで作成する場合よりも成功する可能性が低くなることがあります。これは、書き込み機能付きでメディアソースを作成する際に、URL が表すコンテンツに対してより厳格なチェックが行われる可能性があるためです。

ローカルファイルの場合は、ファイル名を pwszURL パラメーターに渡すことができます。file: スキームは必須ではありません。

Note このメソッドはリモートで呼び出すことはできません。

Examples

//  Create a media source from a URL.
HRESULT CreateMediaSource(PCWSTR sURL, IMFMediaSource **ppSource)
{
    MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;

    IMFSourceResolver* pSourceResolver = NULL;
    IUnknown* pSource = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pSourceResolver);
    if (FAILED(hr))
    {
        goto done;
    }

    // Use the source resolver to create the media source.

    // Note: For simplicity this sample uses the synchronous method to create 
    // the media source. However, creating a media source can take a noticeable
    // amount of time, especially for a network source. For a more responsive 
    // UI, use the asynchronous BeginCreateObjectFromURL method.

    hr = pSourceResolver->CreateObjectFromURL(
        sURL,                       // URL of the source.
        MF_RESOLUTION_MEDIASOURCE,  // Create a source object.
        NULL,                       // Optional property store.
        &ObjectType,        // Receives the created object type. 
        &pSource            // Receives a pointer to the media source.
        );
    if (FAILED(hr))
    {
        goto done;
    }

    // Get the IMFMediaSource interface from the media source.
    hr = pSource->QueryInterface(IID_PPV_ARGS(ppSource));

done:
    SafeRelease(&pSourceResolver);
    SafeRelease(&pSource);
    return hr;
}
vtbl 4 HRESULT CreateObjectFromByteStream(IMFByteStream* pByteStream, LPWSTR pwszURL, DWORD dwFlags, IPropertyStore* pProps, MF_OBJECT_TYPE* pObjectType, IUnknown** ppObject)

バイトストリームからメディアソースを作成します。このメソッドは同期的です。

pByteStreamIMFByteStream*inバイトストリームの IMFByteStream インターフェイスへのポインター。
pwszURLLPWSTRinバイトストリームの URL を含む、null 終端文字列。URL は省略可能で、NULL にできます。詳細については「解説」を参照してください。
dwFlagsDWORDinフラグのビットごとの ORSource Resolver Flags を参照してください。
pPropsIPropertyStore*inプロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、バイトストリームハンドラーにプロパティストアを渡します。バイトストリームハンドラーはこのプロパティストアを使用してメディアソースを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。
pObjectTypeMF_OBJECT_TYPE*out作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。
ppObjectIUnknown**outメディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS
dwFlags パラメーターに相互排他的なフラグが含まれています。
MF_E_UNSUPPORTED_BYTESTREAM_TYPE
このバイトストリームはサポートされていません。

解説(Remarks)

dwFlags パラメーターには MF_RESOLUTION_MEDIASOURCE フラグを含める必要があり、MF_RESOLUTION_BYTESTREAM フラグは含めないでください。

ソースリゾルバーは、URL のファイル名拡張子、またはバイトストリームの MIME タイプ(あるいはその両方)に基づいて、バイトストリームに対する 1 つ以上のバイトストリームハンドラーの検索を試みます。URL は省略可能な pwszURL パラメーターで指定し、MIME タイプはバイトストリームの MF_BYTESTREAM_CONTENT_TYPE 属性で指定できます。バイトストリームハンドラーは、Scheme Handlers and Byte-Stream Handlers で説明されているとおり、ファイル名拡張子または MIME タイプ、あるいはその両方によって登録されます。呼び出し元は、これらの値の少なくとも一方(可能であれば両方)を指定する必要があります。

Note このメソッドはリモートで呼び出すことはできません。
vtbl 5 HRESULT BeginCreateObjectFromURL(LPWSTR pwszURL, DWORD dwFlags, IPropertyStore* pProps, IUnknown** ppIUnknownCancelCookie, IMFAsyncCallback* pCallback, IUnknown* punkState)

URL からメディアソースまたはバイトストリームを作成する非同期要求を開始します。

pwszURLLPWSTRin解決する URL を含む、null 終端文字列。
dwFlagsDWORDinフラグのビットごとの OR。Source Resolver Flags を参照してください。
pPropsIPropertyStore*inプロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、オブジェクトを作成するスキームハンドラーまたはバイトストリームハンドラーにプロパティストアを渡します。ハンドラーはこのプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。
ppIUnknownCancelCookieIUnknown**outoptionalIUnknown ポインター、または値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFSourceResolver::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。
pCallbackIMFAsyncCallback*inコールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。
punkStateIUnknown*in呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元に返されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS
dwFlags パラメーターに相互排他的なフラグが含まれています。
MF_E_UNSUPPORTED_SCHEME
この URL スキームはサポートされていません。

解説(Remarks)

dwFlags パラメーターには、MF_RESOLUTION_MEDIASOURCE フラグまたは MF_RESOLUTION_BYTESTREAM フラグのいずれかを含める必要がありますが、両方を含めることはできません。

ローカルファイルの場合は、ファイル名を pwszURL パラメーターに渡すことができます。file: スキームは必須ではありません。

操作が完了すると、ソースリゾルバーは IMFAsyncCallback::Invoke メソッドを呼び出します。Invoke メソッドは、作成されたオブジェクトへのポインターを取得するために IMFSourceResolver::EndCreateObjectFromURL を呼び出す必要があります。

pProps パラメーターの使用方法は、メディアソースの実装によって異なります。

vtbl 6 HRESULT EndCreateObjectFromURL(IMFAsyncResult* pResult, MF_OBJECT_TYPE* pObjectType, IUnknown** ppObject)

URL からオブジェクトを作成する非同期要求を完了します。(IMFSourceResolver.EndCreateObjectFromURL)

pResultIMFAsyncResult*inIMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったのと同じポインターを渡します。
pObjectTypeMF_OBJECT_TYPE*out作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。
ppObjectIUnknown**outメディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_ABORT
操作がキャンセルされました。

解説(Remarks)

このメソッドは、アプリケーションの IMFAsyncCallback::Invoke メソッドの内部から呼び出してください。

vtbl 7 HRESULT BeginCreateObjectFromByteStream(IMFByteStream* pByteStream, LPWSTR pwszURL, DWORD dwFlags, IPropertyStore* pProps, IUnknown** ppIUnknownCancelCookie, IMFAsyncCallback* pCallback, IUnknown* punkState)

バイトストリームからメディアソースを作成する非同期要求を開始します。(IMFSourceResolver.BeginCreateObjectFromByteStream)

pByteStreamIMFByteStream*inバイトストリームの IMFByteStream インターフェイスへのポインター。
pwszURLLPWSTRinバイトストリームの元の URL を含む、null 終端文字列。このパラメーターは NULL にできます。
dwFlagsDWORDin1 つ以上のフラグのビットごとの ORSource Resolver Flags を参照してください。
pPropsIPropertyStore*inプロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、バイトストリームハンドラーにプロパティストアを渡します。バイトストリームハンドラーはこのプロパティストアを使用してメディアソースを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。
ppIUnknownCancelCookieIUnknown**outoptionalIUnknown ポインター、または値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFSourceResolver::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。
pCallbackIMFAsyncCallback*inコールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。
punkStateIUnknown*in呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元に返されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS
dwFlags パラメーターに相互排他的なフラグが含まれています。
MF_E_UNSUPPORTED_BYTESTREAM_TYPE
このバイトストリームはサポートされていません。
MF_E_BYTESTREAM_NOT_SEEKABLE
このバイトストリームはシークをサポートしていません。

解説(Remarks)

dwFlags パラメーターには MF_RESOLUTION_MEDIASOURCE フラグを含める必要があり、MF_RESOLUTION_BYTESTREAM フラグは含めないでください。

ソースリゾルバーは、URL のファイル名拡張子、またはバイトストリームの MIME タイプ(あるいはその両方)に基づいて、バイトストリームに対する 1 つ以上のバイトストリームハンドラーの検索を試みます。URL は省略可能な pwszURL パラメーターで指定し、MIME タイプはバイトストリームの MF_BYTESTREAM_CONTENT_TYPE 属性で指定できます。バイトストリームハンドラーは、Scheme Handlers and Byte-Stream Handlers で説明されているとおり、ファイル名拡張子または MIME タイプ、あるいはその両方によって登録されます。呼び出し元は、これらの値の少なくとも一方を指定する必要があります。

操作が完了すると、ソースリゾルバーは IMFAsyncCallback::Invoke メソッドを呼び出します。Invoke メソッドは、メディアソースへのポインターを取得するために IMFSourceResolver::EndCreateObjectFromByteStream を呼び出す必要があります。

vtbl 8 HRESULT EndCreateObjectFromByteStream(IMFAsyncResult* pResult, MF_OBJECT_TYPE* pObjectType, IUnknown** ppObject)

バイトストリームからメディアソースを作成する非同期要求を完了します。

pResultIMFAsyncResult*inIMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったのと同じポインターを渡します。
pObjectTypeMF_OBJECT_TYPE*out作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。
ppObjectIUnknown**outメディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_ABORT
アプリケーションが操作をキャンセルしました。

解説(Remarks)

このメソッドは、アプリケーションの IMFAsyncCallback::Invoke メソッドの内部から呼び出してください。

vtbl 9 HRESULT CancelObjectCreation(IUnknown* pIUnknownCancelCookie)

オブジェクトを作成する非同期要求をキャンセルします。

pIUnknownCancelCookieIUnknown*inIMFSourceResolver::BeginCreateObjectFromByteStream または IMFSourceResolver::BeginCreateObjectFromURL メソッドの ppIUnknownCancelCookie パラメーターで返された IUnknown インターフェイスへのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドを使用して、BeginCreateObjectFromByteStream または BeginCreateObjectFromURL への以前の呼び出しをキャンセルできます。ただし、これらのメソッドは非同期であるため、操作をキャンセルできる前に完了している場合があります。したがって、このメソッドを呼び出した後でも、コールバックが呼び出されることがあります。

Note このメソッドはリモートで呼び出すことはできません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IMFSourceResolver "{FBE5A32D-A497-4B61-BB85-97B1A848A6E3}"
#usecom global IMFSourceResolver IID_IMFSourceResolver "{90EAB60F-E43A-4188-BCC4-E47FDF04868C}"
#comfunc global IMFSourceResolver_CreateObjectFromURL              3 wstr,int,sptr,var,sptr
#comfunc global IMFSourceResolver_CreateObjectFromByteStream       4 sptr,wstr,int,sptr,var,sptr
#comfunc global IMFSourceResolver_BeginCreateObjectFromURL         5 wstr,int,sptr,sptr,sptr,sptr
#comfunc global IMFSourceResolver_EndCreateObjectFromURL           6 sptr,var,sptr
#comfunc global IMFSourceResolver_BeginCreateObjectFromByteStream  7 sptr,wstr,int,sptr,sptr,sptr,sptr
#comfunc global IMFSourceResolver_EndCreateObjectFromByteStream    8 sptr,var,sptr
#comfunc global IMFSourceResolver_CancelObjectCreation             9 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。