AVI File を再生する

VC++ の MCI(Media Control Interface) で AVI File(動画ファイル)を再生します。
MCI を使うと AVI File(動画ファイル)を簡単に再生することができます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトを作成して下さい。
  2. DialogBox を作成して下さい。
    キャプションとIDを次のように設定して下さい。
    BOX キャプション ID
    DialogBox Dialog IDD_DIALOG1
    Button AVI-PLAY IDOK
    Button CLOSE IDCANCEL
  3. 次のファイルをプロジェクトのフォルダーに格納して下さい。
    再生する AVI ファイルは Windows のフォルダーに格納されているものを使用しました。
    ファイル 説明
    AVI.cpp Windows Main Program
    clock.avi 再生する AVI ファイル
  4. "winmm.lib" をリンクして下さい。
    WinMain では DialogBox を表示するだけです。
  5. DialogBox の CALLBACK 関数です。
    AVI-PLAY ボタンをクリックすると clock.avi の再生を開始します。
    "open clock.avi type AVIVideo style popup alias x" で AVI をオープンします。
    オープンされた x の MCI Device ID を取得してグローバル領域に保存して下さい。
    "put x window at 256 256 0 0" で再生ウインドウのサイズを設定します。
    "play x from 0 notify" で再生を開始します。
    mciSendString() に notify を指定すると、演奏の終了時に MM_MCINOTIFY: がポストされます。
        MCIDEVICEID id;     //MCI Device ID
    
        switch(msg)
        {   case WM_COMMAND:
                switch(LOWORD(wParam))
                {   case IDOK:
                        rc= mciSendString("open clock.avi type AVIVideo style popup alias x",NULL,0,NULL);
                        if (rc)     MessageBox(hDlg,"AVI Open Error","AVI Play",MB_OK);
                        id= mciGetDeviceID("x");
                        if (id==0)  MessageBox(hDlg,"x","GET ID ERROR",MB_OK);
                        rc= mciSendString("put x window at 256 256 0 0",NULL,0,NULL);
                        if (rc)     MessageBox(hDlg,"window size Error","AVI Play",MB_OK);
                        rc= mciSendString("play x from 0 notify",NULL,0,hDlg);
                        if (rc)     MessageBox(hDlg,"play Error","AVI Play",MB_OK);
                        return TRUE;
        
  6. CLOSE ボタンでウインドウをクローズします。
                    case IDCANCEL:
                        PostMessage(hDlg,WM_CLOSE,0,0);
                        return TRUE;
                }
                break;
        
  7. mciSendString() に notify を指定すると、演奏の終了時に MM_MCINOTIFY: がポストされてきます。
    MCI Device ID と再生の終了を確認して AVI を閉じます。
    再度 AVI-PLAY ボタンをクリックすると clock.avi が再生されます。
            case MM_MCINOTIFY:
                if (lParam==(LONG)id && wParam==MCI_NOTIFY_SUCCESSFUL)
                {   rc= mciSendString("stop x",NULL,0,NULL);
                    if (rc)     MessageBox(hDlg,"Stop Error","AVI Play",MB_OK);
                    rc= mciSendString("close x",NULL,0,NULL);
                    if (rc)     MessageBox(hDlg,"Close Error","AVI Play",MB_OK);
                }
                return TRUE;
        
  8. CLOSE ボタンでウインドウをクローズします。
            case WM_CLOSE:
                EndDialog(hDlg, TRUE); 
                return TRUE;
                break;
        
  9. ビルドに続いて実行を行います。
    AVI-PLAY ボタンをクリックすると clock.avi の再生を開始します。
    STOP ボタンをクリックするとプログラムが終了します。

【メモ】

AVI ファイルは、一般に専用のツールで作成するのですが、ネットを検索してもなかなか見つかりません。
比較的手に入りやすい MP2 から AVI に変換するツールを見つけました。
Mpg2avi.lzh

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)