YouTubeでは、URLにfmt=18やfmt=22を追加すると、mp4フォーマットでH.264+AAC形式の動画を取得することができます。fmt=18はiPod用、fmt=22はHD画質となっています。
Silverlight3はこの形式に対応しているので、実はYouTubeの動画をSilverlightで再生することも可能です。
ただし、現在YouTubeはcrossdomain.xmlによって、外部サイトからのFlash/Silverlightのアクセスを拒否しているので、Silverlightから直接YouTubeのファイルは再生できません。いったん動画ファイルをダウンロードするか、crossdomain.xmlを無視してファイルを取ってくるプロキシ的な物を用意する必要があります。
そこで今回は、同じ動画をSilverlightとFlashで再生して、CPU負荷を比較してみました。
Silverlightでの再生にはExpression EncoderについてきたMediaPlayer.dllを、Flashでの再生にはYouTubeをそのまま使っています。動画の表示されるサイズが全く同じになるように調整し、再生中のCPU使用率を調べます。
今回テストに使用した動画は「Where the Hell is Matt? (2008)」です。Matt Hardingさんが世界中で様々な人種の人達と楽しそうにヘンテコなダンスをする動画です。
http://www.youtube.com/watch?v=zlfKdbWwruY&fmt=22 (HD画質)
http://www.youtube.com/watch?v=zlfKdbWwruY&fmt=18 (iPod用)
テスト環境はCPUがCore2Duo E8400、OSがVista SP2、ブラウザがIE8です。CPUのクロックは最高値で固定になるように設定してあります。
Silverlightで再生
Flashで再生
正確に集計をしたわけではなく、値の変動を見ながら私の感覚で平均を取った感じだと、Silverlightでは28%程度、Flashでは26%程度といったところでした。
僅かですがSilverlightの方がCPU負荷が高い印象でしたが、タスクマネージャのグラフからも分かるように、Flashでは1つのコアしか使われていないのに対して、Silverlightでは2つのコアが平均的に使われています。
実は最初に実験したときはCPUのクロックを可変にしたままやってしまい、SilverlightでのテストではCPUのクロックが低い状態で見かけ上の負荷がもう少し高くなってしまいました。
現時点ではSilverlightの方がマルチコアを上手く使っている感じです。
ただし、同じテストをAtom N270のネットブックでiPod用動画を使用して行ったところ、Flashでも2つのコア(HTですが)を使っていました。CPUによってコードを変えているのかもしれませんね。
ちなみにネットブックでのCPU使用率は、HD動画とは逆にSilverlightの方が少し低かったです。
もう少し有意な差があれば「動画共有サイトはSilverlight(またはFlash)で作るべき」みたいな結論も出たのですが、今回は微妙な結果となりました。
ところで先日、Flash Player 10.1でGPUを使用した動画再生支援にも対応することが発表されました。現在はAtomでYouTubeのHD動画を見ると紙芝居になってしまいますが、今後は改善されそうです。今までは嫌われていたUS15Wチップセットを搭載したネットブックが、強力な動画再生支援機能のおかげで945GSE搭載機よりも優位になるかもしれませんね。私のネットブックは945GSEなので、そうなったら悲しいですがw