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
|
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
|
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
|
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の動画で発生するようです。
|