トップページ > 記事閲覧
DxLibで再生可能な動画の形式について
名前:Citrine 日時: 2017/06/04 20:19

いつもお世話になっております。 VC++版DXライブラリ3.18cにて、H.264エンコードのMP4動画ファイルをPlayMovieToGraphで再生しようとしたところ、エラーで再生できませんでした。 リファレンスや質問掲示板を探しましたが、再生できる動画形式の情報が曖昧で混乱しています。 以上を踏まえて2つ質問させていただきます。 1. 現時点(3.18c)で再生に対応している動画のエンコード及びコンテナ形式を教えてください 2. 今後、H.264などのエンコード形式に対応する予定はありますか 当方の環境も記しておきます OS:Windows 10 Ver.1703 開発環境:Visual Studio Community 2017 DXライブラリバージョン:3.18c 再生したい動画ファイルの情報: 854x480 8Bit AVC/H.264 High@3.1 Unspecified Progressive 29.99fps 400.89kb/s AAC 44.1kHz 2.0ch(2/0 L+R) HE(LC) 319.62kb/s ISO Base Media v1 よろしくお願いします。
メンテ

Page: 1 | 2 |

Re: DxLibで再生可能な動画の形式について ( No.20 )
名前:774 日時:2017/06/19 23:20

当方でもCitrineさんが書かれている状況が見られました。(SDが無いので色ずれは未検証) 1920x1080 29.97fps ---> △ 再生・シークOK。ただし終了しないことが1回あった (SetAlwaysRunFlagはFALSE) 1920x1080 60fps ---> × 再生後数十秒で動画が停止する。そのときCPU負荷はガクッと下がる 1280x720 29.97fps ---> × 例外発生 1280x720 60fps ---> × 例外発生 1708x960 30fps ---> × 例外発生
メンテ
Re: DxLibで再生可能な動画の形式について ( No.21 )
名前:管理人 日時:2017/06/20 00:53

