« エンディアン | メイン | Theoraプレイヤー »
2005年12月09日
動画再生エンジン開発日誌:: Playerの構成
Tweet @jin1016をフォローどのようなデザインにするか考え中。
DirectShowは面倒でややこしいが、かなりよく考えられた仕組みだ。
ピンとフィルタ、メディアサンプルが構成要素で、フィルタをピンでつないでメディアサンプルをアップストリームからダウンストリームへ送る。
基本的な仕組みはそんなところだ。
ただ、単に動画を再生するだけであれば汎用的過ぎる。
動画を再生するのに必要なものを大別すると次の4つになるだろうか。
・入力ストリーム
・デマルチプレクサ
・デコーダー
・レンダラ
入力ストリームは、入力ソースに柔軟性を持たせるために必要になる。
ファイル以外にも、メモリ上からやネットワーク越しなどソースが与えられる場所を選択できるようにするために不可欠だろう。
デマルチプレクサは、マルチプレクスされたデータを分離するのに必要。
Theoraなら、Oggをデマルチプレクスする必要があるし、他のコンテナ形式が使われる可能性もある。
コンテナ形式にあわせて作る必要があるだろう。
デコーダーは、符号化されたデータを復号化するのに必要になる。
復号化後に、色空間変換が必要になる可能性があるけど、これはレンダラでやった方が良いだろうか?
復号化途中に同時に色空間変換をやってしまった方が効率的になる可能性もある。
デコーダーもしくはレンダラでやるようにするかな。
特殊な出力形式などに対応する場合、レンダラでやった方が対応しやすいこともあるだろう。
レンダラは、最終出力装置にデータを送るのに必要になる。
様々なものに出力する可能性があるので、出力するものごとに作る必要があるだろう。
とりあえず、この4つが分離されていればそれなりに汎用的になるだろう。
悩んでいるのはDirectShowのピンのような仕組みを導入するかどうか。
そのような仕組みを導入するとかなり汎用的になる。
再生以外の用途にも使えるようになる。
が、あまり汎用的にしすぎると収拾がつかないので、ある程度のところで絞る必要がある。
ただし、DirectShowのピンやフィルタは概念的な意味合いも多い。
フィルタの機能の大部分がピンにあったり、ピンの機能がフィルタにあったりと、内部的にどちらにどのような機能があるかは作る人の裁量に任せられている。(そもそもピンやフィルタはインターフェイスなので実装はどうとでもなる)
どうするかなぁ。
投稿者 Takenori : 2005年12月09日 23:15
コメント
吉里吉里で使う場合は、ビデオ再生部分からの音声出力を吉里吉里の音声処理部分に流し込む実装にしたいと思っています。
ビデオはたしか音声がある場合は音声に同期する形で再生されるんですよね。
そうするとその情報であるクロックソースを吉里吉里側で提供する仕組みを考えなければ ...
投稿者 w.dee : 2005年12月10日 00:04
このエントリーの構成で言うと、吉里吉里の音声用のレンダラを書けば対応できることになります。
指摘のとおり、ビデオは音声がある場合は音声を基準にします。
確か、DirectShowだとオーディオレンダラが基準クロックを提供するようになっていたと思います。
なので、それと同じようにするとすれば、音声用のレンダラの作り次第でいかようにもなるはずです。
後、再生速度のコントロールはレンダラに任せる仕組みにしようと思っていますので、何らかの方法でオーディオレンダラとビデオレンダラが連携出来れば、それで再生速度がコントロール出来るかと。
投稿者 Takenori : 2005年12月10日 00:44
comments powered by Disqus