トップページ > 記事閲覧
動画の長さを超えた位置指定でフリーズ…を回避する方法
名前:たろう 日時: 2020/08/26 16:40

いつもすみません、たろうです 以下は「動画名.mp4」を再生して、クリック毎に早送りする仕組みですが t_plusの数値を大きくすると手持ちの動画ではどれもフリーズしてしまいます。 動画の長さよりも大きい数値を与えているからだと思いますが、 Ogg以外では動画の長さを調べる事が出来ないので、早送りを繰り返すうちいずれ末尾を超えるわけですから いずれフリーズしてしまう事になると思います。 せめてフリーズしない方法があるといいのですが、なにかございますでしょうか? (※例えばt_plusの数値の場所に動画が存在しているかどうか確認する方法など) お忙しいところすみません、よろしくお願いいたします --------------------------------------------- #include "DxLib.h" #include <locale.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { setlocale( LC_ALL, ".utf8" ); SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadGraph(u8"動画名.mp4"); PlayMovieToGraph(動H); int t=0,t_plus=1000000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawExtendGraph(0,0,600,600,動H,0); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=30; int t_now=TellMovieToGraph(動H)+t_plus; SeekMovieToGraph(動H,t_now) ; PlayMovieToGraph(動H) ; }if(t>0)t--; ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 | 2 |

Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.21 )
名前:たろう 日時:2020/09/11 09:51

たろうです。またすみません 音楽ファイルですが、症状的に関連だと思いますのでここで引き続き失礼します<(_ _)> 5分半以上(?)の長いmp3ファイルを下のプログラムで再生すると CheckSoundMemで終了を取得できないようです またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます 引き続きすみません、お手すきの際にご確認いただけますでしょうか? 宜しくお願いいたします<(_ _)> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadSoundMem("音楽ファイル.mp3"); ChangeVolumeSoundMem(50,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK); int t=0,t_plus=10000; //char *ex="おならおならおなら.extoo"; char *p; p = strrchr(ex,'.');int lg=7;if(NULL != p){lg=strlen(p);} while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawFormatString( 0,0,GetColor(255,255,255),"total(%d)",GetSoundTotalTime(動H) ); DrawFormatString( 0,30,GetColor(255,255,255),"now(%d)",GetSoundCurrentTime(動H) ); DrawFormatString( 0,60,GetColor(255,255,255),"play(%d)",CheckSoundMem(動H) ); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=15; int t_now=GetSoundCurrentTime(動H)+t_plus; StopSoundMem(動H); SetSoundCurrentTime(t_now,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); }if(t>0)t--; if(CheckSoundMem(動H)) { //if(GetSoundTotalTime(動H)<=GetSoundCurrentTime(動H))StopSoundMem(動H); } else { SetSoundCurrentTime(0,動H);ChangeVolumeSoundMem(50,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); } ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.22 )
名前:たろう 日時:2020/09/13 16:57

次々とすみません、たろうです。 追加で再生すると問題のある動画を幾つか見つけましたので もしかするとMedia Foundationやファイル自体の問題なのかもしれませんが ご確認いただけると助かります。 ファイルは↓こちらにあげました(5日で消えます) ttps://file-post.net/en/s0/d1/1599979484_291465917_120/?id=8FESla4RO3jn (ぱす:sdfagsga) ※どれもVLCメディアプレイヤーでは問題なく再生されます 「終了が受け取れない.mp3」 No.21の件の、終了を取得出来ずGetSoundTotalTimeの数値もおかしいmp3です 長ければ大抵のファイルで異常は起こると思いますが念のため付けました 「音だけ倍速になる.mp4」 始めは無音ですが、ファイルの途中にシークで移動すると音が倍速で流れます 音声のSampling rate が 22.05 kHz だとこの現象が起きるようです 以下の動画二つは著作権の問題があるので、元は二時間ほどの動画ですが 何だか分からないようカットや編集をしたものです 「音がおかしい.mp4」 再生すると異音がなって、閉じるとフリーズします 「たまに音がなくなる_edit.mp4」 動画の様々な位置をシーク&再生を繰り返していると 特定の場所で音がなくなって、回復しなくなります 下のプログラムで8回ほどクリックすると その特定の場所に進み音が消えると思います 特定の場所とは言っても、例えばこの動画を無劣化で短くしてしまうと その位置が変わったりします。 (※実際は110秒辺りを指定しているだけなのに動画をクロップしていないのはそのためです) #include "DxLib.h" int TtoF(LONGLONG T,int hd) { LONGLONG oneF=(GetOneFrameTimeMovieToGraph(hd));if(oneF==0)return 0; return (int)(T*1000/oneF);} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadGraph("たまに音がなくなる_edit.mp4"); PlayMovieToGraph(動H); int t=0,t_plus=6000,i=0; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawExtendGraph(0,0,600,600,動H,0); DrawFormatString( 0,0,GetColor(255,255,255),"(%d)" ,TellMovieToGraph(動H) ); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=30; int t_now=109640+i*60;i++; SeekMovieToGraphToFrame(動H,TtoF(t_now,動H)); //SeekMovieToGraph(動H,t_now);//フレームではなくミリ秒で渡しても結果は同様 PlayMovieToGraph(動H); }if(t>0)t--; ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.23 )
名前:管理人 日時:2020/09/14 00:36

