トップページ > 記事閲覧
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.1 )
名前:管理人 日時:2017/06/05 02:09

現在のDXライブラリでは確実に再生できるのは ogv 形式のみで、 後はPCにインストールされているコーデックに応じて再生できるフォーマットが変化します ただ、Windows7 以降であれば H.264形式の動画の再生にPCは対応しているのですが、 DXライブラリが動画のデコードに使用している API が DirectShow という古い API なため H.264形式の動画の再生はできない状態です ( Media Foundation という DirectShow の次の API を使用すると、Windows7 以降であれば再生可能 ) > 1. 現時点(3.18c)で再生に対応している動画のエンコード及びコンテナ形式を教えてください 確実に再生できる動画形式はDXライブラリの中にデコード用の lib ファイルが含まれている ogv ( Ogg Theora ) 形式のみです それ以外はPCにインストールされている DirectShow 用のコーデック次第です > 2. 今後、H.264などのエンコード形式に対応する予定はありますか 今のところ予定はありませんでしたが、ご要望があれば Media Foundation を使用した再生の対応を行おうと思います ただ、Media Foundation を使用する場合も DirectShow と同じく再生できるかどうかは OS 次第となるので、 現時点では Windows7 以降であれば再生できますが、今後もずっと再生できるかどうかは分かりません ( 例えば、かつては当たり前のように再生できた mpg ファイルは Media Foundation では再生できないので、 H.264 の次のメジャーなフォーマットが現れた後、暫くすると H.264 は再生できなくなるかもしれません ) なので、どのような環境でも確実に再生できるようにされたい場合はDXライブラリのパッケージに デコード用の lib ファイルが含まれている ogv 形式を使用する必要があります H.264 よりも圧縮率や画質が劣るのが難点ですが…
メンテ
Re: DxLibで再生可能な動画の形式について ( No.2 )
名前:Citrine 日時:2017/06/05 11:42

回答ありがとうございます。 再生可能な動画形式についてはリファレンス通り、ogv形式で間違いないようですね。 H.264(Media Foundation)の対応については是非お願いしたいです。 仕様勧告から14年、Windows 7の発売および標準対応から8年が経ち、 動画制作環境やWebでもH.264の使用がデファクトスタンダードとなっている現状、 そしてPS4やAndroidなどマルチプラットフォーム対応が進むDXライブラリにおいても、 H.264をはじめ、新しい規格への対応は必要だと思います。 次のメジャーな規格の登場によるサポート打ち切りの可能性についても、 技術の進化ペースから考えて恒久的に再生可能な動画形式は端から考えていません。 むしろ互換性を重視しすぎて旧規格にしがみついていては、今後のライブラリの進化の足枷になりかねません。 長々と書いてしまいましたが、対応よろしくお願いします。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.3 )
名前:管理人 日時:2017/06/05 22:50

ご意見ありがとうございます 対応してみようと思いますので、数日程お待ちください m(_ _)m ( ただ、平日は殆ど作業できないので、早くても今週の週末になると思います )
メンテ
Re: DxLibで再生可能な動画の形式について ( No.4 )
名前:yumetodo 日時:2017/06/08 18:14

むしろOpenH264をDxLibが叩いてくれたらなと思っています・・・
メンテ
Re: DxLibで再生可能な動画の形式について ( No.5 )
名前:yumetodo 日時:2017/06/08 18:20

とおもったけど、aac再生できないしdemuxどうするんだで、意味ないですね・・・
メンテ
Re: DxLibで再生可能な動画の形式について ( No.6 )
名前:管理人 日時:2017/06/14 00:57

すみません、先週の週末だけでは終わりませんでした orz Media Foundation による再生処理の実装作業は8割くらいは終わっているので、 次の週末にはご提供できると思います m(_ _;m > yumetodoさん うーむ音声が非対応なのですね…残念…
メンテ
Re: DxLibで再生可能な動画の形式について ( No.7 )
名前:yumetodo 日時:2017/06/14 13:14

>うーむ音声が非対応なのですね…残念… やるならfdkaacも依存ライブラリに追加されてしまいますね。いっそffmpegのdll認識して呼べるようにするとか・・・。(迷走 早くopus in mp4が規格化されないかな。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.8 )
名前:管理人 日時:2017/06/18 00:34

お待たせしました、Media Foundation を使用した H.264エンコードのMP4動画ファイルの 再生に対応したバージョンをこちらにアップしましたので、よろしければお試しください 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.9 )
名前:774 日時:2017/06/18 06:26

ファイルが6月4日のTest版のままだと思われます...
メンテ
Re: DxLibで再生可能な動画の形式について ( No.10 )
名前:Citrine 日時:2017/06/18 08:32