お試しいただきありがとうございます 手元の環境ではエラー終了はしませんでしたが、1280x720の動画が正常に再生されない( 色がずれる )現象を確認しました こちらはメモリの不正なアクセスを行ってしまっているバグで、このバグを修正することで恐らく動画再生直後に エラーが発生する現象は解消できたと思いますので、何度も申し訳ありませんがよろしければこちらの修正バージョンをお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) > 2. 色の乱れ,ずれが生じる 今度こそ修正できたと思います > @GetMovieTotalFrameToGraph()が、.mp4の時は-1を返すようです。(.ogvはOK) すみません、失念していました 手元では実装が完了しましたので、次のアップの時には -1 が返らないようになっています m(_ _;m ( すみません、ビルドに1時間以上掛かるので、本日はアップできません orz ) ただ、Media Foundation は『フレーム数』を取得することができず『再生時間』と 『フレームレート』から算出するので、実際のフレーム数とは±1フレーム異なる値が 返るかもしれません… > A以下のように組んだ場合、.ogvでは表示されますが、.mp4では真っ黒になります。 停止状態での Seek でも真っ黒にならないようにしてみました、よろしければお試しください > 1920x1080@60pは30〜50秒ほどでアプリが応答しなくなります。 > 1920x1080 60fps ---> × 再生後数十秒で動画が停止する。そのときCPU負荷はガクッと下がる こちらは手元では再現しませんでした デコード処理が間に合わないと現象が発生するのかと思い、手元で 1920x1080 60fps の動画を二つ同時に 再生したり、再生しながらDXライブラリのビルドを行いCPU使用率100%の状態にして 再生がカクカクの状態にしたりしてみたのですが、応答しなくなることはありませんでした… 徐々にコマ落ちが激しくなり、30〜50秒ほどで正常に動作しなくなる感じでしょうか? それとも30〜50秒経過すると突然停止するのでしょうか? 因みに手元の環境は OS: Windows 7 Ultimate Service Pack 1 64bit CPU:Intel Core i7-3770@3.50GHz RAM:32GB GPU:NVIDIA GeForce GTX 660 Ti (VRAM 2GB) で、比較的 Citrineさんの環境と近いと思います( Windows10 ではないのが大きいかもしれませんが ) > SetAlwaysRunFlag(TRUE)の件はメインループの継続式にProcessMessage() == 0を入れているので恐らく別の原因だと思われます。 > また、この版になってからDebug,Release問わず高確率で発生するようになってしまいました。 > 1920x1080 29.97fps ---> △ 再生・シークOK。ただし終了しないことが1回あった (SetAlwaysRunFlagはFALSE) こちらも何回試しても発生しませんでした 再生直後に異常終了するバグはメモリの不正なアクセスを行っていたことが原因だったので、 もしかしたらそのバグの修正に伴いこちらの現象も直っているかもしれません… > 1708x960 30fps ---> × 例外発生 こちらの解像度のmp4ファイルが手元になかったので試せていませんが、恐らく例外は発生しなくなったと思います
メンテ
Re: DxLibで再生可能な動画の形式について ( No.22 )
名前:管理人 日時:2017/06/20 02:49

すみません、恐らく > 1920x1080@60pは30〜50秒ほどでアプリが応答しなくなります。 の原因がわかりました リソースの解放処理にバグがあり、メモリを無尽蔵に消費するようになってしまっていました ( 手元の環境では 64bit ビルドで行っていて、PCの搭載メモリも多いためメモリ不足に陥らなかった ) 現在ビルドしていますので、1〜2時間後には修正版がアップできると思います m(_ _;m <追記> メモリリーク修正版をアップしました m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: DxLibで再生可能な動画の形式について ( No.23 )
名前:774 日時:2017/06/20 19:54

メモリ使用量も見てみました。MP4では使用量が徐々に増えていきます。  サイズ FPS 長さ 形式   タスクマネージャで見たメモリ使用量 ----------------------------------------------------------------------- @1280x720 60fps  0:10 MP4   110-->117MB (※短すぎてあまり参考にはならない) A1280x720 29.97fps 2:10 MP4   110MB--->180MB B1708x960 30fps  2:24 MP4   例外発生 (下記コードのWaitTimerのところで止まる) C1708x960 30fps  2:24 OGV   119MBで安定 D1920x1080 60fps  4:21 MP4   190MB--->1766MB(!) E1920x1080 30fps 2:20 MP4 200--->500MB(!) F1920x1080 30fps 2:20 OGV 142MBで安定 ・CFはOGVで、問題ありません。メモリ使用量は最初しばらくゆるやかに上昇、やがてピタッと停止。 ・Bは再生できず。 ・@ADEは再生できましたが、メモリ使用量が気になります。(特にDE)  また、MP4の再生が非常に重い? Aは10%、Dは23〜25%です。(※DをWMP12で再生すると2%くらい) Aは https://vimeo.com/93066207 でDLできるMP4です (by Optieさん) DはGeForceのshadowPlayでデスクトップを録画したMP4です 50Mb/s コードは以下の通りです。 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; int MovieGraphHandle = LoadGraph(L"xxxxxxx.mp4"); PlayMovieToGraph(MovieGraphHandle); while (ProcessMessage() == 0) { DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); WaitTimer(17); } DeleteGraph(MovieGraphHandle); DxLib_End(); return 0; }
メンテ
Re: DxLibで再生可能な動画の形式について ( No.24 )
名前:Citrine 日時:2017/06/20 21:34

私の環境でも.mp4再生時のメモリ使用量の増加を確認しました 色ずれについてですが仕様外の解像度の動画ではまだ発生するケースがありますね SetAlwaysRunFlag(TRUE)の件は条件を変えてビルドを行いましたが、x86/x64,Debug/Releaseいずれの組み合わせでもまだ発生します ・正常に再生出来た解像度 512x384 512x392 600x360 640x360 640x384 800x450 854x478 854x480 864x486 1280x720 1920x1080 320x480 480x480 540x720 ・色ずれ&異常終了した解像度 720x480 716x480 720x1280 (いずれもH.264/AVCです) また、追加で検証した際に気づいた点がいくつかありました 1. 解像度、フレームレートに関係なく常時コマ落ちが発生する 2. VFR(可変フレームレート)モードの動画で音ズレが発生する場合がある 3. SetAlwaysRunFlag(FALSE)にした状態でウインドウを非アクティブ状態にし、 再度アクティブ状態にした際にときどき再生が再開されないことがある 4. SetAlwaysRunFlag(TRUE)については再生がそのまま続くのではなく、一定の区間をループする 2.については最小フレームレートと最大フレームレートの差が大きい(fpsの変動が激しい)と起こりやすい気がします 3.は1秒ほどで再開する場合と全く開始しない場合があります それにしても、MP4の仕様を調べていくとかなり複雑ですね...
メンテ
Re: DxLibで再生可能な動画の形式について ( No.25 )
名前:管理人 日時:2017/06/21 02:05

お試しいただきありがとうございます 1708x960, 720x480, 716x480 で色ずれ、エラー終了が発生してしまうバグを修正してみましたので、 本当に何度も申し訳ありませんが、よろしければこちらの修正版をお試しください m(_ _;m ( 720x1280 の mp4 ファイルは用意することができなかったので確認できていません… ) https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) > ・CFはOGVで、問題ありません。メモリ使用量は最初しばらくゆるやかに上昇、やがてピタッと停止。 『ピタッと停止』とは動画の再生が止まってしまうということでしょうか? もしそうだとしますと、メモリが足りなくなったのだと思います( 32bitアプリでは 2GB しかメモリを 扱うことができず、アプリ自体が使用できるメモリは更に少ないので… ) > メモリ使用量も見てみました。MP4では使用量が徐々に増えていきます。 こちらの現象、確認できたのですが、改善方法はわかりませんでした ループ再生を行うと、ループのタイミングで使用メモリがガクッと下がり、 その後また徐々に使用量が増加、を繰り返すので『ループ再生をしていると無尽蔵にメモリを消費してしまう』 ということはありませんでした 何か解放忘れがあったり、キャッシュをクリアするような API があるかもと思い探してみたのですが見つからず… もう少し時間を掛けて調べる必要がありそうです… > また、MP4の再生が非常に重い? Aは10%、Dは23〜25%です。(※DをWMP12で再生すると2%くらい) WindowsMediaPlayer ほど動画再生に特化できていないので、CPUの負荷は WMPよりはどうしても高くなってしまいます ( 主にデコードされた画像をテクスチャに転送する処理が重いです ) 申し訳ありませんがご了承ください… > 1. 解像度、フレームレートに関係なく常時コマ落ちが発生する 再生開始からの経過時間とフレームレートから算出する「表示すべきフレーム番号」の計算が 正しく行えていないのかもしれません、調べてみます > 2. VFR(可変フレームレート)モードの動画で音ズレが発生する場合がある VFRの動画が手元にないので、用意してから調べてみます ( もし良いサンプル動画があるサイトなどありましたら、教えていただけると嬉しいです m(_ _;m ) > 3. SetAlwaysRunFlag(FALSE)にした状態でウインドウを非アクティブ状態にし、 >  再度アクティブ状態にした際にときどき再生が再開されないことがある > 4. SetAlwaysRunFlag(TRUE)については再生がそのまま続くのではなく、一定の区間をループする ご情報ありがとうございます 本日は「色ずれ+エラー終了」の修正とメモリ使用量が増え続ける現象を調べるだけで時間が尽きてしまったので、 後日調べてみます > それにしても、MP4の仕様を調べていくとかなり複雑ですね... 動画の圧縮形式は圧縮率を上げるために様々な手法が組み合わせられているので凄く複雑ですよね 圧縮データを渡すだけでフレーム単位のデコードデータを返してくれる Media Foundation や Ogg Theora ライブラリは本当に素晴らしいです (・・;;( それでも苦戦してしまっていますが )
メンテ
Re: DxLibで再生可能な動画の形式について ( No.26 )
名前:774 日時:2017/06/21 06:22

1708x960の動画が再生されることを確認いたしました。ありがとうございます。 >> ・CFはOGVで、問題ありません。メモリ使用量は最初しばらくゆるやかに上昇、やがてピタッと停止。 > 『ピタッと停止』とは動画の再生が止まってしまうということでしょうか? メモリ使用量の増加が止まる、という意味でした。(紛らわしくてすみません) OGVも確認してみようということで監視していると、MP4よりゆっくりですが上昇していっていたので あれ?OGVもかーと思っていたら、ある程度のところでピタっと増加が止まり、最後まで変わりませんでした。 これは動画CもFも同じ挙動でした。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.27 )
名前:Citrine 日時:2017/06/21 21:38

720x480,716x480,720x1280いずれも正常に再生できることを確認しました。 追加で3840x2160とH.265エンコード,Matroskaコンテナの動画も再生できることを確認しました。(再生負荷は非常に高いですが...) VFRの件ですが、どういうわけか正常に再生できるようになっていました。 条件も変えて実行しましたがいずれも正常。 今回の版で再生処理に修正が加わったのでしょうか?とりあえず検証を続けます。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.28 )
名前:yumetodo 日時:2017/06/22 02:43

>VFRの動画が手元にないので、用意してから調べてみます AviUtlのx264guiExと自動フィールドシフトで簡単に作れますが・・・ あとはWindows 10 には初期標準機能としてゲーム画面を録画できる Game DVRで作ったmp4はvfrです。 参考になりそうなのはL-SMASH/L-SMASH Worksのメインコミッターであるmuken氏がコメントしている pop.4-bit.jp/?p=5474&cpage=2 とか?
メンテ
Re: DxLibで再生可能な動画の形式について ( No.29 )
名前:管理人 日時:2017/06/22 03:44

お試しいただきありがとうございます m(_ _)m 本日は > 3. SetAlwaysRunFlag(FALSE)にした状態でウインドウを非アクティブ状態にし、 >  再度アクティブ状態にした際にときどき再生が再開されないことがある こちらの件を修正しました、小出しのようで申し訳ありませんが、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) > メモリ使用量の増加が止まる、という意味でした。(紛らわしくてすみません) おお、そうなのですか、再生は止まらないのですね 本日も調べてみたのですが、やはりメモリ使用量が増える原因はわかりませんでした DXライブラリ側のプログラムに不備が見つからなかったので、Media Foundation 内部の 処理によるものの可能性が高いです なので、とりあえず本件は一先ず保留としたいと思います m(_ _;m > VFRの件ですが、どういうわけか正常に再生できるようになっていました。 > 条件も変えて実行しましたがいずれも正常。 > 今回の版で再生処理に修正が加わったのでしょうか?とりあえず検証を続けます。 いえ、音との同期関係のプログラムは変更していないはずです… あと、現状のご確認をさせてください メモリ使用量が徐々に増える不具合と VFRモードの音ズレの問題を除いた場合、残る不具合は > @.mp4再生時に数秒停止する >  自作プログラムを起動して.mp4を読み込ませて再生すると数秒ほど処理が停止します。 > 1. 解像度、フレームレートに関係なく常時コマ落ちが発生する > 4. SetAlwaysRunFlag(TRUE)については再生がそのまま続くのではなく、一定の区間をループする こちらの三つという認識で問題ないでしょうか? > AviUtlのx264guiExと自動フィールドシフトで簡単に作れますが・・・ ご情報ありがとうございます m(_ _)m そういえば AviUtlで mp4ファイルが作成できたのでした、自分も AviUtlで mp4ファイルを 作成したことがあるのに失念していました (・・;;
メンテ
Re: DxLibで再生可能な動画の形式について ( No.30 )
名前:774 日時:2017/06/22 21:31

> こちらの三つという認識で問題ないでしょうか? さきほど何度か試したときに、「終了しない」件が再度発生しました。(2回目です) ただ、あれこれいじっていた時だったため、Debug or Releaseだったか、そもそもその時のコードの 内容は正確にはどうだったか、などを控えておりませんでした。(SetAlwaysRunFlagをどっちにしていたか、など) その後、何度か試したものの再発せず... 使用したMP4は上で書いた 1280x720 29.97fps https://vimeo.com/93066207 です。 そこで、疑似再現?ということで、下記コードを試してみました。(ProcessMessage()をあえて削除) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; SetDrawScreen(DX_SCREEN_BACK); SetDrawMode(DX_DRAWMODE_BILINEAR); SetAlwaysRunFlag(TRUE); int MovieGraphHandle = LoadGraph(L"movie.mp4"); PlayMovieToGraph(MovieGraphHandle); // while (ProcessMessage() == 0) <--- あえてここを無くしてみた { DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); WaitTimer(17); ScreenFlip(); } DeleteGraph(MovieGraphHandle); DxLib_End(); return 0; } 結果ですが、OGVは基本的に、ウィンドウや映像が一瞬表示されて(一瞬鳴って)終了します。 MP4の場合は、実行するたびに挙動が異なります。  1)OGV同様、すぐ終了する  2)音は1秒くらいで止まるが、ウィンドウは出たままで、閉じるボタンは押せない  3)音は先頭の12秒くらいをずっとループする。ウィンドウは出たままで、閉じるボタンが押せる。   ⇒押すとウィンドウは閉じるが、終了しない。音は12秒くらいをループ    (なお、何秒か待っていると閉じるボタンは押せなくなる) 上で書いた vimeo にある動画でも 3) がよく発生します。(ただし、1)になる場合も多い) ここまで書いてから気が付きましたが、 > 4. SetAlwaysRunFlag(TRUE)については再生がそのまま続くのではなく、一定の区間をループする の件に近いのかも?しれません。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.31 )
名前:Citrine 日時:2017/06/22 23:14

度々ありがとうございます。 復帰時に再生が再開されない問題が解消されていることを確認しました。 > 4. SetAlwaysRunFlag(TRUE)については再生がそのまま続くのではなく、一定の区間をループする すみません、これについての説明が不足していました。 正確には、「SetAlwaysRunFlag(TRUE)を実行した状態でMP4動画の再生を行うと、起動中は正常に再生されるが、 ウィンドウを閉じてもタスクが消えず、一定区間の音声のみがループ再生される。」です。 774さんが挙げている3)の状況がまさにそれですね。 残っている問題については管理人様の認識通りです。 あと、メモリ使用量が徐々に増える問題についての追加情報ですが、 音声が入っていない動画ファイルだとこの問題は発生しないようです。 1280x720/CFR 24.00fps/AVC High@L3.1 2675kbps/AAC LC 318kbps/04:06/87.8MB 音声あり->開始直後104MB、終了時277MB 音声なし->常時93〜95MBで安定
メンテ
Re: DxLibで再生可能な動画の形式について ( No.32 )
名前:管理人 日時:2017/06/23 02:43

お試しいただきありがとうございます m(_ _)m > そこで、疑似再現?ということで、下記コードを試してみました。(ProcessMessage()をあえて削除) >  2)音は1秒くらいで止まるが、ウィンドウは出たままで、閉じるボタンは押せない >  3)音は先頭の12秒くらいをずっとループする。ウィンドウは出たままで、閉じるボタンが押せる。 >   ⇒押すとウィンドウは閉じるが、終了しない。音は12秒くらいをループ >    (なお、何秒か待っていると閉じるボタンは押せなくなる) > 正確には、「SetAlwaysRunFlag(TRUE)を実行した状態でMP4動画の再生を行うと、起動中は正常に再生されるが、 > ウィンドウを閉じてもタスクが消えず、一定区間の音声のみがループ再生される。」です。 > > 774さんが挙げている3)の状況がまさにそれですね。 ご情報ありがとうございます 手元の PC の OS が Windows7 であるためか、載せていただいたコードでは手元の環境では現象が再現しませんでしたが、 こちらのコードでプログラムが終了しない現象が発生する場合に怪しいと思える箇所がありましたので、 その部分に手を加えてみました その変更を加えたバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) > 残っている問題については管理人様の認識通りです。 ご返答ありがとうございます 本日中に全て対応することができず、明日は作業時間の確保ができないかもしれないので、 全ての問題を解消したバージョンは週末になってしまいそうです 中々実装を完了することができず申し訳ありません m(_ _;m > あと、メモリ使用量が徐々に増える問題についての追加情報ですが、 > 音声が入っていない動画ファイルだとこの問題は発生しないようです。 ご情報ありがとうございます! m(_ _)m 明日以降に音声関係で怪しい箇所が無いか再度調べてみます!
メンテ
Re: DxLibで再生可能な動画の形式について ( No.33 )
名前:774 日時:2017/06/23 06:32

No.30のコードで試してみましたが、変わりませんでした。 上で書いた症状  1)OGV同様、すぐ終了する  2)音は1秒くらいで止まるが、ウィンドウは出たままで、閉じるボタンは押せない  3)音は先頭の12秒くらいをずっとループする。ウィンドウは出たままで、閉じるボタンが押せる。   ⇒押すとウィンドウは閉じるが、終了しない。音は12秒くらいをループ    (なお、何秒か待っていると閉じるボタンは押せなくなる) の1)と3)のいずれかになりました。正確に言うと 3)の「何秒か待っていると閉じるボタンは押せなくなる」には ならず、しばらく待っていても押せました。(ただしウィンドウは閉じますが、音はループし続け、終了もしない)
メンテ
Re: DxLibで再生可能な動画の形式について ( No.34 )
名前:管理人 日時:2017/06/25 01:19