> たろうさん Media Foundation 関連の不具合が多くてすみません… > 5分半以上(?)の長いmp3ファイルを下のプログラムで再生すると > CheckSoundMemで終了を取得できないようです > またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます こちらの現象は確認できませんでした 『終了が受け取れない.mp3』でも、サウンドデータの終端に来ると正常に if(CheckSoundMem(動H)) で偽の側が実行され、再度先頭からの再生が始まりました > またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます 『終了が受け取れない.mp3』では画面に total(357447) と表示され、表記を変えると 357447 / 1000 / 60 = 5.95745分で、実際の 5分57秒の再生時間が正しく表示されていました たろうさんの環境では total(357447) と表示されていないのでしょうか? > 「音だけ倍速になる.mp4」 > 始めは無音ですが、ファイルの途中にシークで移動すると音が倍速で流れます > 音声のSampling rate が 22.05 kHz だとこの現象が起きるようです 手元の環境でも現象が再現しました 音が再生されるように修正してみましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 「音がおかしい.mp4」 > 再生すると異音がなって、閉じるとフリーズします 「音がおかしい.mp4」のサウンドデータは 6チャンネルサウンドで、DXライブラリが 2チャンネルまでしか対応していなかったのが原因でした こちらも修正しましたので、よろしければお試しください m(_ _;m > 「たまに音がなくなる_edit.mp4」 > 動画の様々な位置をシーク&再生を繰り返していると > 特定の場所で音がなくなって、回復しなくなります > 下のプログラムで8回ほどクリックすると > その特定の場所に進み音が消えると思います こちらも現象が再現しました 恐らくこちらも修正できたと思いますので、よろしければお試しください m(_ _;m > 紺帽子さん メールありがとうございます 再度こちらでご返信いたします > atoi系で次のような結果になりました。 > いままで0が返っていたものが-1が返るようになってしまいました。 >  > const char *s1 = "XYZ123"; > int n1 = atoiDx(s1); //=> -1 > int n2 = atoi(s1); //=> 0 >  > const char *s2 = ""; > int n3 = atoiDx(s2); //=> -1 > int n4 = atoi(s2); //=> 0 ご指摘ありがとうございます 修正しましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > プチノイズに関しては詳細を添付ファイルにまとめました。 > 自分の環境において比較的高い確率で再現できました。 添付していただいた Source.cpp のプログラムを 30回ほど実行しましたがプチノイズの現象は 発生しませんでした VisualStudio のデバッグ実行の場合のみ再現するとのことですので、環境による影響や デバッガによる影響があるかもしれません 現在DXライブラリは標準で WASAPI を使用してサウンドを再生しているのですが、 DxLib_Init の前に SetEnableWASAPIFlag( FALSE ); という記述を追加して より再生処理が安定している DirectSound を使用する設定にすると紺帽子さんの環境でも プチノイズが発生しなくなるかもしれません ( ただ、DirectSound は WASAPI よりも若干サウンドの再生遅延時間が長いです ) > 動画のシークに関しての質問なのですが、 > 例えば次のような引数の場合は、当然長さ的に関数が失敗して-1を返すと思います。 > SeekMovieToGraph(MovieHandle, INT_MIN); > SeekMovieToGraph(MovieHandle, INT_MAX); > シークに成功すると動画が停止状態になるのは仕様と思いますが > シークに失敗した場合も動画が停止状態になるのは仕様ですか? はい、仕様です ただ、再生したままシークすると動作が不安定になるかと思い SeekMovieToGraph の冒頭で 動画の再生を停止していたのですが、本日試した限りでは再生中も問題無くシークすることが できたので、上記の暫定最新版では仕様を変更してシークでは再生を止めないようにしました
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.24 )
名前:たろう 日時:2020/09/14 15:46

いつもお忙しい中ご対応いただき、ありがとうございます。 すみません、確認させていただきましたが、まだ問題があるようです 「終了が受け取れない.mp3」 につきましては、私の環境ではtotal(714919)と表示されてしまいます。 すみません「714919の地点では終了が返らずに止まる」というのが正確でした。 つまり(357447)を通過すれば終了が返りますが、早送りを使ってそれを超えてしまうと 終了が得られないという状態です。 同じファイルで同じプログラムなのに数値が変わってしまうというのは 開発環境(visual studio community 2015を使っています)の違いでしょうか? もしくは例えば、GetSoundTotalTimeがLONGLONGで返ってくることと関係はないでしょうか? もしくは単純に下のプログラムに問題があればご指摘いただければありがたいですm(__)m 知識が足りず、何が参考になるか分かりませんが、念のため末尾にログを貼ります 「音だけ倍速になる.mp4」 につきましては、正常に再生される事を確認いたしました。 ありがとうございました<(_ _)> 「音がおかしい.mp4」 につきましては、本来の長い動画の状態で開きますとフリーズしてしまいます。 ttps://file-post.net/en/s0/d1/1600061160_222872759_120/?id=UkYf5jIZNTFw (ぱす:sdfagsga) ↑ここにそれを再現するための動画を上げましたので、そちらの「音がおかしい2.mp4」 を無劣化で4倍に拡大したものを下のプログラムで(Movを1にして)開いていただけば、だいたい 70パーセントくらいの所をシークするとフリーズすると思います。 また、動画を他の動画プレイヤーで開くと聞こえるはずの「男のうめき声」が 選択しているチャンネルの問題でしょうか、聞こえなくなっているのも確認できると思います ※すみません、分割圧縮がうまくいかず、またアップロード上限500Mなので、このような形になりましたm(__)m 私の場合Avidemuxで4回連結(約82分)してvideo、audioともコピーでmp4で吐き出したものを使うと上記のエラーが再現されます 「たまに音がなくなる_edit.mp4」 につきましては下のプログラムで試していただけると分かりやすいのですが シークバーを適当にポチポチやったりドラッグで移動を繰り返していると 動画が止まってしまいます。 以上です、お手すきの時にご確認いただけたらと思います 宜しくお願いいたします<(_ _)> ---------------------------------------------------テスト用プログラム--------------------------------------------------- #include "DxLib.h" #define Mov 0//音楽0 動画1 #define Vol 255//音量 int Total(int hd) { if(Mov){return (int)(GetMovieTotalFrameToGraph(hd)*(GetOneFrameTimeMovieToGraph(hd)/(double)1000));} else {return (int)GetSoundTotalTime(hd);} } int TtoF(LONGLONG T,int hd) { LONGLONG oneF=(GetOneFrameTimeMovieToGraph(hd));if(oneF==0)return 0; return (int)(T*1000/oneF);} int SeekBar(int hd,int 総) { static int x=310,y=300,今=0,now=0; int 鼠x=0, 鼠y=0, 鼠o=0; if((GetMouseInput()&MOUSE_INPUT_LEFT )!=0){鼠o=1;} GetMousePoint( &鼠x , &鼠y ) ; if(Mov){now=TellMovieToGraph(hd); } else {now=GetSoundCurrentTime(hd);} double p=(600*(now/(double)総)); DrawBox(x-300 ,y-2 ,x+300 ,y+2 ,GetColor(255,255,255),1); DrawBox(x-1 ,y-10,x+1 ,y+10,GetColor(255,255,255),1); DrawBox(x-298+p,y-10,x-302+p,y+10,GetColor(255,255,255),1); if(鼠o&&x-300<鼠x&&鼠x<x+350&&y-30<鼠y&&鼠y<y+30) { int mx=鼠x-(x-300);if(mx<0){mx=0;}else if(mx>600)mx=600;int des=(mx/(double)600*(double)総); if(Mov){if(des<0)des=0;PauseMovieToGraph(hd);if(GetMovieTotalFrameToGraph(hd)==-1){ SeekMovieToGraph(hd,des);}else{des=TtoF(des,hd);SeekMovieToGraphToFrame(hd,des);} PlayMovieToGraph(hd); } else {if(des<0)des=0;StopSoundMem(hd); SetSoundCurrentTime(des,hd); PlaySoundMem(hd,DX_PLAYTYPE_BACK, FALSE); } } return now; } int 再生中(int hd){if(Mov){return GetMovieStateToGraph(hd)>0;}else{return CheckSoundMem(hd)==1;}return 0;} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(620,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H; if(Mov){ 動H=LoadGraph("音がおかしい.mp4");} else { 動H=LoadSoundMem("終了が受け取れない.mp3");} int 総=Total(動H); if(Mov){ ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK); } int t=0,t_plus=10000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int play=再生中(動H); if(!play) { if(Mov){ SeekMovieToGraph(動H,0); ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { SetSoundCurrentTime(0,動H);ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); } } if(Mov)DrawExtendGraph(0,0,600,600,動H,0); int now=SeekBar(動H,総); DrawFormatString( 10,250,GetColor(255,255,255),"total(%d) now(%d) play(%d)",(int)総,(int)now,(int)play ); ScreenFlip(); } DxLib_End(); return 0; } ---------------------------------------------------Log.txt--------------------------------------------------- 0:ChangeWindowMode実行 4:ウインドウモードフラグが立てられました 12:DXライブラリの初期化処理開始 19: システムの情報を出力します 24: DXライブラリ Ver3.22b 29: 論理プロセッサの数 : 12 33: OS Windows10 ( Build 18362 ) 142: 現時点のCPU動作速度:大体3.15GHz 146: MMX命令を使用します 150: SSE命令が使用可能です 153: SSE2命令が使用可能です 158: CPUベンダ:GenuineIntel 177: CPU名:Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 181: COMの初期化... 成功 192: 非同期読み込み処理の初期化...成功 696: ファイルアクセス処理の初期化...成功 704: メモリ総量:16308.28MB 空きメモリ領域:10074.55MB 708: タイマーの精度を検査します 712: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 716: パフォーマンスカウンターを使用します タイマー精度 : 10000.000000 KHz 724: ソフトの二重起動検査... 二重起動はされていませんでした 736: ウインドウクラスを登録します... 登録に成功しました 744: ウインドウモード起動用のウインドウを作成します 748: ディスプレイ情報のセットアップ開始 753: モニターの数:2 ディスプレイデバイスの数:4 757: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 761: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 785: ディスプレイ情報のセットアップ完了 792: ウインドウの作成に成功しました 796: ウインドウを表示します 845: IMEを無効にしました 850: ウインドウスタイルをウインドウモード用に変更します... 完了 882: DirectInput関係初期化処理 886: XInput DLL の読み込み中... 成功 897: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 922: 引き続き初期化処理... 初期化成功 940: ジョイパッドの初期化... 971: 入力装置を見つけました 976: Device Instance Name : JC-U4013S DirectInput Mode 980: Device Product Name : JC-U4013S DirectInput Mode 985: 周期的エフェクトの作成に失敗しました。 989: 周期的エフェクトの作成に失敗しました。 996: ジョイパッドの追加は正常に終了しました 1002: ジョイパッドの初期化は正常に終了しました 1006: マウスデバイスの初期化... 初期化成功 1014: キーボードデバイスの初期化... 初期化成功 1022: DirectInput 関連の初期化は正常に終了しました 1030: WASAPI の初期化を行います 1040: デフォルト遅延時間 : 10.000 ms 1045: 最小遅延時間 : 3.000 ms 1049: 遅延時間 : 10.000 ms 1055: チャンネル数   : 2 ch 1059: 量子化ビット深度 : 32 bit 1063: 有効ビット深度  : 32 bit 1067: サンプリングレート : 48000 Hz 1071: データ形式 : 浮動小数点型 1103: 動作モード : 共有モード 1107: WASAPI の初期化は正常に終了しました 1112: d3d11.dll の読み込み.... 成功 1124: dxgi.dll の読み込み.... 成功 1131: API CreateDXGIFactory2 のアドレスを取得します.... 成功 1139: IDXGIFactory2 を作成します.... 成功 1150: IDXGIAdapter を列挙 1153: Adapter No.0 Desc:NVIDIA GeForce GTX 1060 6GB 1157: Output Device No.0 Name:\\.\DISPLAY2 1161: Output Device No.1 Name:\\.\DISPLAY1 1165: Adapter No.1 Desc:Microsoft Basic Render Driver 1169: API D3D11CreateDevice のアドレスを取得します.... 成功 1177: IDXGIAdapter を取得します.... 成功 1185: Direct3D 11 FeatureLevel 11_0 以上を対象とします 1189: ID3D11Device オブジェクトを取得します.... 成功 1257: IDXGIDevice1 を取得します.... 成功 1265: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 1269: [ウインドウモード 620x600] 1273: IDXGISwapChain2 を作成します.... 成功 1291: IDXGIFactory2->CreateSwapChainForHwnd の戻り値:0x00000000 1295: IDXGIOutput を取得します.... 成功 1303: Graphics Device:NVIDIA GeForce GTX 1060 6GB 1307: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1311: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 1315: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 1320: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 1324: 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 1328: 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 1331: アルファ付き 16bit カラーフォーマットは DXGI_FORMAT_B4G4R4A4_UNORM です 1335: アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1339: アルファテスト用 16bit カラーフォーマットは DXGI_FORMAT_B5G5R5A1_UNORM です 1343: アルファテスト用 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1347: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 1351: DXT2テクスチャフォーマットは使えません 1355: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 1359: DXT4テクスチャフォーマットは使えません 1363: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 1367: BC7_UNORM テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM です 1370: BC7_UNORM_SRGB テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM_SRGB です 1374: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 1378: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 1382: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 1386: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 1390: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 1394: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 1398: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 1402: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 1406: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 1410: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 1415: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 1419: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 1423: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 1427: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1431: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 1435: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 1439: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 1443: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 1447: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 1451: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 1456: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 1460: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 1465: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 1468: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 1473: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 1477: 使用する機能レベル:D3D_FEATURE_LEVEL_11_1 1481: 同時にレンダリングできるバッファの数:8 1485: 最大テクスチャサイズ 幅:16384 高さ:16384 1489: 標準描画用の頂点バッファの作成.... 成功 1497: シェーダーコード関係の初期化.... 成功 1515: 各種シェーダー用定数バッファの作成.... 成功 1524: 各種 ID3D11InputLayout の作成.... 成功 1554: 画像の単純転送処理の初期化... 成功 1564: 深度バッファを作成します.... 成功 1573: フォントの初期化を行います 1580: フォントの初期化は正常に終了しました 1656: 文字コードバッファの初期化を行います... 完了しました 1673:DXライブラリの初期化処理終了 12924:ウインドウを閉じようとしています 12934:ウインドウが破棄されようとしています 12940:ソフトを終了する準備が整いました 12947:フォントの初期化を行います 12952:フォントの初期化は正常に終了しました 12975:d3d11.dll の解放 1 12981:dxgi.dll の解放 1 12986:Direct3D11 のオブジェクト数を出力 12990:Direct3D11 のオブジェクト合計数 : 0 12995:DirectInput 関連の終了処理... 完了 13003:サウンド関連の終了処理... 完了 13019:ウィンドウ関連の終了処理... 完了 13099:COMを終了... 完了 13103: 13108:Alloc memory dump 13113: Total size:0(0.000kb) Alloc num:0 13118:
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.25 )
名前:管理人 日時:2020/09/14 23:05

