1. 開発理由
cocos2dx シリーズ全体は Windows ビデオ再生をサポートしていないため、開発とテストに不便が生じます。Unreal
と Unity はどちらもビデオをテクスチャにレンダリングする方法を使用しており、これによりビデオとエンジン レンダリング オブジェクトの統合が大幅に向上しますが、cocos2dx シリーズ全体ではサポートされています。それをサポートしません。
2. Windows ビデオ再生のテクスチャへのレンダリングから開始します。
Google での検索と調査の結果、Microsoft Windows SDK が提供する Media Foundation (COM コンポーネント) が Windows ビデオ再生を実装するための最良のソリューションであることが判明しました。これには、ffmpeg に比べて次の利点があります。
- システムコンポーネントなのでライセンスの問題はありませんが、ffmpeg は LGPL であり、一部のコンポーネントは GPL であるため、MIT オープンソースプロトコルを使用した axmol エンジンには適していません。
- Media Foundation を使用する場合、オーディオ サンプリングを気にする必要はありませんが、ffmpeg はオーディオを手動で処理する必要があります。Media
Foundation は win7 以降のシステムに組み込まれており、サードパーティ ライブラリを追加する必要がなく、ハードウェア アクセラレーションをサポートしています。パフォーマンスはシステムによって保証されており、エンジンは気にする必要がありません。 - .mp4、.webm などの複数のビデオ形式 (Media Foundation COM コンポーネントによってサポートされ、追加の実装は必要ありません) を簡単にサポートします。
3. 実施の基本原則と考え方
Microsoft の公式の古典的な例や公式ドキュメントを参照して、実装のアイデアを決定します。
保護された再生
シーク、早送り、および逆再生
- ビデオ ファイルの再生プロセスとサウンド レンダリングはメディア セッションによって完全に制御されます
- メディア セッションを作成した後、ビデオ サンプリング出力形式を YUY2 または NV12 に設定します。
- IMFSampleGrabberSinkCallback から継承されたカスタム ビデオ サンプラー COM コンポーネント MFVideoSampler を実装します。
- ビデオ サンプラーを作成し、ビデオ レンダリング アクティビティのターゲットとして機能します。キー API: MFCreateSampleGrabberSinkActivate
- ビデオ サンプリング コールバック インターフェイス OnProcessSample で、ビデオ サンプリング フレーム データをグラフィックス カードにアップロードし、
グラフィックス カードのフラグメント シェーディング プロセス (フラグメント シェーダーと呼ばれることが多い) 中に YUV カラー スペースを RGB に変換します。
上記の手順により、基本的にメディア ファイルの完全なオーディオおよびビデオ再生機能を実現できます。詳細については、Github PR ページを参照してください: https://github.com/axmolengine/axmol/pull/577
この
パッチ
は、現在サポートされていないことを除き、UserInputEnabled
すべてのインターフェイスが完成し、 、 などのビデオ ファイルを再生できるようになりました.mp4
。その効果は次のとおりです。.mkv
.webm
アドバイスを歓迎します。