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

IWMReaderAdvanced3

COM
IID5dc0674b-f04b-4a4e-9f2a-b1afde2c8100継承元IWMReaderAdvanced2自前メソッド開始 vtbl38

公式ドキュメント

IWMReaderAdvanced3 インターフェイスは、リーダーオブジェクトに追加の機能を提供します。

メソッド 2

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

vtbl 38 HRESULT StopNetStreaming()

StopNetStreaming メソッドは、ネットワークストリーミングを停止します。ネットワークから既に受信済みのサンプルは、通常どおり配信されます。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドが完了すると、WMT_END_OF_STREAMING メッセージが OnStatus メソッドに配信されます。

vtbl 39 HRESULT StartAtPosition(WORD wStreamNum, void* pvOffsetStart, void* pvDuration, WMT_OFFSET_FORMAT dwOffsetFormat, FLOAT fRate, void* pvContext)

StartAtPosition メソッドを使用すると、複数のオフセット形式のいずれかを使って、ファイルの再生開始位置を指定できます。

wStreamNumWORDinpvOffsetStartpvDuration が適用されるストリーム番号を格納する WORD。ゼロを渡すと、オフセットの開始位置と再生時間がファイル内のすべてのストリームに適用されることを意味します。ゼロを渡した場合、dwOffsetFormat に指定できる有効な値は WMT_OFFSET_FORMAT_100NSWMT_OFFSET_FORMAT_PLAYLIST_OFFSET のみです。
pvOffsetStartvoid*in

オフセットの開始位置を格納するアドレスへの void ポインター。オフセットの測定単位は dwOffsetFormat によって決まります。また、測定単位によって、ポインターが指す変数のサイズも決まります。オフセット形式ごとに指定できる変数の型を、次の表に示します。

オフセット形式 pvOffsetStart のデータ型
WMT_OFFSET_FORMAT_100NS QWORD
WMT_OFFSET_FORMAT_FRAME_NUMBERS QWORD
WMT_OFFSET_FORMAT_PLAYLIST_OFFSET LONG
WMT_OFFSET_FORMAT_TIMECODE WMT_TIMECODE_EXTENSION_DATA
WMT_OFFSET_FORMAT_APPROXIMATE QWORD
pvDurationvoid*in

再生時間を格納するアドレスへの void ポインター。ゼロを渡すと、ファイルの末尾まで再生が続きます。再生時間の測定単位は dwOffsetFormat によって決まります。また、測定単位によって、ポインターが指す変数のサイズも決まります。オフセット形式ごとに指定できる変数の型を、次の表に示します。

オフセット形式 pvDuration のデータ型
WMT_OFFSET_FORMAT_100NS QWORD
WMT_OFFSET_FORMAT_FRAME_NUMBERS QWORD
WMT_OFFSET_FORMAT_PLAYLIST_OFFSET QWORD
WMT_OFFSET_FORMAT_TIMECODE WMT_TIMECODE_EXTENSION_DATA
WMT_OFFSET_FORMAT_APPROXIMATE QWORD
dwOffsetFormatWMT_OFFSET_FORMATin

WMT_OFFSET_FORMAT 列挙型のメンバーを 1 つ格納する DWORD。有効な値とその意味は次のとおりです。

説明
WMT_OFFSET_FORMAT_100NS オフセットと再生時間を 100 ナノ秒単位で指定します。これは IWMReader::Start メソッドがサポートするオフセット形式と同じです。
WMT_OFFSET_FORMAT_FRAME_NUMBERS オフセットは、再生を開始するビデオフレーム番号で指定します。再生時間はビデオフレーム数です。
WMT_OFFSET_FORMAT_PLAYLIST_OFFSET オフセットは、プレイリスト内へのオフセットで指定します。再生時間は 100 ナノ秒単位で指定します。
WMT_OFFSET_FORMAT_TIMECODE オフセットは SMPTE タイムコード値で指定します。再生時間はカウントではなく、別の SMPTE タイムコード値です。
WMT_OFFSET_FORMAT_APPROXIMATE オフセットと再生時間を 100 ナノ秒単位で指定します。この形式を使用すると、指定した時刻より前にある最も近いクリーンポイントから再生が開始されます。この形式は、プレーヤーアプリケーションのシークバーなど、正確なサンプルが必要でない場合にシーク時間を短縮することを目的としています。
fRateFLOATin再生レートを示す浮動小数点数。標準速度での再生は 1.0 です。数値が大きいほど再生が速くなり、小さいほど遅くなります。ゼロ未満の数値は逆方向のレート(巻き戻し)を示します。有効な範囲は 1.0 ~ 10.0 および -1.0 ~ -10.0 です。
pvContextvoid*inアプリケーションが使用する汎用ポインター。このポインターは、IWMReaderCallback への呼び出し時にアプリケーションへ返されます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
NS_E_INVALID_REQUEST
dwOffsetFormatWMT_OFFSET_FORMAT_FRAME_NUMBERS で、かつ wStreamNum がゼロです。

または

pvOffsetStartNULL(再開を意味します)で、かつリーダーが停止モードになっています。プレーヤーが停止している場合、再生を再開することはできません。

または

pvOffsetStartNULL(再開を意味します)で、かつ pvDurationNULL ではありません。再開に対して再生時間を指定することはできません。

または

リーダーでファイルが開かれていません。

または

fRate が範囲外です。

または

リーダーがブロードキャストストリームを受信しています。ブロードキャストソースからはシークできません。

または

fRate が負(巻き戻しを示す)で、かつ再生時間がファイルの先頭より前まで巻き戻すことになります。

または

dwOffsetFormatWMT_OFFSET_FORMAT_FRAME_NUMBERS で、かつファイルがインデックス化されていない、またはフレームでインデックス化されていません。

E_OUTOFMEMORY
内部的に必要となるメッセージ構造体のメモリを割り当てることができません。

解説(Remarks)

フレームベースのアクセスは、ローカルファイルでのみ利用できます。ストリーミングされるコンテンツに対しては、たとえファイルがフレームでインデックス化されていても、StartAtPosition を使用して開始フレーム番号を指定することはできません。

一時停止した再生を再開する呼び出しを行う場合は、pvOffsetStartNULL を渡すことができます。この場合、pvDuration にも NULL を渡す必要があります。

無効な再生時間を指定しても、StartAtPosition は失敗しません。可能な限り多くのサンプルが配信されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMReaderAdvanced3 "{5DC0674B-F04B-4A4E-9F2A-B1AFDE2C8100}"
#usecom global IWMReaderAdvanced3 IID_IWMReaderAdvanced3 "{}"
#comfunc global IWMReaderAdvanced3_StopNetStreaming  38
#comfunc global IWMReaderAdvanced3_StartAtPosition   39 int,sptr,sptr,int,float,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。