> 「終了が受け取れない.mp3」 > につきましては、私の環境ではtotal(714919)と表示されてしまいます。 > すみません「714919の地点では終了が返らずに止まる」というのが正確でした。 > つまり(357447)を通過すれば終了が返りますが、早送りを使ってそれを超えてしまうと > 終了が得られないという状態です。 357447 を通過すれば終了が返るのですか…謎ですね ところで 357447 を超えてしまった場合はずっと無音なのでしょうか? > 同じファイルで同じプログラムなのに数値が変わってしまうというのは > 開発環境(visual studio community 2015を使っています)の違いでしょうか? 開発環境や戻り値の型のLONGLONGは関係ありません mp3 の再生には各PCにインストールされているコーデックを使用していますので、 PC毎に正常に再生できたりできなかったりします なので動作が安定しないので、mp3 の代わりにDXライブラリの内部にデコード処理の ライブラリを含んでいる ogg 形式を使用されることを推奨しています > 「音がおかしい.mp4」 > につきましては、本来の長い動画の状態で開きますとフリーズしてしまいます。 > ttps://file-post.net/en/s0/d1/1600061160_222872759_120/?id=UkYf5jIZNTFw (ぱす:sdfagsga) > ↑ここにそれを再現するための動画を上げましたので、そちらの「音がおかしい2.mp4」 > を無劣化で4倍に拡大したものを下のプログラムで(Movを1にして)開いていただけば、だいたい > 70パーセントくらいの所をシークするとフリーズすると思います。 私の環境では 70パーセントくらいの所をシークしてもフリーズしませんでした… > また、動画を他の動画プレイヤーで開くと聞こえるはずの「男のうめき声」が > 選択しているチャンネルの問題でしょうか、聞こえなくなっているのも確認できると思います 「音がおかしい.mp4」の動画は 6chサウンドですが、DXライブラリは 2chまでしか 再生しませんので、恐らく「男のうめき声」が 3ch以降に含まれているのではないかと思います > 「たまに音がなくなる_edit.mp4」 > につきましては下のプログラムで試していただけると分かりやすいのですが > シークバーを適当にポチポチやったりドラッグで移動を繰り返していると > 動画が止まってしまいます。 手元の環境ではシークバーをポチポチやっても動画は止まらなかったのですが、 代わりに無音になってしまうという現象が発生しました 無音になってしまう現象のみ修正したのですが、動画が止まる現象も直っている可能性も ありますので、よろしければこちらの修正版をお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.26 )
名前:たろう 日時:2020/09/15 00:49

