- 2006-05-09 (火)
- flash
via: kaourantin.net
Flash Playerのフレームレートに関するadobeの中の人のエントリがあったので、できるだけ邦訳してみました。
致命的な翻訳ミスがあるかもしれないので、意味不明な箇所は本文を見てください。
(翻訳ここから)
There(前置き)〜
Flashは相対的な時間計測モデルを使っているので、フレームレートというものをそれほど意識せず、できるだけ、同じフレーム間隔で実行しようとします。例えば、フレームレートを30 frames/secに設定すると、Flash Playerは(フレームを描画するためにかかる時間を無視すると)次のフレームを表示するまで33ミリ秒待機しようとします。このあいまいさが全ての元凶です。
第一にFlash PlayerはOSから通知される時間情報に依存します。NetScapeのplugin APIであるWM_TIMERを使うと最悪です。special Internet Explorer APIが提供しているmultimedia timerのが最良の選択です。
第二に、WindowsやMacOSではミリ秒以下をサポートしていないので、フレームレートのミリ秒以下をまるめて(ごまかして)しまいます。
第三に、OS、ブラウザ、Flash Playerが各フレームのコードをを実行するのに時間を要するので、結果的には、あなたの再生環境にもよりますが、設定したフレームレートと比べて -10〜5 frame/secほどのずれがおこるのです。
Flash Player 8とFlash Player 9の(新しい?)処理実行時間のほとんどはガベージコレクションのためで、回避策のないものです。
以上のことから、global basisにのっとったフレームレートを算出することはできず、それを直すこともできないのです。
フレームレートの最大値について話すと、Internet Explorerの最大値は100 flame/sec です。なぜならWindowsのタイマーの最小値が10ミリ秒だからです(1秒(1000ミリ秒)÷10ミリ秒=100 flame/sec)。FireFoxはどうでしょうか?FireFoxは特別なタイマーを持たず、プラグインによってタイマーの最小値が決まっていません。これは思うに、プラグインがCPU timeをとりすぎることに対し、ユーザーが不満を漏らしていたためでしょう。この妥当な意見には私も賛成で、fpsが8から12以上だったり、CPUの2,3%も使ってしまうようなオンライン広告(Flashバナー?)を作っている全てのデザイナーは恥じるべきです。1つぐらいの広告なら問題ないですが、2,3の広告を載せているページが結構あるのですから。
Mozillaの開発陣もまた、隠れたタブのプラグインが時間をとらないようにすることで、新たなタブを開いた時にブラウザのパフォーマンスが低下しないようにしました。だからSWFやFLVが隠されたタブ上で動いていなくても驚くことはありません。AppleはSafariでこれをさらに発展させ、アクティブでないブラウザでは4 frames/secに制限し、電力消費を抑え、ファンの騒音を裂ける努力をしています。Google Videoにアクセスし、他のアプリケーションに切り替えてみてください。フレームレートは4に落ちるでしょう。While we could drive our own background thread and work around this, there is a reason they decided to take these steps. We would be ill advised to just hack around it.
これはどういうことでしょうか?要は、あなたが設定したフレームレートはそれほど信用できませんし、ミリ秒単位での正確さを期待してはいけないのです。同期をはかったりする作業はなおさらです。もし同期させたい時の唯一の手段は実行させたい'まさに'そのタイミングにActionScriptを記述するか、メインタイムラインにストリーミングサウンドを置くといった回避策しかありません。(後述の場合、オーディオ装置にナノ秒単位で正確に命令できます。この方法はバグのためにLinux上では現状、正確ではありません。たとえFLVであっても、音声と映像は同期できないからです。(怒))
今後はどうなっていくでしょうか?以前投稿したように、我々開発陣は同期させるためのSMILEという仕組みをplayerに組み込むつもりでいます。But there is also a good chance we'll limit what users can actually do when it comes to frame rates and overall CPU usage.
CPU稼働率を下げるためにいくつかの方法があります。(Flashバナー広告のような)異なるドメインから呼び出されるswfのpriorityを下げたり、ユーザーが選べるようなフレームレート制限をかけたりできます。
第二に、with the advent of GPU support in the OS there will be a time when we finally add VBL wait, meaning tearing free drawing. ほとんどのケースで、この場合のフレームレートの最大値は60 frames/sec になるでしょう。CPU負荷のことも考慮すると実際は半分の30 frames/secでしょうか。 OS X ではある状況下では既にこれを実現しています。
(翻訳ここまで)
記事中のコメント欄で、みんなが参考になったと感謝しまっくているのですが、どの辺りがありがたいのかがよく分からないのは、僕の翻訳力のなさのせいです。
この記事のどの辺りがありがたいのか、結局Flashコンテンツのフレームレートはいくつにするのがベストなのか、上記文章の翻訳ミス等、お気づきの点がありましたら、コメントしてやってください。
- Newer: Actionscript 2.0 Cheatsheet
- Older: Flash 8 Essentials
Comment:1
- bioplay 2006-05-09 (火) 21:06
-
フレームレートはFlash videoを扱う時にシビアに響いてきました。ActionScriptでミリ秒単位で設定してもビデオの方のフレームレート(というよりかは圧縮のレートですかね)が異なるとScriptが働きませんでした。
確かこのページを参考にしました。
http://flashmx2004.com/forums/index.php?showtopic=4208&hl=Cuepoint
Trackback:0
- TrackBack URL for this entry
- http://www.trick7.com/blog/mt-tb.cgi/81
- Listed below are links to weblogs that reference
- Flash Playerのフレームレート from trick7.com blog




