JavaScriptで実装されたMPEG1デコーダー「jsmpeg」 33
ストーリー by hylom
そろそろ何がjsで実装されても驚かなくなってきた 部門より
そろそろ何がjsで実装されても驚かなくなってきた 部門より
あるAnonymous Coward 曰く、
JavaScriptで実装されたMPEG1デコーダー「jsmpeg」が公開された(開発元のPhobosLabのブログ、ソースコード)。
ソースはgzipで圧縮後で15kbというサイズで、iPhone 5上で320×240サイズの動画を30fpsで簡単に再生できるという。 余談だがH.264のJavaScriptデコーダもある模様。
ただし、ストリーミング再生はできず、データは再生前にあらかじめ読み込まれていなければならないという。
タレコミ補足 (スコア:2, 参考になる)
デモ [phoboslab.org]は、1.8MBのMPEG1(18秒、570フレーム)
iPhone5で、320x240のMPEG1が30fpsで再生できる軽さ
Re:タレコミ補足 (スコア:4, 参考になる)
ソースコード [phoboslab.org]をざっと見たところ、特に高速化をがんばっているわけでもなく非常に素直に実装されてるように見えます。MPEGの教科書本でも片手に読めばアルゴリズムの勉強になりそうなくらい。
それでも普通に動画として見られるくらい、JavaScriptエンジンの性能が上がってるってことなんですね。
Re: (スコア:0)
JSエンジンの最適化を熟知している人のコードですね
JavaでもJVMの実装に詳しく、見かけはごく素直でシンプルなのに滅法速いJavaコードを書く人がいました
なぜか他人にはなかなか真似できないんですよね
Re: (スコア:0)
俺もこれはわりと素直なコードに見えるんだけど、『JSエンジンの最適化を熟知している』ってのはどこでわかるものなの?
『JSエンジンの最適化を熟知している』って言われるようなコードを俺も書きたいんだけどな
Re:タレコミ補足 (スコア:4, 興味深い)
例えば、jsmpeg.prototype.copyMacroblock関数ではoddHとoddVの組み合わせで4通りそれぞれにループがありますが、
gccなどではマスク演算などを使いベクトル化したほうが速くなると思います
JSでは
for( var x = 0; x < 16; x++ ) {
this.currentY[dest] = (Y[src] + Y[src+1] + 1) >> 1;
dest++; src++;
}
Y[src+1]は次の繰り返しでY[src]としてまた読み出されますが、実行パスに沿った最適化を行うコンパイラでは、ループが自動的にアンロールされ、
二回のメモリ読み出しは共通部分式として一回にまとめられるんじゃないかと思います
Re: (スコア:0)
訂正
> 実行パスに沿った
実行トレースに沿った、です
静的なパスに実行頻度で重みづけして最適化するのがHotSpot VMタイプで、
実行した命令トレースに基づいて最適化するのがTamarinなどのTracing JITタイプです
CPU負荷は (スコア:0)
どのくらいの負荷なんでしょ。
JITキャッシュがクリアされると最初必ずつっかかるとかないのかな。
Re:CPU負荷は (スコア:1)
試してみたら? [phoboslab.org]
かなり軽い
Re:CPU負荷は (スコア:1)
ブラウザはSeaMonkey2.20(Firefox23相当)で,
ニコニコの512x384 60fps の動画でCPU使用率50%でファンがゴキゲンな唸りを上げるノートPCでも
このmpeg1 320x240 30fps(?) だとCPU使用率2%未満.
ずっとスムーズに再生できてる.
Re: (スコア:0)
環境によるのかな。
Core2 Duo(E7500) @ 2.93GHz、G31 Express (GMA 3100, ICH7)、Xp、Google Chrome
Youtube Flashで 360p だと20~30%くらい。240p だと15~20%くらい。
HTML5なら360pで15~25%くらい。
これがこのデモだと50%前後。Youtubeのfps分からないけど、こっちが重い。
JSJCJK (スコア:0)
JavaScriptで実装されたUE3とこれのどっちが凄いの?
Re: (スコア:0)
使う人によって評価は分かれるけど、物を作っている人間からすれば
「どっちもスゲェ」
言い変えると
「なんでそんなことしようと思ったのかわけが分からないよ/人◕ ‿‿ ◕人\」
契約はしないよ!
Re: (スコア:0)
まったく回答になってないかと
Re: (スコア:0)
こんな「醤油と味噌どっちが美味いの ?」みたいな問いにまともに回答できるわけないだろう。評価軸は何よ
Re: (スコア:0)
「なんでそんなことしようと思ったのかわけが分からないよ/人◕ ‿‿ ◕人\」
逸般人なら兎も角一般人にはとてもとても理解し難いわけがわからない凄いSUGEEE才能を買われてある日、とある会社の社員の胡散臭いオッサンが
「弊社と契約を結ぶ事に拠って新魔法programmerの王に成って頂きたくお迎えに参りました。」
と日本の至る所から集めた社畜達を従えてお花見中の一般人にはとても理解し難いわけがわからない凄いSUGEEE才能を持った奴の所に来るんですねw
Re: (スコア:0)
UE3は、バイトコードからの変換。こっちは手書き。こっちの方がサイズ的な複雑さは下廻っているかもしれないけど、手間はかかってるんじゃないの?
audio (スコア:0)
audioは無理なんだなと。audio要素に生データを流し込める環境ができれば
audioの自由な操作も可能になるのだろうか。それにしても最近のキレキレの
JavaScriptの構文界隈は学生がC言語よりJavaScript等のスクリプトに流れたからだろうか。
Re:audio (スコア:1)
普通にできるよ。
audio 要素に data URI scheme で動的なデータを流し込む→ http://sothis.blog.so-net.ne.jp/2008-11-28-1 [so-net.ne.jp]
もっとまともな API → http://www.w3.org/TR/webaudio/ [w3.org]
Re: (スコア:0)
audioはまだFlashに分がありますね
JavaScriptがキレキレなのはLLVM (Emscripten)の影響
これからC言語構文の内蔵スクリプトとか、VC/XCode並の予測機能の付いた総合開発環境とかも出てくるのではないでしょうか?
Re: (スコア:0)
どっちも間違ってますよ。
Re: (スコア:0)
どこが? #html5のaudioはあんまり詳しくないから自信ないけど
Re: (スコア:0)
このストーリーに関していえば、emscriptenは全く使われていないのでお門違い。ブログの初っ端に書いてある。
一般的な話題としても、emscriptenはマシン語をJavaScriptに翻訳するわけだから、元のプログラミングはアセンブリやC/C++で行う必要がある。JavaScriptに流れる理由にはならないだろう。
videoタグの代わり (スコア:0)
videoタグでは共通のフォーマットが無いので、ゲームとか短い動画ならこれ使えばいいのじゃないだろうか?
MPEG1の使用料やjsmpeg.jsの序文がどうなってるのか気になるけど
Re: (スコア:0)
>videoタグでは共通のフォーマットが無いので、ゲームとか短い動画ならこれ使えばいいのじゃないだろうか?
いまさらmpeg1で?
#本プロジェクトそのものはすごいと思います。
Re: (スコア:0)
MPEG1の特許はもう期限切れだから独自に書き起こした実装ならライセンス料はかからないでしょ。
ajacs (スコア:0)
ただし、ストリーミング再生はできず
チャンクに分割してajaxよろしく非同期でやり取りするようにすれば。
でも、そのためには入力を非同期にしてもらう必要ありますね。
BitReaderいじれば行けそうな気も。イベント使えば扱いやすくなるかな?
バッファサイズの調整とか知らんけどね。
WebCL (スコア:0)
JavascriptならWebCLでさらに軽くなりそう
HDストリーミングにも耐えられるんじゃないかな
# GPUに頼りすぎて持てないくらいアッチッチな端末にならない範囲で期待
Re:WebCL (スコア:1)
WebCLとか冗談
それならハードウェアアクセラレーションが効くVIDEOタグで再生した方が賢い
asm.jsならまだわかる
Re: (スコア:0)
VIDEOタグとか冗談
JavaScriptでのビデオデコーダーですらないですよ
asm.jsとか冗談
JavaScriptの並列処理になってないですよ
# まぁJavaScriptで実装してること自体がネタだし冗談ばかりでもいいとは思いまふ
Re: (スコア:0)
> JavaScriptでのビデオデコーダーですらないですよ
JavaScriptなんか使うなって言ってるんだろ。
Re: (スコア:0)
JavaScriptでのビデオデコーダーに期待するのなら
まずasm.jsとかParallels.jsに注目するのが普通です
WebCLに期待するのはハッキリ言ってテーマからズレてます
Re: (スコア:0)
ビデオデコーダーならORBX.jsがあるよ。
HTML5対応の全ブラウザに対応:OTOYとMozilla、プラグイン不要のJavaScriptライブラリ「ORBX.js」発表
http://www.atmarkit.co.jp/ait/articles/1305/07/news096.html [atmarkit.co.jp]
Re: (スコア:0)
もしかしてasm.js,parallels.jsをプラグインだと勘違いしてる??