いつもありがとうございます。 まったく急いでいるわけではありませんので お手すきの時などで結構です、以下ご確認いただければと思います 「終了が受け取れない.mp3」 PCは比較的新しく、またコーデックなどを入れた事はないので 多分windows10デフォルトのmp3のコーデックだと思いますが、なにか 追加で入れたものをお使いになっていますでしょうか? > ところで 357447 を超えてしまった場合はずっと無音なのでしょうか? 超えた位置をシークバーで指定すると無音で714919まで進んでその位置で止まります 357447を通過すれば停止を受け取れますし、再度再生しなければ止まります ・・・という状態だったのですが、今回頂いたバージョンで357447を超えた場所を指定すると フリーズするようになってしまいました。また357447を通過した場合も、通過した瞬間 フリーズ(ウィンドウ自体動かせなくなります)して、最後の1秒ほどの音だけずっと繰り返し 音が鳴り続ける状態になります。強制終了しかできなくなります。 ※前回のバージョンに戻して試しましたが、フリーズは今回のバージョンのみで発生します 「音がおかしい2.mp4」 につきましては、PCのスペックの問題なのでしょうか、長ければ長いほど 異常が発生しやすくなる印象なので、例えば「音がおかしい2.mp4」を8倍の長さなどにしても フリーズしませんでしょうか? そしてこちらについても「音がおかしい2.mp4」は前回のバージョン同様おなじフリーズが発生しますが 前回のバージョンでは再生できていた「音がおかしい.mp4」については、 開くこともできずに起動した瞬間フリーズしてしまうようになりました 「たまに音がなくなる_edit.mp4」 につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました これも前回のバージョンでは起きなかった現象です。 ちなみに上記の「フリーズ」は全て、 基本的にvisualstudioの「デバッグの開始」で試していますが、アクセス違反などで止まるわけではなく ウィンドウが固まって動かせなくなって、「デバッグの停止」でしか終了できなくなる状態です。 何度もすみませんm(__)m 宜しくお願いいたします
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.27 )
名前:管理人 日時:2020/09/15 03:28