DLして手元の環境で試してみましたが、再生できないです... ファイルの更新日時を見る限りでは、774さんの仰る通り最新版ではないっぽいですねー
メンテ
Re: DxLibで再生可能な動画の形式について ( No.11 )
名前:管理人 日時:2017/06/18 19:35

申し訳ありません! ご指摘の通りファイルをアップしていませんでした orz お手数で申し訳ありませんが、もう一度同じ URL からファイルをダウンロードしてください 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.12 )
名前:774 日時:2017/06/18 21:28

確認いたしました。 検証環境はWin10 Pro x64, GTX1060, x64ビルド, Unicode, わりと高速なPC です。 .mp4は1280x720および、1708x960という仕様外のもので確認しました。 @.mp4再生時に数秒停止する  自作プログラムを起動して.mp4を読み込ませて再生すると数秒ほど処理が停止します。  プログラムを起動したまま同じ.mp4を再度再生すると初回ほどではありませんが停止します。  プログラムを終了し、再度実行すると、やはり再生初回は数秒ほど処理が停止します。  ビットレートの大きいファイルほど停止時間が長い。  ※動画には音はないため、停止中に音が鳴っているのかどうかは不明です。  ※ffmpeg2theoraで.ogvにエンコードしたファイルはサイズが3.5倍くらいですが、停止しません。 A仕様外解像度(X/Yが両方16の倍数になっていないファイル)だと絵がずれる  1708x960のファイルでは絵が斜めにずれます。  ※.mp4の仕様に準じていないので仕方ありませんが、.ogvではOKです。  ※諸事情でこんな解像度のファイルを使うこともあるため、今回検証しました。 BSeekはできない  個人的にはこれが可能かどうかが最大の興味でしたが、残念ながらできませんでした。  現状この機能は .ogv専用ということですね。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.13 )
名前:管理人 日時:2017/06/18 21:45

お試しいただきありがとうございます > @.mp4再生時に数秒停止する 手元の環境でも libファイル化したものを使用したところ、現象を確認できました 原因を調べてみます > A仕様外解像度(X/Yが両方16の倍数になっていないファイル)だと絵がずれる ご指摘ありがとうございます 原因を調べて見ます > BSeekはできない 手元の mp4 ファイルではSeekできることを確認しています mp4 のファイルに寄るかもしれませんので、もし可能でしたら Seekができない mp4ファイルをご提供いただけないでしょうか? m(_ _;m
メンテ
Re: DxLibで再生可能な動画の形式について ( No.14 )
名前:Citrine 日時:2017/06/18 21:55

対応ありがとうございます。 早速手元の環境で確認したところ、MP4形式の動画ファイルのオープンは成功しましたが、 以下のバグが発生しました。 1. 同期ズレをおこしたように画が乱れる 2. 色の乱れ,ずれが生じる 3. 1280x720@30pのソースを再生した際にコマ落ちが発生し、1920x1080@30pでは途中でアプリが応答なしになる 4. SetAlwaysRunFlag(TRUE);を実行していると、稀にウインドウを閉じてもタスクが消えない場合がある いずれもH.264,MP4コンテナ形式の動画で発生しました。 1.については774さんの仰る通り規格外の解像度で発生するというので間違いなさそうです。 854x480と540x720の動画で発生しました。 2.については発生する明確な条件がわかりませんでした。 3.については、他のメディア再生アプリでは正常に再生できることから、 PCスペックの問題とは考えにくいです。 以下、検証したマシンのスペックです。 OS: Windows 10 Pro Ver.1703 64bit CPU:Intel Core i7-4770@3.40GHz RAM:DDR3-1600 8GB GPU:NVIDIA GeForce GTX 760 (VRAM 2GB)
メンテ
Re: DxLibで再生可能な動画の形式について ( No.15 )
名前:774 日時:2017/06/19 00:33

> 手元の mp4 ファイルではSeekできることを確認しています > もし可能でしたら Seekができないmp4ファイルをご提供いただけないでしょうか? すみません、動画自体の問題か自作プログラムの問題かを確認しようとして、シンプルなプログラムを 組み直して確認して、動画の問題なら送付しようと思っているうちにこんな時間になってしまいました。 よくわかっていませんが、おそらくライブラリ側に起因するのではと思われます。 @GetMovieTotalFrameToGraph()が、.mp4の時は-1を返すようです。(.ogvはOK) A以下のように組んだ場合、.ogvでは表示されますが、.mp4では真っ黒になります。 (.mp4は、シンプルな1280x720 3Mb/s程度の軽いものです)  [.ogvの場合] MovieGraphHandle = LoadGraph(L"movie.ogv"); int nFrames = GetMovieTotalFrameToGraph(MovieGraphHandle); ---> フレーム数が返る SeekMovieToGraph(MovieGraphHandle, 100); while (ProcessMessage() == 0)  DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); ---> 表示される  [.mp4の場合] MovieGraphHandle = LoadGraph(L"movie.mp4"); int nFrames = GetMovieTotalFrameToGraph(MovieGraphHandle); ---> -1が返る SeekMovieToGraph(MovieGraphHandle, 100); while (ProcessMessage() == 0)  DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); ---> 真っ黒 上記で、PlayMovieToGraph(MovieGraphHandle);を付ければ確かに.mp4はシークした位置から 再生しますが、自作プログラムではSeek位置で固定表示させるため、PlayMovieToGraph無しで 運用する必要があります。.ogvではできていたので、.mp4でも同じ仕様になると幸いです。
メンテ
Re: DxLibで再生可能な動画の形式について ( No.16 )
名前:管理人 日時:2017/06/19 01:40

