ニコニコ動画をソフトバンク携帯で見られるようにしてみた

2008/10/21
サービスとして公開しました。→[id:saiten:20081020:1224522031]

ニコニコ動画モバイルという携帯からニコニコ動画を閲覧できるサービスがあるんですが、携帯3キャリアのうち、なぜかソフトバンクだけは今年の4月開始時から未だに対応していません。

私的には1日1回ランキングを一通りチェックする程度には利用しているので、これを通学の時間帯に行えたらなぁ、と思ってたんですが、なかなかそんな話が出てこない。RC2開始時には対応するだろうと思ってたんですがモバイル関連の発表すらなかったですし。

そういうわけで学園祭が終わってひと段落が着いていたのと、バイト先のネタ作りも兼ねて自分でニコニコ動画モバイルのソフトバンク版を作ってみることにしました。百聞は一見にしかず。とりあえず動画を作ってみたので見てみてください。

参考までに一応他のキャリアで見た場合の動画もいくつか挙げておきます。

Docomoのハイスピード対応端末には敵わないまでも、他と比較してもそこそこ動いているんじゃないかなぁと思います。音切れはすんげぇですが(・∀・;)ただまぁ、ランキングをさっとチェックして、気になったのを改めて後で家で見るという位の使い方はできそうです。

仕組み

開発するに際して、大いに役立ったのがこのニコニコ動画モバイルのプレゼン資料です。というかこの資料見るまでは、どうやって作るか全く検討も付いてませんでした。

本家ニコニコ動画モバイルは、対象の動画を予めjpegと着うた形式のADPCMに細かく分割しておいています。クライアントからリクエストがあったときに、そのjpegADPCM、そしてコメントをサーバ側で全てDocomoが1度に送受信できる150KBのパケットに詰め込んで、クライアントに送信しています。パケット内にはほかに、このタイミングで画像を更新しろとか音声を流せとかのシーケンスデータも入っていて(これをサーバ側で微調整することで機種ごとの差異を吸収している)、端末側はそれを再生するだけの仕様になっています。この仕様のおかげで通信速度が遅い機種では画像の枚数を調整したり、音声の出力タイミングが遅い機種では音を鳴らせるタイミングを調整したりといったことが、サーバ側でパケットを調整するだけで済み、新しい機種などにも早く対応できると言うわけです。

今回私が作ったモノ(とりあえずニコニコバンクとしておきます)も基本的な構成は同じで、まずニコニコバンク側で設置してあるサーバがクライアントからの要求を受け、その動画を所持していない場合、ニコニコ動画にログインして対象の動画のflvを取得します。取得したflvはffmpegを利用してjpegと普通のpcmファイルに変換します。

本来であれば、ここで音声はYAMAHA ADPCMにすべきなんですが、ffmpegの作成するYAMAHA ADPCMはwavだとヘッダがおかしくて再生できないので、現在はノーマルのpcmになっています。(mmfに変換したりとかもしたけどmmfだと同時に1ファイルしかオープンできない)

そして、この分割したファイルを本家同様、1度に送受信できるギリギリのサイズのパケットに詰め込みます。ただ実はSoftbankの場合、application/javaというMIMEにすると1MBまで送受信できるようで、さすがに1MBだとバッファの問題などもあるので現在は200KBのパケットを生成して送信する様にしています。

ニコニコバンクでは本家より少し単純なパケット構成になっており、シーケンスデータを入れずに、1秒間区切りで画像と音声、コメントが入っているだけです。端末間での差異の調整等が面倒になりますが、まぁ今のところは私しか使ってないので良しとします。

クライアント側では受け取ったパケットを解析して、タイミングよく表示しているだけです。コメントの表示はかなり四苦八苦しましたが、たまーに職人の技がちゃんと表示されたりするので(大方画面サイズの都合でずれるんですが)、そこそこ良い出来になっているんじゃないかなと思います。

構成

以下のような感じ。

  • 変換サーバ兼再生サーバ
    • SC440+xen+centos5
    • 動画変換&再生&ランキング&その他動画情報取得プログラム
  • 再生クライアント
    • ブラウザから起動する部分以外はMIDP2 + MMAPI
    • そいうわけでwillcomも使えるかも。(速度が厳しいが)


そのうち公開したいところですが、サーバ側で利用するアカウントが私のものなので、利用規約に反する場合、難しいかも。