すみません、ちゃんとしたご返信は本日か後日します とりあえず直ぐご返答できる部分のみのご返信です > 多分windows10デフォルトのmp3のコーデックだと思いますが、なにか > 追加で入れたものをお使いになっていますでしょうか? 私も特にコーデックを追加したことはありませんが、昔なら GOM Player など、 ユーザーがコーデックをインストールするつもりは無くても、ソフトをインストールしたら 一緒にコーデックもインストールされるというパターンがあるので、知らない内に何か コーデックがインストールされている可能性はあります あと、私の手元の環境は Windows10 のバージョン 2004 であることの影響も 大きいかもしれません( Windows10 の次期バージョンのテスト版を先行してインストールする、 という設定に一時的にしていたことがあるので… 詳細はこちらをご覧ください↓ <Windows 10の新機能を公開前に試せる「Windows Insider Program」最新動向> https://www.atmarkit.co.jp/ait/articles/2007/30/news018.html > 例えば「音がおかしい2.mp4」を8倍の長さなどにしても > フリーズしませんでしょうか? すみません、手元に「音がおかしい2.mp4」を8倍の長さにしたファイルが無いので分かりません > 「たまに音がなくなる_edit.mp4」 > につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました 『シークバーを適当にポチポチやったりドラッグで移動を繰り返している』では 不具合は発生しなくなりましたでしょうか?
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.28 )
名前:たろう 日時:2020/09/15 09:38

