IWMStreamConfig
COM公式ドキュメント
IWMStreamConfig インターフェイスは、ストリーム構成オブジェクトの主要なインターフェイスです。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetStreamType メソッドは、ストリームのメジャー タイプ(オーディオ、ビデオ、またはスクリプト)を取得します。
| pguidStreamType | GUID* | out | ストリームのメジャー タイプを指定する GUID オブジェクトへのポインター。pMediaType パラメーターが NULL の場合、値 GUID_NULL を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pguidStreamType パラメーターが NULL です。 |
解説(Remarks)
ストリームのメジャー タイプの一覧については、Media Types を参照してください。
GetStreamNumber メソッドは、ストリーム番号を取得します。
| pwStreamNum | WORD* | out | ストリーム番号を格納する WORD へのポインター。ストリーム番号は 1 から 63 の範囲でなければなりません。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pwStreamNum パラメーターが NULL です。 |
SetStreamNumber メソッドは、ストリーム番号を指定します。
| wStreamNum | WORD | in | ストリーム番号を格納する WORD。ストリーム番号は 1 から 63 の範囲でなければなりません。 |
戻り値
このメソッドは常に S_OK を返します。
解説(Remarks)
新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。
GetStreamName メソッドは、ストリーム名を取得します。
| pwszStreamName | LPWSTR | out | ストリーム名を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。 |
| pcchStreamName | WORD* | inout | 入力時は、pwszStreamName 配列の長さをワイド文字(2 バイト)単位で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端 null 文字を含む名前の実際の長さが格納されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pcchStreamName パラメーターが NULL です。 | |
|
pcchStreamName パラメーターに格納された名前の値が、pwszStreamName 配列に対して大きすぎます。 |
解説(Remarks)
GetStreamName は 2 回呼び出す必要があります。1 回目の呼び出しでは、pwszStreamName に NULL を渡します。戻り時に、pcchStreamName が指す値には、ストリーム名を格納するために必要な、終端 null 文字を含むワイド文字数が設定されます。その後、文字列に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwszStreamName として渡すことができます。
ストリーム名は ASF ファイルのヘッダー セクションには書き込まれません。リーダー オブジェクトまたは同期リーダー オブジェクトから IWMStreamConfig インターフェイスを取得した場合、元のストリーム名を取得することはできません。
SetStreamName メソッドは、ストリーム構成オブジェクトが表すストリームに名前を割り当てます。
| pwszStreamName | LPWSTR | in | ストリーム名を格納するワイド文字の null 終端文字列へのポインター。ストリーム名は 256 ワイド文字に制限されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pwszStreamName パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、プロファイルの操作およびファイルの書き込み時における開発者の利便性のためだけに用意されています。このメソッドで割り当てた名前は、プロファイルを使用して作成された ASF ファイルのヘッダー セクションには格納されないため、リーダー オブジェクトまたは同期リーダー オブジェクトを通じては利用できません。
新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。
GetConnectionName メソッドは、ストリームに付けられた入力名を取得します。
| pwszInputName | LPWSTR | out | 入力名を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。 |
| pcchInputName | WORD* | inout | 入力時は、pwszInputName 配列の長さをワイド文字(2 バイト)単位で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端 null 文字を含む名前の長さが格納されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pcchInputName パラメーターが NULL です。 | |
|
pcchInputName パラメーターに格納された名前の値が、pwszInputName 配列に対して大きすぎます。 |
解説(Remarks)
GetConnectionName は 2 回呼び出す必要があります。1 回目の呼び出しでは、pwszInputName に NULL を渡します。戻り時に、pcchInputName が指す値には、接続名を格納するために必要な、終端 null 文字を含むワイド文字数が設定されます。その後、文字列に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwszInputName として渡すことができます。
接続名は ASF ファイルのヘッダー セクションには書き込まれません。リーダー オブジェクトまたは同期リーダー オブジェクトから IWMStreamConfig インターフェイスを取得した場合、元の接続名を取得することはできません。
SetConnectionName メソッドは、入力の名前を指定します。作成するプロファイルにマルチ ビット レート相互排他が含まれる場合、相互排他の各ストリームは同じ接続名を持つ必要があります。
| pwszInputName | LPWSTR | in | 入力名を格納するワイド文字の null 終端文字列へのポインター。接続名は 256 ワイド文字に制限されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pwszInputName パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、プロファイルの操作およびファイルの書き込み時における開発者の利便性のためだけに用意されています。このメソッドで割り当てた名前は、プロファイルを使用して作成された ASF ファイルのヘッダー セクションには格納されないため、リーダー オブジェクトまたは同期リーダー オブジェクトを通じては利用できません。
新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。
GetBitrate メソッドは、ストリームのビット レートを取得します。
| pdwBitrate | DWORD* | out | ビット レート(ビット/秒)を格納する DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pdwbitrate パラメーターが NULL です。 |
SetBitrate メソッドは、ストリームのビット レートを指定します。
| pdwBitrate | DWORD | in | ビット レート(ビット/秒)を格納する DWORD。 |
戻り値
このメソッドは常に S_OK を返します。
解説(Remarks)
ビット レートは、ASF ファイル内でストリームに割り当てられる 1 秒あたりのビット数であり、オーバーヘッドは含みません。オーディオやビデオなどの圧縮ビット ストリームでは、ビット レートが高いほど品質が高くなります。
新しい値は、IWMProfile::ReconfigStream を呼び出すまでプロファイルに反映されません。
GetBufferWindow メソッドは、ストリームが受信されてから表示が開始されるまでの最大遅延を取得します。
| pmsBufferWindow | DWORD* | out | バッファー ウィンドウ(ミリ秒単位)を指定する変数へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pmsBufferWindow パラメーターが NULL です。 |
SetBufferWindow メソッドは、ストリームが受信されてから表示が開始されるまでの最大遅延を指定します。
| msBufferWindow | DWORD | in | バッファー ウィンドウ(ミリ秒単位)。 |
戻り値
このメソッドは常に S_OK を返します。
解説(Remarks)
高ビット レートのストリーム(通常は 1 メガビット/秒を超えるもの)では、1 秒の遅延(またはバッファー ウィンドウ)が一般的です。低ビット レートのストリームでは、約 3 秒の遅延がよく使用されます。
バッファー ウィンドウを -1(0xFFFFFFFF)に設定すると、バッファー ウィンドウが不明であることを示します。この場合、ライターがバッファー ウィンドウのサイズを選択します。
ビデオ ストリームでは、バッファー ウィンドウが大きいほど品質が高くなります。
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 方式にも切替可。#define global IID_IWMStreamConfig "{96406BDC-2B2B-11D3-B36B-00C04F6108FF}" #usecom global IWMStreamConfig IID_IWMStreamConfig "{}" #comfunc global IWMStreamConfig_GetStreamType 3 sptr #comfunc global IWMStreamConfig_GetStreamNumber 4 sptr #comfunc global IWMStreamConfig_SetStreamNumber 5 int #comfunc global IWMStreamConfig_GetStreamName 6 sptr,sptr #comfunc global IWMStreamConfig_SetStreamName 7 wstr #comfunc global IWMStreamConfig_GetConnectionName 8 sptr,sptr #comfunc global IWMStreamConfig_SetConnectionName 9 wstr #comfunc global IWMStreamConfig_GetBitrate 10 sptr #comfunc global IWMStreamConfig_SetBitrate 11 int #comfunc global IWMStreamConfig_GetBufferWindow 12 sptr #comfunc global IWMStreamConfig_SetBufferWindow 13 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。