« OpenMAX と GStreamer | メイン | プレイヤーを分割 »

2007年01月21日

動画再生エンジン開発日誌:: theoraのフレーム数

    

もしかしなくても、フレーム数を得るにはページヘッダーを最初から読んでいって、最後のページのヘッダーに書いてあるフレームを見ないとわからない?
シークも順番に読んでいって目的のフレームを探して、直前のキーフレームから開始しないとだめか。
やはり、最初にすべてのページを読んでキーフレームの位置をキャッシュしておいたほうが良いだろうか?
それとも、必要になった時に読むべきか。

最初にすべて読むようにして作ってみて、あまりにも遅かったら適時読むようにするか。

Oggコンテナメモ
RFC3533
Ogg Vorbisの成り立ち



投稿者 Takenori : 2007年01月21日 22:01



コメント

Oggは確か、最後のページを見ないと最後のgranule_positionなどがわかりません。

なので、最後のページを開いて最後のgranule_positionを見ます。で、この最後のページを探す処理ですが、ページヘッダらしき物をファイルの最後の方から探し、それが正常なページならば、そこからgranule_position を得るという、発見的な方法しかないようです。見つかった物がゴミならばもっと前を見ていきます。

ゴミかどうかはページのチェックサムで判断します。

シークもこれも発見的に行うしかないようです。「大体ここら辺」と、ビットレートなどから?換算した位置に大まかにシークし、その付近でまずページヘッダを探し、そこから得た情報でさらに前のページあるいは後ろのページを探して位置を特定するようです。

ここらへんの処理はlibvorbisのvorbisfile.cに書いてあります。実際はchained streamをサポートする関係でもっと複雑な処理になっています。

それにしてもTheoraはあまり動きがないですねorz
その他の動画コーデックで使っても大丈夫そうなやつ
というとDiracとかSnowとかあるけど……

投稿者 W.Dee : 2007年01月22日 00:28

やはり、そうですか。
フォーマット見てて、それしかないよなぁと思っていたのですが。

アルファ7の次がベータとかウィキペディアに書いてますが、一向に出ませんね。
1.0はまだまだ先ですかねぇ。
とりあえず、Winでは MPEG IとWMVでしょうか。

投稿者 Takenori : 2007年01月22日 23:31


comments powered by Disqus
Total : Today : Yesterday : なかのひと