【解決方法】再生する前に AVI ファイルを完全に読み込むにはどうすればよいですか?

プログラミングQA


Windows 32 ビット システムの C++ プログラムで非常に大きな avi ファイルを再生しています。

小さな avi ファイルは正常に再生されます。 この 1 つの avi ファイルには、圧縮されていない大きなビットマップが含まれており、再生中に読み込みが遅いように見えるため、再生が遅くなります。 再生されますが、遅いです。 VLC メディア プレーヤーでの再生速度が大幅に向上します。 毎秒 40 フレームでエンコードされましたが、私の実行可能ファイルでは毎秒 10 ~ 15 フレームで再生されます。 完全にロードすることを考えていたので、完全にロードした後、Animate_Open を使用して再生します。

使っています

C++
#define IDC_MYANIMATE   9

    HINSTANCE hInstanceAVI = GetModuleHandleW (NULL);

    HWND hwndAvi = Animate_Create (hParent, IDC_MYANIMATE, WS_BORDER | WS_CHILD, hInstanceAVI);

    int iAp = Animate_Open (hwndAvi, L"Very_Large.avi");

    ShowWindow (hwndAvi, SW_SHOW);

    iAp = Animate_Play (hwndAvi, 0, -1, -1);

しかし、これは、再生中に avi ファイルを継続的にロードすることによって遅くなるようです。

どうすれば avi ファイルを完全に読み込み、読み込み時に再生を開始できますか?

私が試したこと:

このロジックを調整できる場合に備えて、任意のタイプのビデオ ファイルをロードする方法を検索してみました。 これには何の助けも見つかりませんでした。 それらはすべて、私がやっていることとほぼ同じように見え、再生する前に最初にaviファイル全体をロードしようとはしていません。

avi ファイルを実行可能ファイルの一部にするつもりはありませんが、実行可能ファイルが avi ファイルをロードし、ファイルが完全にロードされたら再生します。 そうすれば、aviファイルが入っているメモリを削除し、その大量のメモリを解放して他のことをすることができます。 そのため、exe を起動し、exe の実行中にボタンをクリックして avi ファイルをロードし、ボタンをクリックして avi を再生します。 単純? そのはず。 avi の読み込みに問題があり、ボタンをクリックして再生するまでメモリに保持します。

私は高速な CPU、ソリッド ステート ドライブ、大量の RAM、および大きなページ ファイルを使用しているため、これを調整できるとは思えません。

複数の単一ビットマップをロードして後で表示できるので、これは簡単なはずですが、何かが足りないようです。

これを解決するために助けを求めています。 ありがとう。

解決策 1

// int iAp = Animate_Open(hwndAvi, L"Very_Large.avi");

// The second parameter Animate_Open() can contain a pointer to the path of the AVI file, or the name of an AVI resource.
// The parameter is created with the MAKEINTRESOURCE macro, which consists of the resource identifier in the LOWORD and null in the HIWORD.
// An application can use FindResource() and LoadResource() to find and load any type of resource.
// It is therefore also possible to read the AVI as a resource from a file.

int iAp = Animate_Open(hwndAvi, MAKEINTRESOURCE(IDR_AVI1));

コメント

タイトルとURLをコピーしました