いつもご返信いただきありがとうございます VLCは内蔵コーデックなのでそれのみを使っています。 もともと動画プレイヤー的なものは以前から作っていて、追加コーデックなどを入れて、 アンインストールできなくなるとテストが出来なくなる都合上、入れないように気を付けているので それ以外は入って居ないとおもうのですが・・・意図せずという事もありえます 「Windows Insider Program」も試してしまうと元に戻す自信がありませんm(__)m 「たまに音がなくなる_edit.mp4」についてですが 少なくとも1分もすれば大体フリーズしていたので5分くらいかなりしつこくやりましたが、異常は起きませんでした 末尾クリックの件以外は完全に改善されているようです<(_ _)> > すみません、手元に「音がおかしい2.mp4」を8倍の長さにしたファイルが無いので分かりません ということは前回も、そのまま(20分ほど)をお使いになったと思いますが これをAvidemuxなどで無劣化連結4倍以上しないと異常はおきません。 すみません、大きいファイルをなんとかそのままお渡しするべきでした<(_ _)> BQE00322(あっとまーく)nifty.comに4倍にしたファイルのリンクを送りますので、こちらのでお試しいただければと思います シークバーの75%辺りをクリックするとフリーズすると思います お忙しい所すみません、 宜しくお願いいたします<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.29 )
名前:管理人 日時:2020/09/16 00:11

> 「たまに音がなくなる_edit.mp4」についてですが > 少なくとも1分もすれば大体フリーズしていたので5分くらいかなりしつこくやりましたが、異常は起きませんでした > 末尾クリックの件以外は完全に改善されているようです<(_ _)> ご確認ありがとうございます > ということは前回も、そのまま(20分ほど)をお使いになったと思いますが > これをAvidemuxなどで無劣化連結4倍以上しないと異常はおきません。 すみません、『ここにそれを再現するための動画を上げました』の文で、アップしていただいた動画を そのまま使えば再現できると早合点してしまっていました m(_ _;m ( あと『そちらの「音がおかしい2.mp4」を無劣化で4倍に拡大したものを』の部分を 『再生時間を4倍』ではなく、『描画サイズを4倍』だと勘違いして if(Mov)DrawExtendGraph(0,0,600*4,600*4,動H,0); と書き換えたりしていました… ) アップしていただいた4倍の再生時間の『音がおかしい2.mp4』で手元でも現象が再現できました サウンドデータの再生時間の計算精度が足りていないことが原因でした こちらに修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 「終了が受け取れない.mp3」 手元に Windows10 バージョン 1909 での動作を試せる環境があったので確認したところ、 表示が(714919)になる現象が再現しました MP3 の再生には ACM という API を使ったデコードを試して、それが失敗した場合は DirectShow という API を使ったデコードを試すようになっているのですが、 Windows10 バージョン 2004 では ACM を使ったデコードが失敗して、DirectShow を 使ったデコードを行っていて、この場合は正常に動作していました Windows10 バージョン 1909 では ACM を使ったデコードが成功するのですが、 GetSoundTotalTime の戻り値として返す再生総時間の値の計算処理にバグがありました こちらのバグも今回のバージョンで修正してあります m(_ _;m > ・・・という状態だったのですが、今回頂いたバージョンで357447を超えた場所を指定すると > フリーズするようになってしまいました。 > 「たまに音がなくなる_edit.mp4」 > につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました こちらのシークバーを右端まで移動するとフリーズする現象も修正しましたので、 よろしければお試しください m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.30 )
名前:たろう 日時:2020/09/16 21:05

いつもご対応いただき、ありがとうございます すみません誤解のある表現でした。 「延長」と書くべきところを「拡大」と書いてしまっていました<(_ _)> またバージョン 1909環境でまで確認していただき、ありがとうございます。 さきほど提出させていただいた動画や音楽ファイルにつきまして 上記の問題が全て修正されていることを確認いたしました<(_ _)> その他いろいろな動画にて、色々無茶をして試しましたが 全て問題なく再生できています。 お忙しい中次々と失礼いたしました。 大変助かりました<(_ _)> 私の分は完全に解決です(…と言ってまた何か見つけてしまったらごめんなさい) 紺帽子さんが、よろしければ解決でお願いいたします<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.31 )
名前:管理人 日時:2020/09/17 02:03

