Microsoft DirectX 8.0

MediaDet オブジェクト

メディア ファイルに関して、ストリームの数とタイプ、時間幅、各ストリームのフレーム レートなどの情報を取得する。このインターフェイスには、ビデオ ストリームからポスター フレームを取得するメソッドも含まれている。

ファイルに関する情報を取得するには、以下の手順を実行する。

  1. MediaDet オブジェクトの新しいインスタンスを作成する。
  2. Filename プロパティにソース ファイルの名前を設定する。
  3. OutputStreams プロパティから、ソース内の出力ストリームの数を取得する。
  4. CurrentStream プロパティに、特定のストリームを設定する。
  5. 次のプロパティのいずれかを取得する : StreamTypeStreamMediaTypeStreamLength、または FrameRate

ポスター フレームを取得するには、WriteBitmapBits を呼び出す。このメソッドを呼び出すと、MediaDet オブジェクトはビットマップ グラブ モードという新しいモードに設定される。前述の情報取得メソッドは、このモードでは動作しない。そのため、情報の取得はポスター フレームの取得の前に行う必要がある。 または、ストリームごとに MediaDet オブジェクトの新しいインスタンスを作成する。

次のコードは、このオブジェクトの使用方法の例である。

Dim Det As New MediaDet
Const VideoGUID As String = "{73646976-0000-0010-8000-00AA00389B71}"
bFoundVidStream = False

Det.FileName = "C:\Media\Example.avi"

' ビデオ ストリームを検索する
For i = 0 To Det.OutputStreams - 1
Det.CurrentStream = i
StreamType = Det.StreamTypeB
If StrComp(StreamType, VideoGUID, vbTextCompare) = 0 Then
bFoundVidStream = True
Exit For
End If
Next

If bFoundVidStream Then
' 時間幅を使ってラベルを更新する
VideoInfo.Caption = Det.FileName + ":" + Str(Det.StreamLength) + " seconds"
    
' ポスター フレームをロードする
TempFile = "C:\Temp.bmp"
Preview.ScaleMode = vbPixels  ' Scale twips to pixels.
Det.WriteBitmapBits 0, Preview.ScaleWidth, Preview.ScaleHeight, TempFile
Preview.Picture = LoadPicture(TempFile)
End If

プロパティ

CurrentStreamMediaDet オブジェクトが現在使用しているストリームの数。
FilenameMediaDet オブジェクトが現在使用しているソース ファイルの名前。
FilterVisual Basic ではサポートされていない。
OutputStreamsメディア ソースに含まれる出力ストリームの数。
FrameRate現在のストリームのフレーム レート (1 秒あたりのフレーム数)。
StreamLength現在のストリームの時間幅、単位は秒。
StreamMediaTypeVisual Basic ではサポートされていない。
StreamTypeVisual Basic ではサポートされていない。
StreamTypeB現在のストリームのメディア タイプの GUID を表す文字列。

メソッド

EnterBitmapGrabModeMediaDet オブジェクトをビットマップ グラブ モードに切り替え、フィルタ グラフの指定の時間をシークする。
GetBitmapBitsVisual Basic ではサポートされていない。
GetSampleGrabberVisual Basic ではサポートされていない。
WriteBitmapBits指定されたメディア タイムのポスター フレームを取得し、それをファイルに書き込む。

CurrentStream プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

MediaDet オブジェクトが現在使用しているストリームの数。読み取り/書き込み。

構文

object.CurrentStream As Long

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

Filename プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

MediaDet オブジェクトが現在使用しているソース ファイルの名前。読み取り/書き込み。

構文

object.Filename As String

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

Filter プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

Visual Basic ではサポートされていない。

構文

object.Filter As Unknown

FrameRate プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

現在のストリームのフレーム レート (1 秒あたりのフレーム数)。読み取り専用。

構文

object.FrameRate As Double

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

注意

このストリームは、ビデオ ストリームでなければならない。このプロパティは、ASF ファイルに対しては無効である。MediaDet オブジェクトがビットマップ グラブ モードの場合、このプロパティは無効である。詳細については、「EnterBitmapGrabMode」を参照すること。

このプロパティを取得するには、先に Filename プロパティと CurrentStream プロパティを設定しておかなければならない。

OutputStreams プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

メディア ソースに含まれる出力ストリームの数。読み取り専用。

構文

object.OutputStreams As Long

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

注意

このプロパティを取得するには、先に Filename プロパティを設定しておかなければならない

MediaDet オブジェクトがビットマップ グラブ モードの場合、このプロパティは無効である。詳細については、「EnterBitmapGrabMode」を参照すること。

