Microsoft DirectX 8.0

IMultiMediaStream インターフェイス

IMultiMediaStream インターフェイスは、マルチメディア ストリームを制御し、その基盤となるメディア ストリームにアクセスするメソッドを提供する。マルチメディア ストリームは、最上位レベルのストリーミング オブジェクトであり、1 つ以上のメディア ストリームを格納することができる。個々のメディア ストリームがメディア タイプ固有 (オーディオ、ビデオなど) であるのに対し、マルチメディア ストリームは、メディア タイプの異なる多数のストリームへのアクセスを提供する必要があるため、すべてのタイプに共通である。IMultiMediaStream インターフェイスのメソッドを使用すると、特定のストリームへのポインタを列挙および取得できる。また、IMediaStream インターフェイスのメソッドを使用すると、メディア ストリームの動作を個別に制御できる。

マルチメディア ストリーミング インターフェイスを実装するサンプル コードについては、「マルチメディア ストリーミングのサンプル コード」を参照すること。

特定のタイプのメディア ストリームに使用するコンテナを作成するには、このインターフェイスを実装する。

アプリケーションでマルチメディア ストリームの基盤となるタイプ固有のストリームを列挙および制御するには、このインターフェイスを使用する。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IMultiMediaStream メソッド説明
GetInformation マルチメディア ストリームの能力およびストリーム タイプを取得する。
GetMediaStream 指定された目的 ID を持つメディア ストリームを取得する。
EnumMediaStreams 0 から始まるインデックスを指定して、マルチメディア ストリームからメディア ストリームを取得する。
GetState マルチメディア ストリームの現在の状態を取得する。
SetState メディア ストリームを実行状態または停止状態に切り替える。
GetTime マルチメディア ストリームのクロックから現在の時間を取得する (クロックがある場合)。
GetDuration メディア ストリームの時間幅を取得する。
Seek 派生メディア ストリームすべてのシーク位置を、指定された時間に設定する。
GetEndOfStreamEventHandle ストリームが再生を完了したときに発行されるイベントのハンドルを取得する。

IMultiMediaStream::EnumMediaStreams

IMultiMediaStream インターフェイス

0 から始まるインデックスを指定して、マルチメディア ストリームからメディア ストリームを取得する。

構文

HRESULT EnumMediaStreams(

  long Index,
  IMediaStream **ppMediaStream
  );

パラメータ

Index
[in] 確認するストリーム配列のインデックス。
ppMediaStream
[out] IMediaStream インターフェイス オブジェクトへのポインタのアドレス。メソッド終了時には、指定されたインデックス位置にあるストリームへのポインタが格納される。

戻り値

次のいずれかの値を返す。
E_POINTER ppMediaStream ポインタが無効。
S_FALSE Index が範囲外。列挙するストリームが残っていない。この値が返される場合、ppMediaStream は NULL に設定される。
S_OK 成功。

注意

このメソッドは、ストリームの列挙が完了したことを示す S_FALSE が返されるまで、呼び出さなければならない。

IMultiMediaStream::GetDuration

IMultiMediaStream インターフェイス

メディア ストリームの時間幅を返す。

構文

HRESULT GetDuration(
  STREAM_TIME *pDuration
  );

パラメータ

pDuration
[out] メディアの時間幅が格納される STREAM_TIME 値へのポインタ。

戻り値

次のいずれかの値を返す。
E_POINTER pDuration の値が無効。
MS_E_WRITESTREAM 書き込み可能なメディア ストリームなので、時間幅がない。
S_FALSE ストリームにライブ データが含まれているか、またはこのメソッドが時間幅を判断できない。メソッド終了時には、pDuration が 0 に設定される。
S_OK ストリームに記録済みメディアが含まれている。メソッド終了時には、pDuration にメディアの時間幅が格納される。

IMultiMediaStream::GetEndOfStreamEventHandle

IMultiMediaStream インターフェイス

ストリームが再生を完了したときに発行されるイベントのハンドルを取得する。

構文

HRESULT GetEndOfStreamEventHandle(

  HANDLE *phEOS
  );

パラメータ

phEOS
[out] 再生を完了したときに現在のオブジェクトから返されたイベント HANDLE へのポインタ。オブジェクトに HANDLE が関連付けられていない場合、この値は NULL となる。

戻り値

成功した場合は、S_OK を返す。NULL の必須パラメータがある場合は、E_POINTER を返す。

注意

Microsoft® Win32® の WaitForSingleObject 関数と WaitForMultipleObjects 関数は、取得されたハンドルを使って再生の完了を待つ。

IMultiMediaStream::GetInformation

IMultiMediaStream インターフェイス

指定されたメディア タイプと一致するメディア ストリームの能力を取得する。

構文

HRESULT GetInformation(
  DWORD *pdwFlags,
  STREAM_TYPE *pStreamType
  );

パラメータ