正常に動作するようになったようで何よりです こちらこそバグだらけですみませんでした m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.32 )
名前:紺帽子(解決) 日時:2020/09/17 19:27

atoiDxが正しい値を返すのを確認しました。 動画のほうは現在でも下記の現象が出ています。 ・動画の音にプチノイズが入ることがある ・動画の音が再生されないことがある ・動画の途中から音が小さくなることがある ・動画の終了時に次に進まないことがある 同じ状況で再生しても必ず現象が起きるわけではありません。 SetEnableWASAPIFlag( FALSE );を使用した場合も現象が発生しました。 これらの現象について詳しいことが分かった場合は 改めて報告させていただきますので一旦解決とさせていただきます。 修正ありがとうございました。
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.33 )
名前:たろう 日時:2020/10/05 23:35

いつもすみません、たろうです また再生できないケースを見つけてしまいましたので失礼いたします<(_ _)> 以前とほぼ同じですが、以下テスト用プログラムで 4K動画を再生すると、二分ほどで映像が止まってしまいます(※音だけ流れ続けて映像だけ止まります)。 二つある4K動画で両方とも同じ症状が出ますので、4Kであればどの動画でも異常が発生すると思われますが 念のため、BQE00322(あっとまーく)nifty.comに、動画のリンクを送らせていただきます。 お手すきの時で結構です、ご確認いただけると助かります 宜しくお願いいたします<(_ _)> ---------------------------------------------------テスト用プログラム--------------------------------------------------- #include "DxLib.h" #define Mov 1//音楽0 動画1 #define Vol 55//音量 int Total(int hd) { if(Mov){return (int)(GetMovieTotalFrameToGraph(hd)*(GetOneFrameTimeMovieToGraph(hd)/(double)1000));} else {return (int)GetSoundTotalTime(hd);} } int TtoF(LONGLONG T,int hd) { LONGLONG oneF=(GetOneFrameTimeMovieToGraph(hd));if(oneF==0)return 0; return (int)(T*1000/oneF);} int SeekBar(int hd,int 総) { static int x=310,y=300,今=0,now=0; int 鼠x=0, 鼠y=0, 鼠o=0; if((GetMouseInput()&MOUSE_INPUT_LEFT )!=0){鼠o=1;} GetMousePoint( &鼠x , &鼠y ) ; if(Mov){now=TellMovieToGraph(hd); } else {now=GetSoundCurrentTime(hd);} double p=(600*(now/(double)総)); DrawBox(x-300 ,y-2 ,x+300 ,y+2 ,GetColor(255,255,255),1); DrawBox(x-1 ,y-10,x+1 ,y+10,GetColor(255,255,255),1); DrawBox(x-298+p,y-10,x-302+p,y+10,GetColor(255,255,255),1); if(鼠o&&x-300<鼠x&&鼠x<x+350&&y-30<鼠y&&鼠y<y+30) { int mx=鼠x-(x-300);if(mx<0){mx=0;}else if(mx>600)mx=600;int des=(mx/(double)600*(double)総); if(Mov){if(des<0)des=0;PauseMovieToGraph(hd);if(GetMovieTotalFrameToGraph(hd)==-1){ SeekMovieToGraph(hd,des);}else{des=TtoF(des,hd);SeekMovieToGraphToFrame(hd,des);} PlayMovieToGraph(hd); } else {if(des<0)des=0;StopSoundMem(hd); SetSoundCurrentTime(des,hd); PlaySoundMem(hd,DX_PLAYTYPE_BACK, FALSE); } } return now; } int 再生中(int hd){if(Mov){return GetMovieStateToGraph(hd)>0;}else{return CheckSoundMem(hd)==1;}return 0;} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(620,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H; if(Mov){ 動H=LoadGraph("4K.mp4");} else { 動H=LoadSoundMem("終了が受け取れない.mp3");} int 総=Total(動H); if(Mov){ ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK); } int t=0,t_plus=10000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int play=再生中(動H); if(!play) { if(Mov){ SeekMovieToGraph(動H,0); ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { SetSoundCurrentTime(0,動H);ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); } } if(Mov)DrawExtendGraph(0,0,600,600,動H,0); int now=SeekBar(動H,総); DrawFormatString( 10,250,GetColor(255,255,255),"total(%d) now(%d) play(%d)",(int)総,(int)now,(int)play ); ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.34 )
名前:たろう 日時:2020/10/05 23:53