お試しいただきありがとうございます m(_ _)m > 1)OGV同様、すぐ終了する > 2)音は1秒くらいで止まるが、ウィンドウは出たままで、閉じるボタンは押せない > 3)音は先頭の12秒くらいをずっとループする。ウィンドウは出たままで、閉じるボタンが押せる。 >  ⇒押すとウィンドウは閉じるが、終了しない。音は12秒くらいをループ >   (なお、何秒か待っていると閉じるボタンは押せなくなる) ご情報ありがとうございます 手元の Windows10 環境で現象が再現することを確認しました No.32 で私が推測していた箇所とは別の箇所が原因でした orz 本日こちらのバグと、 > 1. 解像度、フレームレートに関係なく常時コマ落ちが発生する こちらのバグを修正しましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) また、こちらの現象 > @.mp4再生時に数秒停止する についてですが、Media Foundation で ogv のように停止しないようにするには 現在の状態から大きく処理を変更しなければならないことが分かりました その変更を加えることで恐らく新しいバグが発生して、作業の完了が更に先になってしまうので 申し訳ありませんが今回は見送らせてください m(_ _;m ただ、SetUseASyncLoadFlag( TRUE ) ; を使用した非同期読み込みを行うことで 処理を停止させずに LoadGraph を完了させることができますので、ogv より少し面倒になりますが LoadGraph を呼ぶ前に SetUseASyncLoadFlag( TRUE ) ; を実行して、CheckHandleASyncLoad で 読み込みが完了するのを待ってから PlayMovieToGraph で再生するようにしてください m(_ _;m > あと、メモリ使用量が徐々に増える問題についての追加情報ですが、 > 音声が入っていない動画ファイルだとこの問題は発生しないようです。 音声関係の処理で一つバグを発見したので修正したのですが、手元の環境ではメモリ使用量の増加に 変化はありませんでした ( あと、音声が入っていない動画ファイルでも、手元の環境ではメモリ使用量は増加しました ) ただ、もしかしたら前述のバグの修正で Citrineさんの環境では音声ありのmp4ファイルでも メモリ使用量が増えなくなったかもしれませんので、よろしければお試しください m(_ _;m
メンテ
Re: DxLibで再生可能な動画の形式について ( No.35 )
名前:774 日時:2017/06/25 09:05

確認いたしました。 > 3)音は先頭の12秒くらいをずっとループする。ウィンドウは出たままで、閉じるボタンが押せる。 この件は発生しなくなりました。ありがとうございます。 ※音声ありMP4での検証ですが、使用メモリ量は増加します。 MP4再生時に数秒停止する、の件ですが、  1) LoadGraph で時間がかかる  2) PlayMovieToGraph で時間がかかる の2つの要素があります。「数秒かかる」のは初回ロード時などであり 1) の時間がほとんどですが、 自分的にはここの時間が少々長くても特に問題ありません。(映像と音声はプレイ前にまとめて読むので) 2)に時間がかかる点については、改善可能であればうれしいです。 PlayMovieToGraph を実行した場合、OGVの場合は 0msec で処理から帰ってくるのですが、 MP4では 80〜150msec 程度かかります。 ※作っているのがリズムゲームであり、曲の途中で動画を切り替えるものもあるため、 ※10フレーム近く停止すると厳しいです。 ※Play⇒すぐPause⇒0にSeekしておいて、再生する時に再度Playした場合、10msec程度ですむ場合と ※変化なし(150msec)の場合あり。(もっとも、10msecでも運用は難しいです)
メンテ
Re: DxLibで再生可能な動画の形式について ( No.36 )
名前:管理人 日時:2017/06/25 20:21

