IMFSourceResolver
COM公式ドキュメント
URL またはバイトストリームからメディアソースを作成します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
URL からメディアソースまたはバイトストリームを作成します。このメソッドは同期的です。
| pwszURL | LPWSTR | in | 解決する URL を含む、null 終端文字列。 |
| dwFlags | DWORD | in | 1 つ以上のフラグのビットごとの OR。Source Resolver Flags を参照してください。 下記の解説を参照してください。 |
| pProps | IPropertyStore* | in | プロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、オブジェクトを作成するスキームハンドラーまたはバイトストリームハンドラーにプロパティストアを渡します。ハンドラーはこのプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。 |
| pObjectType | MF_OBJECT_TYPE* | out | 作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。 |
| ppObject | IUnknown** | out | オブジェクトの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| dwFlags パラメーターに相互排他的なフラグが含まれています。 | |
| この URL スキームはサポートされていません。 |
解説(Remarks)
dwFlags パラメーターには、MF_RESOLUTION_MEDIASOURCE フラグまたは MF_RESOLUTION_BYTESTREAM フラグのいずれかを含める必要がありますが、両方を含めることはできません。
入力引数 dwFlags に MF_RESOLUTION_WRITE を設定することは、そのシナリオで必要な場合を除き、推奨されません。ほとんどのユースケースでは、メディアソースを書き込み機能付きで作成する必要はありません。書き込み機能付きでメディアソースを作成すると、書き込み機能なしで作成する場合よりも成功する可能性が低くなることがあります。これは、書き込み機能付きでメディアソースを作成する際に、URL が表すコンテンツに対してより厳格なチェックが行われる可能性があるためです。
ローカルファイルの場合は、ファイル名を pwszURL パラメーターに渡すことができます。file: スキームは必須ではありません。
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;
}
バイトストリームからメディアソースを作成します。このメソッドは同期的です。
| pByteStream | IMFByteStream* | in | バイトストリームの IMFByteStream インターフェイスへのポインター。 |
| pwszURL | LPWSTR | in | バイトストリームの URL を含む、null 終端文字列。URL は省略可能で、NULL にできます。詳細については「解説」を参照してください。 |
| dwFlags | DWORD | in | フラグのビットごとの OR。Source Resolver Flags を参照してください。 |
| pProps | IPropertyStore* | in | プロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、バイトストリームハンドラーにプロパティストアを渡します。バイトストリームハンドラーはこのプロパティストアを使用してメディアソースを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。 |
| pObjectType | MF_OBJECT_TYPE* | out | 作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。 |
| ppObject | IUnknown** | out | メディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| dwFlags パラメーターに相互排他的なフラグが含まれています。 | |
| このバイトストリームはサポートされていません。 |
解説(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 タイプ、あるいはその両方によって登録されます。呼び出し元は、これらの値の少なくとも一方(可能であれば両方)を指定する必要があります。
- pwszURL パラメーターに URL を指定します。
- バイトストリームに MF_BYTESTREAM_CONTENT_TYPE 属性を設定して MIME タイプを指定します。(この属性は、バイトストリームの作成方法によっては、バイトストリームを作成した時点で既に設定されている場合があります。)
URL からメディアソースまたはバイトストリームを作成する非同期要求を開始します。
| pwszURL | LPWSTR | in | 解決する URL を含む、null 終端文字列。 |
| dwFlags | DWORD | in | フラグのビットごとの OR。Source Resolver Flags を参照してください。 |
| pProps | IPropertyStore* | in | プロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、オブジェクトを作成するスキームハンドラーまたはバイトストリームハンドラーにプロパティストアを渡します。ハンドラーはこのプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。 |
| ppIUnknownCancelCookie | IUnknown** | outoptional | IUnknown ポインター、または値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFSourceResolver::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。 |
| punkState | IUnknown* | in | 呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元に返されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| dwFlags パラメーターに相互排他的なフラグが含まれています。 | |
| この URL スキームはサポートされていません。 |
解説(Remarks)
dwFlags パラメーターには、MF_RESOLUTION_MEDIASOURCE フラグまたは MF_RESOLUTION_BYTESTREAM フラグのいずれかを含める必要がありますが、両方を含めることはできません。
ローカルファイルの場合は、ファイル名を pwszURL パラメーターに渡すことができます。file: スキームは必須ではありません。
操作が完了すると、ソースリゾルバーは IMFAsyncCallback::Invoke メソッドを呼び出します。Invoke メソッドは、作成されたオブジェクトへのポインターを取得するために IMFSourceResolver::EndCreateObjectFromURL を呼び出す必要があります。
pProps パラメーターの使用方法は、メディアソースの実装によって異なります。
URL からオブジェクトを作成する非同期要求を完了します。(IMFSourceResolver.EndCreateObjectFromURL)
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったのと同じポインターを渡します。 |
| pObjectType | MF_OBJECT_TYPE* | out | 作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。 |
| ppObject | IUnknown** | out | メディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| 操作がキャンセルされました。 |
解説(Remarks)
このメソッドは、アプリケーションの IMFAsyncCallback::Invoke メソッドの内部から呼び出してください。
バイトストリームからメディアソースを作成する非同期要求を開始します。(IMFSourceResolver.BeginCreateObjectFromByteStream)
| pByteStream | IMFByteStream* | in | バイトストリームの IMFByteStream インターフェイスへのポインター。 |
| pwszURL | LPWSTR | in | バイトストリームの元の URL を含む、null 終端文字列。このパラメーターは NULL にできます。 |
| dwFlags | DWORD | in | 1 つ以上のフラグのビットごとの OR。Source Resolver Flags を参照してください。 |
| pProps | IPropertyStore* | in | プロパティストアの IPropertyStore インターフェイスへのポインター。このメソッドは、バイトストリームハンドラーにプロパティストアを渡します。バイトストリームハンドラーはこのプロパティストアを使用してメディアソースを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。 |
| ppIUnknownCancelCookie | IUnknown** | outoptional | IUnknown ポインター、または値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFSourceResolver::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。 |
| punkState | IUnknown* | in | 呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元に返されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| dwFlags パラメーターに相互排他的なフラグが含まれています。 | |
| このバイトストリームはサポートされていません。 | |
| このバイトストリームはシークをサポートしていません。 |
解説(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 を呼び出す必要があります。
バイトストリームからメディアソースを作成する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったのと同じポインターを渡します。 |
| pObjectType | MF_OBJECT_TYPE* | out | 作成されたオブジェクトの種類を指定する、MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。 |
| ppObject | IUnknown** | out | メディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| アプリケーションが操作をキャンセルしました。 |
解説(Remarks)
このメソッドは、アプリケーションの IMFAsyncCallback::Invoke メソッドの内部から呼び出してください。
オブジェクトを作成する非同期要求をキャンセルします。
| pIUnknownCancelCookie | IUnknown* | in | IMFSourceResolver::BeginCreateObjectFromByteStream または IMFSourceResolver::BeginCreateObjectFromURL メソッドの ppIUnknownCancelCookie パラメーターで返された IUnknown インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを使用して、BeginCreateObjectFromByteStream または BeginCreateObjectFromURL への以前の呼び出しをキャンセルできます。ただし、これらのメソッドは非同期であるため、操作をキャンセルできる前に完了している場合があります。したがって、このメソッドを呼び出した後でも、コールバックが呼び出されることがあります。
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 指定が可能。#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,sptr,sptr #comfunc global IMFSourceResolver_CreateObjectFromByteStream 4 sptr,wstr,int,sptr,sptr,sptr #comfunc global IMFSourceResolver_BeginCreateObjectFromURL 5 wstr,int,sptr,sptr,sptr,sptr #comfunc global IMFSourceResolver_EndCreateObjectFromURL 6 sptr,sptr,sptr #comfunc global IMFSourceResolver_BeginCreateObjectFromByteStream 7 sptr,wstr,int,sptr,sptr,sptr,sptr #comfunc global IMFSourceResolver_EndCreateObjectFromByteStream 8 sptr,sptr,sptr #comfunc global IMFSourceResolver_CancelObjectCreation 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。