|
1.概要
本ページは、私がフリーソフトを作成する際に使用したDivX再生のコーディング
手法を紹介することを目的としています。
紹介する手法は、必ずしもこれでないと実現できないというわけではありません。
方法は他にもたくさんあると思います。
2.AVI再生するに当たって
DivX再生には、mciSendString関数を使用しています。
この関数は、コマンドを文字列で記述し、引数で渡すと、
コマンド指示通りに動作してくれる、非常に扱いやすい関数です。
引数は、以下の通りです。
・PCTSTR pszCommand ・・・コマンド文字列
・PTSTR pszReturnString・・・リターン情報を受け取るバッファ
・UINT cchReturn ・・・バッファサイズ
・HANDLE hwndCallback ・・・コールバックウィンドウハンドル
3.AVI再生の手順
DivXを再生する手順は、ファイルのリード/ライト手順に似ています。
以下に、手順を載せます。
(1)ファイルオープン
(2)再生前準備
(3)再生開始
(4)一時停止
(5)再生再開
(6)再生位置をファイル先頭へ移動
(7)再生位置をファイル終端へ移動
(8)任意の位置へ移動
(9)再生停止
(10)ファイルクローズ
4.コマンド詳細
では、3.で紹介した手順を行う為のコマンドを説明します。
(1)ファイルオープン
ファイルオープンは、シンプルです。
mciSendString("open \"ファイル名\" type avivideo alias divxs notify", NULL, 0, hWnd);
ファイル名を\"で囲んでいることに注意して下さい!!
これをしないと、フルパスでファイルを指定することが出来ません。
しかし!!これでは、DivX 5までしか再生出来ません!
DivX 6.0以降も再生出来るようにするには、コマンドを以下のように変更します。
mciSendString("open \"ファイル名\" type mpegvideo alias divxs notify", NULL, 0, hWnd);
(2)再生前準備
再生前準備は、いろいろとあります。
例えば、再生時間をミリ秒に指定する場合は、以下のようにします。
mciSendString("set divxs time format milliseconds", NULL, 0, hWnd);
総再生時間を知りたい場合は、以下のようにします。
char szbuf[32];
mciSendString("status divxs length", szbuf, sizeof(szbuf), NULL);
szbufに、総再生時間が返ってきます。
(3)再生開始
再生開始も簡単です。
mciSendString("play divxs", NULL, 0, hWnd);
(4)一時停止
一時停止も簡単です。
mciSendString("pause divxs", NULL, 0, hWnd);
(5)再生再開
再生再開は、一時停止中にのみ有効です。
mciSendString("resume divxs", NULL, 0, hWnd);
(6)再生位置をファイル先頭へ移動
下記コマンドを実行することで、再生位置はファイルの先頭に戻ります。
但し、再生も止まるので、継続して再生したい場合は、
(3)を実行する必要があります。
mciSendString("seek divxs to start", NULL, 0, hWnd);
(7)再生位置をファイル終端へ移動
下記コマンドを実行することで、再生位置はファイルの終端に戻ります。
(6)と同様、再生が止まるので、継続して再生したい場合は、
(3)を実行する必要があります。
mciSendString("seek divxs to end", NULL, 0, hWnd);
(8)任意の位置へ移動
下記コマンドを実行することで、再生位置を任意の場所へ移すことが出来ます。
(6)と同様、再生が止まるので、継続して再生したい場合は、
(3)を実行する必要があります。
下記の例は、再生時間をミリ秒に設定し、2秒へ移動させる例です。
mciSendString("seek divxs to 2000", NULL, 0, hWnd);
(9)再生停止
再生停止は簡単です。
mciSendString("stop divxs", NULL, 0, hWnd);
(10)ファイルクローズ
ファイルクローズも簡単です。
mciSendString("close divxs", NULL, 0, hWnd);
<質問・要望など>
上記内容に対しての質問、要望などを、是非お聞かせ下さい。
以下のメールフォームか、掲示板へ書き込みをお願いします。
メール送信フォーム
掲示板
|