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

IWMStreamConfig

COM
IID96406bdc-2b2b-11d3-b36b-00c04f6108ff継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IWMStreamConfig インターフェイスは、ストリーム構成オブジェクトの主要なインターフェイスです。

メソッド 11

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

vtbl 3 HRESULT GetStreamType(GUID* pguidStreamType)

GetStreamType メソッドは、ストリームのメジャー タイプ(オーディオ、ビデオ、またはスクリプト)を取得します。

pguidStreamTypeGUID*outストリームのメジャー タイプを指定する GUID オブジェクトへのポインター。pMediaType パラメーターが NULL の場合、値 GUID_NULL を受け取ります。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
pguidStreamType パラメーターが NULL です。

解説(Remarks)

ストリームのメジャー タイプの一覧については、Media Types を参照してください。

vtbl 4 HRESULT GetStreamNumber(WORD* pwStreamNum)

GetStreamNumber メソッドは、ストリーム番号を取得します。

pwStreamNumWORD*outストリーム番号を格納する WORD へのポインター。ストリーム番号は 1 から 63 の範囲でなければなりません。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
pwStreamNum パラメーターが NULL です。
vtbl 5 HRESULT SetStreamNumber(WORD wStreamNum)

SetStreamNumber メソッドは、ストリーム番号を指定します。

wStreamNumWORDinストリーム番号を格納する WORD。ストリーム番号は 1 から 63 の範囲でなければなりません。

戻り値

このメソッドは常に S_OK を返します。

解説(Remarks)

新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。

vtbl 6 HRESULT GetStreamName(LPWSTR pwszStreamName, WORD* pcchStreamName)

GetStreamName メソッドは、ストリーム名を取得します。

pwszStreamNameLPWSTRoutストリーム名を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。
pcchStreamNameWORD*inout入力時は、pwszStreamName 配列の長さをワイド文字(2 バイト)単位で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端 null 文字を含む名前の実際の長さが格納されます。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pcchStreamName パラメーターが NULL です。
ASF_E_BUFFERTOOSMALL
pcchStreamName パラメーターに格納された名前の値が、pwszStreamName 配列に対して大きすぎます。

解説(Remarks)

GetStreamName は 2 回呼び出す必要があります。1 回目の呼び出しでは、pwszStreamNameNULL を渡します。戻り時に、pcchStreamName が指す値には、ストリーム名を格納するために必要な、終端 null 文字を含むワイド文字数が設定されます。その後、文字列に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwszStreamName として渡すことができます。

ストリーム名は ASF ファイルのヘッダー セクションには書き込まれません。リーダー オブジェクトまたは同期リーダー オブジェクトから IWMStreamConfig インターフェイスを取得した場合、元のストリーム名を取得することはできません。

vtbl 7 HRESULT SetStreamName(LPWSTR pwszStreamName)

SetStreamName メソッドは、ストリーム構成オブジェクトが表すストリームに名前を割り当てます。

pwszStreamNameLPWSTRinストリーム名を格納するワイド文字の null 終端文字列へのポインター。ストリーム名は 256 ワイド文字に制限されます。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pwszStreamName パラメーターが NULL です。

解説(Remarks)

このメソッドは、プロファイルの操作およびファイルの書き込み時における開発者の利便性のためだけに用意されています。このメソッドで割り当てた名前は、プロファイルを使用して作成された ASF ファイルのヘッダー セクションには格納されないため、リーダー オブジェクトまたは同期リーダー オブジェクトを通じては利用できません。

新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。

vtbl 8 HRESULT GetConnectionName(LPWSTR pwszInputName, WORD* pcchInputName)

GetConnectionName メソッドは、ストリームに付けられた入力名を取得します。

pwszInputNameLPWSTRout入力名を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。
pcchInputNameWORD*inout入力時は、pwszInputName 配列の長さをワイド文字(2 バイト)単位で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端 null 文字を含む名前の長さが格納されます。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pcchInputName パラメーターが NULL です。
ASF_E_BUFFERTOOSMALL
pcchInputName パラメーターに格納された名前の値が、pwszInputName 配列に対して大きすぎます。

解説(Remarks)

GetConnectionName は 2 回呼び出す必要があります。1 回目の呼び出しでは、pwszInputNameNULL を渡します。戻り時に、pcchInputName が指す値には、接続名を格納するために必要な、終端 null 文字を含むワイド文字数が設定されます。その後、文字列に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwszInputName として渡すことができます。

