パスワードを忘れた? アカウント作成
8801352 story
プログラミング

JavaScriptで実装されたMPEG1デコーダー「jsmpeg」 33

ストーリー by hylom
そろそろ何がjsで実装されても驚かなくなってきた 部門より
あるAnonymous Coward 曰く、

JavaScriptで実装されたMPEG1デコーダー「jsmpeg」が公開された(開発元のPhobosLabのブログソースコード)。

ソースはgzipで圧縮後で15kbというサイズで、iPhone 5上で320×240サイズの動画を30fpsで簡単に再生できるという。 余談だがH.264のJavaScriptデコーダもある模様

ただし、ストリーミング再生はできず、データは再生前にあらかじめ読み込まれていなければならないという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • タレコミ補足 (スコア:2, 参考になる)

    by Anonymous Coward on 2013年05月10日 9時42分 (#2377921)

    デモ [phoboslab.org]は、1.8MBのMPEG1(18秒、570フレーム)
    iPhone5で、320x240のMPEG1が30fpsで再生できる軽さ

    • Re:タレコミ補足 (スコア:4, 参考になる)

      by Anonymous Coward on 2013年05月10日 10時00分 (#2377933)

      ソースコード [phoboslab.org]をざっと見たところ、特に高速化をがんばっているわけでもなく非常に素直に実装されてるように見えます。MPEGの教科書本でも片手に読めばアルゴリズムの勉強になりそうなくらい。
      それでも普通に動画として見られるくらい、JavaScriptエンジンの性能が上がってるってことなんですね。

      親コメント
      • by Anonymous Coward

        JSエンジンの最適化を熟知している人のコードですね

        JavaでもJVMの実装に詳しく、見かけはごく素直でシンプルなのに滅法速いJavaコードを書く人がいました
        なぜか他人にはなかなか真似できないんですよね

        • by Anonymous Coward

          俺もこれはわりと素直なコードに見えるんだけど、『JSエンジンの最適化を熟知している』ってのはどこでわかるものなの?
          『JSエンジンの最適化を熟知している』って言われるようなコードを俺も書きたいんだけどな

          • by Anonymous Coward on 2013年05月10日 12時13分 (#2378021)

            例えば、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]としてまた読み出されますが、実行パスに沿った最適化を行うコンパイラでは、ループが自動的にアンロールされ、
            二回のメモリ読み出しは共通部分式として一回にまとめられるんじゃないかと思います

            親コメント
            • by Anonymous Coward

              訂正

              > 実行パスに沿った

              実行トレースに沿った、です

              静的なパスに実行頻度で重みづけして最適化するのがHotSpot VMタイプで、
              実行した命令トレースに基づいて最適化するのがTamarinなどのTracing JITタイプです

  • by Anonymous Coward on 2013年05月10日 9時03分 (#2377896)

    どのくらいの負荷なんでしょ。
    JITキャッシュがクリアされると最初必ずつっかかるとかないのかな。

    • by Anonymous Coward on 2013年05月10日 9時38分 (#2377914)

      試してみたら? [phoboslab.org]
      かなり軽い

      親コメント
    • by Anonymous Coward on 2013年05月10日 12時28分 (#2378030)

      ブラウザはSeaMonkey2.20(Firefox23相当)で,
      ニコニコの512x384 60fps の動画でCPU使用率50%でファンがゴキゲンな唸りを上げるノートPCでも
      このmpeg1 320x240 30fps(?) だとCPU使用率2%未満.
      ずっとスムーズに再生できてる.

      親コメント
      • by Anonymous Coward

        環境によるのかな。
          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分からないけど、こっちが重い。

  • by Anonymous Coward on 2013年05月10日 10時08分 (#2377936)

    JavaScriptで実装されたUE3とこれのどっちが凄いの?

    • by Anonymous Coward

      使う人によって評価は分かれるけど、物を作っている人間からすれば
      「どっちもスゲェ」

      言い変えると
      「なんでそんなことしようと思ったのかわけが分からないよ/人◕ ‿‿ ◕人\」

      契約はしないよ!

      • by Anonymous Coward

        まったく回答になってないかと

        • by Anonymous Coward

          こんな「醤油と味噌どっちが美味いの ?」みたいな問いにまともに回答できるわけないだろう。評価軸は何よ

      • by Anonymous Coward

        「なんでそんなことしようと思ったのかわけが分からないよ/人◕ ‿‿ ◕人\」

        逸般人なら兎も角一般人にはとてもとても理解し難いわけがわからない凄いSUGEEE才能を買われてある日、とある会社の社員の胡散臭いオッサンが
        「弊社と契約を結ぶ事に拠って新魔法programmerの王に成って頂きたくお迎えに参りました。」
        と日本の至る所から集めた社畜達を従えてお花見中の一般人にはとても理解し難いわけがわからない凄いSUGEEE才能を持った奴の所に来るんですねw

    • by Anonymous Coward

      UE3は、バイトコードからの変換。こっちは手書き。こっちの方がサイズ的な複雑さは下廻っているかもしれないけど、手間はかかってるんじゃないの?

  • by Anonymous Coward on 2013年05月10日 11時06分 (#2377973)

    audioは無理なんだなと。audio要素に生データを流し込める環境ができれば
    audioの自由な操作も可能になるのだろうか。それにしても最近のキレキレの
    JavaScriptの構文界隈は学生がC言語よりJavaScript等のスクリプトに流れたからだろうか。

    • by Anonymous Coward on 2013年05月10日 11時29分 (#2377982)

      普通にできるよ。

      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]

      親コメント
    • by Anonymous Coward

      audioはまだFlashに分がありますね

      JavaScriptがキレキレなのはLLVM (Emscripten)の影響
      これからC言語構文の内蔵スクリプトとか、VC/XCode並の予測機能の付いた総合開発環境とかも出てくるのではないでしょうか?

      • by Anonymous Coward

        どっちも間違ってますよ。

        • by Anonymous Coward

          どこが? #html5のaudioはあんまり詳しくないから自信ないけど

          • by Anonymous Coward

            このストーリーに関していえば、emscriptenは全く使われていないのでお門違い。ブログの初っ端に書いてある。

            一般的な話題としても、emscriptenはマシン語をJavaScriptに翻訳するわけだから、元のプログラミングはアセンブリやC/C++で行う必要がある。JavaScriptに流れる理由にはならないだろう。

  • by Anonymous Coward on 2013年05月10日 11時43分 (#2377994)

    videoタグでは共通のフォーマットが無いので、ゲームとか短い動画ならこれ使えばいいのじゃないだろうか?
    MPEG1の使用料やjsmpeg.jsの序文がどうなってるのか気になるけど

    • by Anonymous Coward

      >videoタグでは共通のフォーマットが無いので、ゲームとか短い動画ならこれ使えばいいのじゃないだろうか?
      いまさらmpeg1で?

      #本プロジェクトそのものはすごいと思います。

    • by Anonymous Coward

      MPEG1の特許はもう期限切れだから独自に書き起こした実装ならライセンス料はかからないでしょ。

  • by Anonymous Coward on 2013年05月10日 14時55分 (#2378119)

    ただし、ストリーミング再生はできず

    チャンクに分割してajaxよろしく非同期でやり取りするようにすれば。
    でも、そのためには入力を非同期にしてもらう必要ありますね。
    BitReaderいじれば行けそうな気も。イベント使えば扱いやすくなるかな?
    バッファサイズの調整とか知らんけどね。

  • by Anonymous Coward on 2013年05月11日 1時45分 (#2378392)

    JavascriptならWebCLでさらに軽くなりそう
    HDストリーミングにも耐えられるんじゃないかな

    # GPUに頼りすぎて持てないくらいアッチッチな端末にならない範囲で期待

    • by JavaScript (46099) on 2013年05月11日 5時57分 (#2378410)

      WebCLとか冗談
      それならハードウェアアクセラレーションが効くVIDEOタグで再生した方が賢い
      asm.jsならまだわかる

      親コメント
      • by Anonymous Coward

        VIDEOタグとか冗談
        JavaScriptでのビデオデコーダーですらないですよ

        asm.jsとか冗談
        JavaScriptの並列処理になってないですよ

        # まぁJavaScriptで実装してること自体がネタだし冗談ばかりでもいいとは思いまふ

        • by Anonymous Coward

          > JavaScriptでのビデオデコーダーですらないですよ
          JavaScriptなんか使うなって言ってるんだろ。

        • by Anonymous Coward

          JavaScriptでのビデオデコーダーに期待するのなら
          まずasm.jsとかParallels.jsに注目するのが普通です
          WebCLに期待するのはハッキリ言ってテーマからズレてます

        • by Anonymous Coward

          ビデオデコーダーならORBX.jsがあるよ。

          HTML5対応の全ブラウザに対応:OTOYとMozilla、プラグイン不要のJavaScriptライブラリ「ORBX.js」発表
          http://www.atmarkit.co.jp/ait/articles/1305/07/news096.html [atmarkit.co.jp]

          • by Anonymous Coward

            もしかしてasm.js,parallels.jsをプラグインだと勘違いしてる??

typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...