トップページ > 記事閲覧
動画再生とChangeWindowMode
名前:CYARACON 日時: 2016/04/03 02:10

いつもお世話になっています。 現在制作中のゲームにて、動画再生を行いたいのですが、 ウィンドウモードを指定すると、動画ファイルのオープン時にエラーが発生してしまいます。 これは仕様なのでしょうか? (動画再生はフルスクリーンのみ、ウィンドウモードは非サポート?) 参考にサンプル(といっても、ほとんどこのサイトのサンプルですが)を記載します。 ChangeWindowMode( TRUE )があるとエラー、これをコメントにするとOKになります。 ご返信をいただけると助かります。仕様なら諦めます。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Ghand_Movie_h ; int ret_f ; // これを指定すると、[LoadGraph]がエラーになる ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが発生したら終了 } Ghand_Movie_h = LoadGraph( "DATA\\MOVIE\\test006.mpg" ) ; if( Ghand_Movie_h == -1 ) exit ( 55 ) ; // エラー ret_f = PlayMovieToGraph( Ghand_Movie_h ) ; if( ret_f == -1 ) exit ( 55 ) ; // エラー // 描画先の画面を裏画面に SetDrawScreen( DX_SCREEN_BACK ) ; // ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です // 戻り値が1の間は再生状態ですのでループを続けます while( ProcessMessage() == 0 && GetMovieStateToGraph( Ghand_Movie_h ) == 1 ) { // ムービー映像を画面いっぱいに描画します DrawExtendGraph( 0 , 0 , 640 , 480 , Ghand_Movie_h , FALSE ) ; // 画面左上に再生時間を描画します DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Time:%d", TellMovieToGraph( Ghand_Movie_h ) ) ; // 裏画面の内容を表画面に反映します ScreenFlip() ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
メンテ

Page: 1 |

Re: 動画再生とChangeWindowMode ( No.1 )
名前:管理人 日時:2016/04/03 12:53

動画再生はウインドウモードでも行えるようになっています ただ、aviファイルや mpgファイルの再生には実行時の各PCにインストールされているコーデックを 使用していますので、環境によって再生できたりできなかったりします ( 私の環境ではウインドウモードでも mpgファイルを再生できました ) ウインドウモードでのみ再生できないというのは初めてお聞きしましたが、そのようなことも あるのかもしれません… DXライブラリは唯一 ogv 形式( Ogg Theora 形式 )のみ外部のコーデックに頼らず再生することが できますので、よろしければ ogv 形式の採用を検討してみてください m(_ _)m ( avi から ogv への変換は ffmpeg2theora というソフトがお勧めです http://v2v.cc/~j/ffmpeg2theora/download.html )
メンテ
Re: 動画再生とChangeWindowMode ( No.2 )
名前:CYARACON 日時:2016/04/03 21:39

管理人様 >動画再生はウインドウモードでも行えるようになっています ですよねー。(^^;) 流石にそんな仕様は無いと思いましたが。 手持ちのPCはWin7の標準(?)で、メディアプレーヤーをバージョンアップした以外、 特にコーデックは追加で入れていないのですが、 なぜフルスクリーンでしか再生できないのか、 原因を特定するのはちょっと無理そうですね。 ogvファイル、検討してみます。 ありがとうございました。
メンテ
Re: 動画再生とChangeWindowMode ( No.3 )
名前:i6502sx 日時:2016/04/09 18:03

管理人様 ちょっと別件なのですが、CYARACONさんがスレッドの先頭で書かれているコードがちょうど 当てはまるので、ここで追記させていただきます。 0フレーム目から映像のある、30コマ/秒の動画があります。(MPEG1) これを上記コードで再生し、GeForceのshadowPlayで1/60間隔で録画します。 結果、最初の描画時点で0フレーム目は描画されます。(TIME=18となっていました) 次に、このMPEG1をFFMPEG2THEORAでOGVにエンコードした動画で試します。 すると、最初の録画2コマは TIME=0 となっていますが、映像は描画されません。 録画3コマ目(=1/30秒経過後)になると TIME=33 となり映像が描画されます。 この映像は、正しい位置(=1フレーム目)の映像だと思われます。 これは他のOGVで試してみても同様でした。 (0フレーム目から映像があることはTMPGEncで確認しています) つまりOGV形式の場合、動画ファイルの0フレーム目 (1/30秒分) が表示されていないのでは と思われます。ご確認いただけますと幸いです。
メンテ
Re: 動画再生とChangeWindowMode ( No.4 )
名前:管理人 日時:2016/04/11 03:27

ご指摘ありがとうございます 手元の環境でも ogv ファイルの 0フレーム目が描画されていないことを確認できました 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 動画再生とChangeWindowMode ( No.5 )
名前:i6502sx 日時:2016/04/11 17:59

0フレーム目の描画がOKであることを確認いたしました。 ご対応ありがとうございました。 (別件ですので「解決」と書くのもなんか気が引けるので、名前だけにいたします...)
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存