接続名は ASF ファイルのヘッダー セクションには書き込まれません。リーダー オブジェクトまたは同期リーダー オブジェクトから IWMStreamConfig インターフェイスを取得した場合、元の接続名を取得することはできません。

vtbl 9 HRESULT SetConnectionName(LPWSTR pwszInputName)

SetConnectionName メソッドは、入力の名前を指定します。作成するプロファイルにマルチ ビット レート相互排他が含まれる場合、相互排他の各ストリームは同じ接続名を持つ必要があります。

pwszInputNameLPWSTRin入力名を格納するワイド文字の null 終端文字列へのポインター。接続名は 256 ワイド文字に制限されます。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pwszInputName パラメーターが NULL です。

解説(Remarks)

このメソッドは、プロファイルの操作およびファイルの書き込み時における開発者の利便性のためだけに用意されています。このメソッドで割り当てた名前は、プロファイルを使用して作成された ASF ファイルのヘッダー セクションには格納されないため、リーダー オブジェクトまたは同期リーダー オブジェクトを通じては利用できません。

新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。

vtbl 10 HRESULT GetBitrate(DWORD* pdwBitrate)

GetBitrate メソッドは、ストリームのビット レートを取得します。

pdwBitrateDWORD*outビット レート(ビット/秒)を格納する DWORD へのポインター。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
pdwbitrate パラメーターが NULL です。
vtbl 11 HRESULT SetBitrate(DWORD pdwBitrate)

SetBitrate メソッドは、ストリームのビット レートを指定します。

pdwBitrateDWORDinビット レート(ビット/秒)を格納する DWORD

戻り値

このメソッドは常に S_OK を返します。

解説(Remarks)

ビット レートは、ASF ファイル内でストリームに割り当てられる 1 秒あたりのビット数であり、オーバーヘッドは含みません。オーディオやビデオなどの圧縮ビット ストリームでは、ビット レートが高いほど品質が高くなります。

新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。

vtbl 12 HRESULT GetBufferWindow(DWORD* pmsBufferWindow)

GetBufferWindow メソッドは、ストリームが受信されてから表示が開始されるまでの最大遅延を取得します。

pmsBufferWindowDWORD*outバッファー ウィンドウ(ミリ秒単位)を指定する変数へのポインター。

戻り値

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

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
pmsBufferWindow パラメーターが NULL です。
vtbl 13 HRESULT SetBufferWindow(DWORD msBufferWindow)

SetBufferWindow メソッドは、ストリームが受信されてから表示が開始されるまでの最大遅延を指定します。

msBufferWindowDWORDinバッファー ウィンドウ(ミリ秒単位)。

戻り値

このメソッドは常に S_OK を返します。

解説(Remarks)

高ビット レートのストリーム(通常は 1 メガビット/秒を超えるもの)では、1 秒の遅延(またはバッファー ウィンドウ)が一般的です。低ビット レートのストリームでは、約 3 秒の遅延がよく使用されます。

バッファー ウィンドウを -1(0xFFFFFFFF)に設定すると、バッファー ウィンドウが不明であることを示します。この場合、ライターがバッファー ウィンドウのサイズを選択します。

ビデオ ストリームでは、バッファー ウィンドウが大きいほど品質が高くなります。

メモ バッファー ウィンドウが大きく異なるストリームを含むファイルを作成すると、問題が発生する場合があります。以前のバージョンの Windows Media Format SDK で作成された再生アプリケーションでは、そのようなファイルのデータを適切にレンダリングできないことがあります。古いプレーヤーで使用するファイルを作成する場合は、任意の 2 つのストリームのバッファー ウィンドウの差が 5 秒を超えないようにする必要があります。
新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMStreamConfig "{96406BDC-2B2B-11D3-B36B-00C04F6108FF}"
#usecom global IWMStreamConfig IID_IWMStreamConfig "{}"
#comfunc global IWMStreamConfig_GetStreamType      3 var
#comfunc global IWMStreamConfig_GetStreamNumber    4 var
#comfunc global IWMStreamConfig_SetStreamNumber    5 int
#comfunc global IWMStreamConfig_GetStreamName      6 var,var
#comfunc global IWMStreamConfig_SetStreamName      7 wstr
#comfunc global IWMStreamConfig_GetConnectionName  8 var,var
#comfunc global IWMStreamConfig_SetConnectionName  9 wstr
#comfunc global IWMStreamConfig_GetBitrate         10 var
#comfunc global IWMStreamConfig_SetBitrate         11 int
#comfunc global IWMStreamConfig_GetBufferWindow    12 var
#comfunc global IWMStreamConfig_SetBufferWindow    13 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。