ご情報ありがとうございます m(_ _)m こちらの現象について > A仕様外解像度(X/Yが両方16の倍数になっていないファイル)だと絵がずれる > 1. 同期ズレをおこしたように画が乱れる > 2. 色の乱れ,ずれが生じる 修正できたと思います こちらの現象 > 3. 1280x720@30pのソースを再生した際にコマ落ちが発生し、1920x1080@30pでは途中でアプリが応答なしになる も、もしかしたら修正できたかもしれません( フレームレート関連の数値計算にバグがあったので ) もしよろしければお試しください 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をお使いの場合は『リビルド』をして下さい) > 4. SetAlwaysRunFlag(TRUE);を実行していると、稀にウインドウを閉じてもタスクが消えない場合がある タスクが消えるには WinMain 関数から抜ける必要があるのですが( WinMain 関数から return で抜けない限り タスクは残り続けます )、ProcessMessage 関数の戻り値が -1 になったらメインループから抜ける等の処理は 行われていますでしょうか? > @GetMovieTotalFrameToGraph()が、.mp4の時は-1を返すようです。(.ogvはOK) ご情報ありがとうございます 修正します > A以下のように組んだ場合、.ogvでは表示されますが、.mp4では真っ黒になります。 停止状態での運用は想定していませんでした 対応できると思います
メンテ
Re: DxLibで再生可能な動画の形式について ( No.17 )
名前:774 日時:2017/06/19 06:25

確認してみました。.ogvではOKですが、.mp4だと(1280x720も1708x960も)例外発生します。(Debug/Release共に) とりあえず報告です! int MovieGraphHandle; ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; MovieGraphHandle = LoadGraph(L"movie.mp4"); PlayMovieToGraph(MovieGraphHandle); while (ProcessMessage() == 0) { DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE); WaitTimer(17); <------- ここで例外発生(正確には、ここの次の処理か?) } DeleteGraph(MovieGraphHandle);
メンテ
Re: DxLibで再生可能な動画の形式について ( No.18 )
名前:Citrine 日時:2017/06/19 21:29

確認しました。 画のずれについては手持ちの動画ファイル全てで解消されていることを確認しました。 色のずれは動画ファイルによってはまだ発生しています。(詳しい発生条件は不明です) 高解像度データの再生についてですが、1280x720は再生開始時に異常終了し、1920x1080@60pは30〜50秒ほどでアプリが応答しなくなります。 だたし、1920x1080@30pは何故か正常に再生できています。 SetAlwaysRunFlag(TRUE)の件はメインループの継続式にProcessMessage() == 0を入れているので恐らく別の原因だと思われます。 また、この版になってからDebug,Release問わず高確率で発生するようになってしまいました。 念のためソースコードを貼っておきます。 #include "DxLib.h" int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { SetGraphMode(1366, 768, 32); ChangeWindowMode(TRUE); //SetAlwaysRunFlag(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); SetDrawMode(DX_DRAWMODE_BILINEAR); int MovieHandle = LoadGraph(_T("test1.mp4")); PlayMovieToGraph(MovieHandle); int time = 0; while (ProcessMessage() == 0) { ++time; ClearDrawScreen(); //DrawGraph(0, 0, MovieHandle, FALSE); DrawExtendGraph(0, 0, 1366, 768, MovieHandle, FALSE); //DrawRotaGraph(683, 384, 1.5, 0.0, MovieHandle, FALSE); DrawFormatString(0, 0, GetColor(0xFF, 0xFF, 0xFF), _T("%02d:%02d"), time / 3600, time / 60 % 60); ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: DxLibで再生可能な動画の形式について ( No.19 )
名前:Citrine 日時:2017/06/19 22:21

追記です。 色ずれは640x360の動画で発生するようです。
メンテ

Page: 1 | 2 |

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

   クッキー保存