StreamLength プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

現在のストリームの時間幅、単位は秒。

構文

object.StreamLength As Double

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

注意

このプロパティを取得するには、先に Filename プロパティと CurrentStream プロパティを設定しておかなければならない。

MediaDet オブジェクトがビットマップ グラブ モードの場合、このプロパティは無効である。詳細については、「EnterBitmapGrabMode」を参照すること。

StreamMediaType プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

Visual Basic ではサポートされていない。

構文

object.get_StreamMediaType As _AMMediaType

StreamType プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

Visual Basic ではサポートされていない。

構文

object.StreamType As GUID

StreamTypeB プロパティ (MediaDet オブジェクト)

MediaDet オブジェクト

現在のストリームのメディア タイプの GUID を表す文字列。読み取り専用。

構文

object.StreamTypeB As String

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。

注意

文字列の書式は次のように設定されている: {73647561-0000-0010-8000-00AA00389B71}。

このプロパティを取得するには、先に Filename プロパティと CurrentStream プロパティを設定しておかなければならない。MediaDet オブジェクトがビットマップ グラブ モードの場合、このプロパティは無効である。詳細については、「EnterBitmapGrabMode」を参照すること。

EnterBitmapGrabMode メソッド (MediaDet オブジェクト)

MediaDet オブジェクト

MediaDet オブジェクトをビットマップ グラブ モードに切り替え、フィルタ グラフの指定の時間をシークする。

構文

object.EnterBitmapGrabMode(
SeekTime As Double
)

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。
SeekTime
グラフをシークする時間 (秒単位)。

エラー コード

メソッドでの処理が失敗するとエラーが発生し、Err.Number には次のいずれかの値が設定される場合がある。

E_INVALIDARG無効な引数。
VFW_E_INVALIDMEDIATYPEファイルはビデオ ストリームを持っていない。
VFW_E_TIME_EXPIREDシークできなかった。

注意

このメソッドを呼び出すには、先に Filename プロパティと CurrentStream プロパティを設定しておかなければならない。

このメソッドは、サンプル グラバ フィルタをフィルタ グラフに挿入する。MediaDet オブジェクトがビットマップ グラブ モードになったなら、MediaDet の各種の情報取得メソッドは機能しない。

GetBitmapBits メソッドおよび WriteBitmapBits メソッドも、オブジェクトをビットマップ グラブ モードに設定する。

GetBitmapBits メソッド (Media オブジェクト)

MediaDet オブジェクト

Visual Basic ではサポートされていない。

構文

object.GetBitmapBits(
StreamTime As Double, 
pBufferSize As Long, 
pBuffer As Byte, 
Width As Long, 
Height As Long
)

GetSampleGrabber メソッド (MediaDet オブジェクト)

MediaDet オブジェクト

Visual Basic ではサポートされていない。

構文

object.GetSampleGrabber( 
ppVal As SampleGrabber
)

WriteBitmapBits メソッド (MediaDet オブジェクト)

MediaDet オブジェクト

指定されたメディア タイムのポスター フレームを取得し、それをファイルに書き込む。

構文

object.WriteBitmapBits(
StreamTime As Double, 
Width As Long, 
Height As Long, 
Filename As String
)

パラメータ

object
結果が MediaDet オブジェクトになるオブジェクト式。
StreamTime
ポスター フレームを取得する時間 (秒単位)。
Width
ポスター フレーム イメージの幅 (ピクセル単位)。
Height
ポスター フレーム イメージの高さ (ピクセル単位)。
Filename
ポスター フレームを保存するファイルのパス。ファイルが既に存在する場合、このメソッドはそのファイルにオーバーライドする。

エラー コード

メソッドでの処理が失敗するとエラーが発生し、Err.Number には次のいずれかの値が設定される場合がある。

E_NOINTERFACEサンプル グラバ フィルタをグラフに追加できなかった。
E_FAIL失敗。
E_OUTOFMEMORYメモリ不足。
E_UNEXPECTED予期しないエラー。
STG_E_ACCESSDENIEDファイルをオーバーライドできない。
VFW_E_INVALIDMEDIATYPE無効なメディア タイプ。

注意

このメソッドを呼び出すには、先に Filename プロパティと CurrentStream プロパティを設定しておかなければならない。

このメソッドは、MediaDet オブジェクトをビットマップ グラブ モードに設定する。このメソッドが呼び出された後は、オブジェクトの新しいインスタンスを作成しなければ、IMediaDet の各種のストリーム情報取得メソッドは機能しない。