Date

Windows Media and DirectShow tips, gotchas and code bits の Playing an MPEG1 file in WMP via HTTP returns the wrong duration によると、WMPを使ってHTTP経由のMPEG1再生をすると、不正な長さを返すとのこと。

内部処理として、XPとVistaでは挙動が異なるそうだ。

XPでは、古い「URL Async File Source」フィルタが使われます。MPEG1 スプリッタフィルタがURL Async File Source フィルタに長さを問い合わせるが、結果が正しくないことを認識するので、システムパックヘッダー(SPH)に基づいて長さを計算する。

VistaのHTTPソースフィルタはシークをサポートするので、全体の長さを計算できる。MPEG1スプリッタフィルタはファイルの終端にシークするコマンドをソースフィルタに送る。終端のPESパケットからタイムスタンプ情報を読み取る。

MPEG1、MPEG2フォーマットはストリーミング転送向けに設計されているので、インデックスや全体をスキャンすること無しに正確な長さを前もって取得することはできないとのことだ。


Comments

comments powered by Disqus