pdwFlags
[out] 以下のフラグを 1 つ以上組み合わせたものが格納される値へのポインタ。NULL の場合がある。
MMSSF_ASYNCHRONOUS ストリームがサンプルの同期更新をサポートする。IMultiMediaStream の実装ではすべて同期更新がサポートされる。このフラグはそれを確認するものである。
MMSSF_HASCLOCK ストリームにクロックがある。
MMSSF_SUPPORTSEEK ストリームがシークをサポートしている。
pStreamType
[out] 派生メディア ストリームに対応するメディア タイプ情報が格納される STREAM_TYPE 列挙型へのポインタ。NULL の場合がある。

戻り値

HRESULT 値を返す。

注意

ストリームの能力には、クロックの有無、シークをサポートするかどうか、および非同期更新をサポートするかどうかが含まれる。

IMultiMediaStream::GetMediaStream

IMultiMediaStream インターフェイス

指定された目的 ID を持つメディア ストリームを取得する。

構文

HRESULT GetMediaStream(
  REFMSPID idPurpose,
  IMediaStream **ppMediaStream
  );

パラメータ

idPurpose
目的のストリームを指定する値。
ppMediaStream
IMediaStream インターフェイスへのポインタのアドレス。このポインタに、目的のメディア ストリームのアドレスを受け取る。

戻り値

次のいずれかの値を返す。
E_POINTER ppMediaStream ポインタが無効。
MS_E_NOSTREAM 指定された目的 ID を持つストリームがない。
S_OK 成功。

注意

idPurpose の目的 ID と一致するストリームが存在する場合には、ppMediaStream パラメータはストリームを指し、その参照カウントがインクリメントされる。

MSPID_PrimaryVideo および MSPID_PrimaryAudio は、それぞれプライマリ ビデオ ストリームおよびプライマリ ビデオ ストリームを表す。これらは最もよく使用される目的 ID である。

IMultiMediaStream::GetState

IMultiMediaStream インターフェイス

マルチメディア ストリームの現在の状態を取得する。

構文

HRESULT GetState(

  STREAM_STATE *pCurrentState
  );

パラメータ

pCurrentState
[out] 現在のマルチメディア ストリームの状態が格納される STREAM_STATE 列挙型へのポインタ。

戻り値

成功した場合は、S_OK を返す。pCurrentState が無効な場合は、E_POINTER を返す。

IMultiMediaStream::GetTime

IMultiMediaStream インターフェイス

マルチメディア ストリームのクロックから現在の時間を取得する (クロックがある場合)。

構文

HRESULT GetTime(

  STREAM_TIME *pCurrentTime
  );

パラメータ

pCurrentTime
[out] 現在の時間が格納される STREAM_TIME 値へのポインタ (メディア ストリームにクロックがある場合)。

戻り値

次のいずれかの値を返す。
E_POINTER pCurrentTime ポインタが無効。
S_FALSE ストリームにクロックがない。*pCurrentTime は 0 となる。
S_OK ストリームにクロックがあり、メソッドは成功した。pCurrentTime には現在の時間が格納される。

注意

ストリームにクロックがない場合、このメソッドは、*pCurrentTime に 0 を設定し、S_FALSE を返す。ストリームにクロックがある場合、ストリーム サンプルの時間は、ストリームのクロックに対する相対時間となる。

STREAM_TIME は LONGLONG 値として定義されている。

IMultiMediaStream::Seek

IMultiMediaStream インターフェイス

含まれるメディア ストリームすべてのシーク位置を、指定された時間に設定する。

構文

HRESULT Seek(
  STREAM_TIME SeekTime
  );

パラメータ

SeekTime
[in] シーク時間を指定する STREAM_TIME 値。

戻り値

次のいずれかの値を返す。
E_POINTER ポインタの 1 つが無効。
MS_E_NOSEEKING シークをサポートしないメディア ストリームがある。
MS_E_WRITESTREAM 書き込み可能なストリームなので、シークをサポートしない。
S_OK 成功。

注意

このメソッドは、シークをサポートしないストリームには機能しない。このメソッドを呼び出す前に、IMultiMediaStream::GetInformation を呼び出してストリームの能力を取得する。取得された値に MMSSF_SUPPORTSEEK フラグが含まれれば、このメソッドを呼び出すことができる。

クロックがあるストリームをシークすることにより、現在の時間が予測不可能な値 (たとえば目的のシーク時間より前の時間など) に変わる可能性がある。その結果、メソッドは失敗する。

このメソッドは、マルチメディア ストリーム オブジェクトから派生したすべてのメディア ストリーム内の指定された時間までシークする。

IMultiMediaStream::SetState

IMultiMediaStream インターフェイス

メディア ストリームを実行状態または停止状態に切り替える。

構文

HRESULT SetState(
  STREAM_STATE NewState
  );

パラメータ

NewState
[in] メディア ストリームの新しい状態を指定する STREAM_STATE 列挙値。

戻り値

S_OK を返す。

注意

ストリームを STREAMSTATE_STOP に切り替えると、このメソッドは保留されているデータをすべて削除する。