お試しいただきありがとうございます m(_ _)m > 2)に時間がかかる点については、改善可能であればうれしいです。 > PlayMovieToGraph を実行した場合、OGVの場合は 0msec で処理から帰ってくるのですが、 > MP4では 80〜150msec 程度かかります。 OGV と同じように 0msec で処理を終わらせるには前述の通り大きな変更が必要なのですが、 0msec にはなりませんが、PlayMovieToGraph で行っていた処理の一部を LoadGraph の時点で 行うようにしたことで大分処理負荷を下げられましたので、よろしければその変更を加えた バージョンをお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: DxLibで再生可能な動画の形式について ( No.37 )
名前:Citrine 日時:2017/06/25 21:20

更新ありがとうございます。 コマ落ちとタスクが消えない問題が解消されていることを確認しました。 メモリ使用量の件ですが、こちらの環境ではまだ起こりますねー ffmpegで音声データを抜き取った動画ファイルを追加で作って検証しましたが、 こちらはメモリ使用量の増加は発生しないです。 OS起因の問題という可能性もあるような気がしますが、 手元にWindows10以外の環境がないため、こちらでは検証できないですね...
メンテ
Re: DxLibで再生可能な動画の形式について ( No.38 )
名前:774 日時:2017/06/25 21:59

PlayMovieToGraphでの大幅改善を確認いたしました。ありがとうございます! (0msecまで下がっている感じです) メモリ消費量について調べてみました。 ある「音声ありMP4」について、TMPGEnc MPEG Smart Renderer 5で音声無し版を作って比較しました。 1920x1080, 30fps, 2:20程度です。(音声あり211MB、音声無し209MB)  音声あり 開始時メモリ200MB ---> 右肩上がりで最後には500MB!  音声無し 開始時メモリ150MB ---> 途中162MBくらいまで上がるが、基本的に↑↓でほぼ最後には154MBでおさまる です。 ところで、ちょっと気になったことがあったので以下に示します。 下のコードのようにブレークポイントを設定し、実行してブレークし、PlayMovieToGraphが何msecかかるかを 確認したあと、数秒後にF5で続行すると、音は最初から鳴り始めますが、映像はおそらく「PlayMovieToGraphを 実行してから経過した時間」のフレームから描画されます。 (続行を押したのがブレークから5秒後なら、5秒経過したフレームから)。 これは、OGVもMP4も同じなのですが、仕様でしょうか? int d6, d7; d6 = DxLib::GetNowCount(); PlayMovieToGraph(MovieGraphHandle); d7 = DxLib::GetNowCount(); d7 = d7 - d6; // <--------- この行にブレークポイント while (ProcessMessage() == 0 && GetMovieStateToGraph(MovieGraphHandle) == 1) { DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); WaitTimer(17); ScreenFlip(); }
メンテ
Re: DxLibで再生可能な動画の形式について ( No.39 )
名前:管理人 日時:2017/06/25 22:13