すみません、説明が不足していたので追記します 再生後、シークバーなどを触らずに二分ほど放置した後、画像が止まります。 宜しくお願いいたします<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.35 )
名前:管理人 日時:2020/10/06 23:04

載せていただいたプログラムをメールで送っていただいた4K.mp4を追加して実行してみましたが、 画像が止まることなく最後まで再生されました 画像が止まる、というのは、プログラムがエラーで終了してしまうわけではないのでしょうか?
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.36 )
名前:たろう 日時:2020/10/06 23:44

お試しいただきありがとうございます。 「画像が止まる」についてですが、音声はそのままに、画像だけ止まった瞬間の静止画になってしまいます。 プログラムが停止する事はなく、「now〜」の部分の数字は更新され続けますので、動画自体の映像だけが止まります。 同時にタスクマネージャーで監視していると、きまってメモリの使用率が1500MBを超えたあたりのところでそのような状態になります。 (このときメモリ全体としてはまだ半分ほど未使用域が残っていて余裕があります) 以前お話しいただいた通り、シークするとある程度メモリ使用率がリセットされますので、どの位置から進めても プログラムのメモリ使用率が1500MBを超えたあたりで画像が止まります。 私の環境では必ず発生しますので、もしかするとウィンドウズのバージョン違いなどに起因する Media Foundation側の問題なのでしょうか? DXライブラリ側の問題でなければすみません<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.37 )
名前:たろう 日時:2020/10/07 00:35

追加で色々試しましたので追記します 画像が止まった状態は、動画の末尾までずっと止まったままですが、その後 @nowの数値が351767(※totalは351798)で止まって、画面も止まったまま、音はずっと再生され続ける A終了を受け取って先頭からリピートされる のどちらかになります。 @は動画先頭から一切シークバーを触らない場合に良く起こります。いつも351767で止まり、それ以降シークできなくなります Aは静止画になった後、シークバーで末尾直前に移動するなどした場合に起こります。 シークバーは先頭に戻りますが、リピートされても静止画のまま、音だけ先頭から再生されます 宜しくお願いいたします
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.38 )
名前:たろう 日時:2020/10/07 23:17

すみません、また追記です その後2ギガある1280x720の動画を、メモリ使用率が1500以上になるまで再生しましたところ 上記と同じく画像が止まりました。 いままで長いファイルをシークなどをすることなく再生したことが無かったようで気づかなかったのですが 4Kであるかは関係なく、単にサイズの大きなファイルを再生すると 例外なく画像が止まってしまうようです… また、画像が止まった状態で、その状態でもソフト自体は止まっていませんので、そのままDeleteGraph(動H);を実行し、再度 動H=LoadGraph("4K.mp4"); PlayMovieToGraph(動H); を実行すると、動画の映像が止まるだけでなく ウィンドウが動かなくなり、普通にフリーズしてしまう事が分かりました。 とりあえず分かった事は以上です。 失礼いたしました<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.39 )
名前:管理人 日時:2020/10/07 23:22

ご情報ありがとうございます 私の手元でも x86アプリ設定( 32bitアプリ設定 ) で実行したところ、 メモリ使用容量が 1500MB を超えた辺りで画面が止まりました 恐らく『32bit アプリは 2GB までしかメモリを使うことができない』 という制限が関係していると思います x64アプリ設定( 64bitアプリ設定 )で実行すれば止まらなくなると思いますので、 よろしければ VisualStudio の画面上部に表示されている x86 の部分をクリックして 表示されるプルダウンメニューから x64 を選択して 64bitアプリとして動作するように 設定した上で実行してみてください m(_ _)m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.40 )
名前:たろう(解決) 日時:2020/10/08 00:35

ご返信いただきありがとうございます。 さきほど64bitで試しましたところ、画面の停止はなくなりました。 今後は32bit対応の必要もなくなってくると思いますので 64bit専用という事で解決としたいと思います。 いつもお忙しい所ご対応いただきありがとうございます。 長々と失礼いたしました<(_ _)>
メンテ

Page: 1 | 2 |

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

   クッキー保存