ムービーテクスチャ実装の動画プレイヤー2

下記の問題は解決した。


・ループ再生が可能になった
・テクスチャが飛ばなくなった
・デコード前のピクセルデータをバッファリングすることでメモリ使用量を大幅に減らすことができるようになった
・不安定な動作をしなくなった(多分)


ただ、既存の問題に加えて、新たな問題も浮上した。


・ループ再生後、絵と音の同期がとれていない。


以前に作ったプレイヤーでは発生しなかったのだが、そもそもまだ絵と音を同期する機能を入れていない(※)ので、まずはそれを作ってからだろう。


※フレームスキップしたり、音よりも先行して描画してしまわないようにする処理がない


AAC を再生すると音が飛ぶ


どうやらライブラリ側の問題らしい。
ffmpeg を新しいものにすればいいよというメッセージがコンソールに表示されるが、現在のものが最新なので微妙な気分だ。
未来にいって取ってこいというのか?
ちなみに mp3 なら30分ぐらいの動画を再生しても音飛びはなかった。
AAC の場合は、数分で音飛びが発生する。



FPS の高い動画を再生すると画面がちらつく


二つのレンダリングコンテキストを使って描画しているからなのかもしれないが、ダブルバッファと描画のタイミングが合っていないようだ。
FPS が 30 ぐらいのものは問題なし。





既存の問題も書いておく。


・パケット生成部分を自作メモリ管理に切り替える
ソースコードが汚くなってきた


今後追加したい機能。


・動画のシーク処理
・一時停止処理
・停止処理(最初に巻戻るやつ)


シーク処理は、av_seek_frame という関数を使えばいけるので簡単だ。
一時停止、停止も既にフラグだけは入れてあるので、それほど時間はかからないと思われる。


【追記】
高い FPS の動画再生時に画面がちらつく現象と AAC で音飛びする現象は、レンダリングコンテキストやライブラリなどの問題ではなく、可変ビットレート(vp6)と固定ビットレートH.264)での制御方法の問題だった。
固定ビットレートFPS 算出部分を修正したら、直ってしまった。
ちなみに、コンソールに大量に出るエラーメッセージは、HE-AAC デコード時に起こるものらしい。
HE-AAC に対応していないために、高音部分がデコードされずにこもったような音になってしまうようだ。紛らわしい。