お試しいただきありがとうございます m(_ _)m コマ落ち問題、タスク消えない問題、PlayMovieToGraph の処理負荷問題が直ったようで何よりです メモリ使用量についてですが、32bitアプリとして起動をして、PlayMovieToGraph の後に malloc を使用して NULL が返ってこない限界ギリギリの量を確保して実行させましたが、タスクマネージャで確認できる メモリ使用量は増えていくもののメモリ不足でエラーが発生するといった現象は発生しませんでした 環境が無いので 32bitバージョンの OSで 32bitアプリを実行した場合も問題なく動作するかは検証することが できませんが、少なくとも 64bitバージョンの OSでは件の使用メモリ量の増加でアプリの動作に支障がでることは 無いような気がします 原因が分かれば修正するのですが、とりあえずはこれで Media Foundation 対応は完了としたいと思います 長い間お付き合いいただきありがとうございました m(_ _;m > これは、OGVもMP4も同じなのですが、仕様でしょうか? はい、仕様となります ブレークポイントで止められた場合、ウィンドウが非アクティブになってアプリの動作が止まる場合と異なり、 DXライブラリのプログラム側はブレークポイントによってプログラムが止められたことを検知できないので、 実行を再開した際は、OSが勝手に止めてくれているサウンドは止めた直後から再生が再開され、 動画の処理は「1フレーム処理するのに物凄い時間が掛かってしまった」という扱いになりブレークポイントで 止まっていた時間が経過した状態で再生が再開されます
メンテ

Page: 1 | 2 |

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

   クッキー保存