読者です 読者をやめる 読者になる 読者になる

daisuke_nomura の日記

Android プログラマーな鉄道ファンのブログ

Windows Phone 7でニコニコ動画を閲覧するアプリがSWF形式に対応しました

はじめに

@daisuke_nomuraです。
Flash(SWF形式)の再生に対応したニコアプリ(仮)のバージョン0.2を開発し、7月20日にWindows Phone Marketplaceで公開しました。バージョン0.1は以前の記事を参照のこと。
参考:Windows Phone 7でニコニコ動画を閲覧するアプリを公開しました


ニコニコ動画のファイル形式

ニコニコ動画の動画には、3種類の形式があります。

  1. MP4形式(H.264 + AAC)
  2. FLV形式(VP6 + MP3)
  3. SWF形式(Flash)

3種類の形式がありますが、このままではニコニコ動画iPhone公式アプリであっても、H.264しか再生できず、FLVとSWFが再生できません
FLVとSWFの再生の場合には、iPhone公式アプリではニコニコ動画モバイルに接続しているようです。
ニコニコ動画モバイルの形式は一種類(ただし、音声は端末に合わせる)です。

  1. ファイル形式不明(JPEG + ADPCM)

ニコニコ動画モバイルでは、動画が150KBのデータに2秒間ごとにJPEGとADPCMで収められています。
参考:http://info.dwango.co.jp/rd/files/mobile_study_20070917/nicomoba.swf
2秒ごとに収まっているので、60秒の動画だと30回ほどHTTPリクエストで取得しています。


SWF形式にどう対応すべきか
SWF形式を再生する場合、以下の2つの対応方法が考えられます。

  1. iPhone公式アプリと同じくニコニコ動画モバイルに接続する
  2. Flashプレイヤーを自作する

1つ目のニコニコ動画モバイルに接続する方法は、iPhone公式アプリと同じ方法です。
しかしながら、ニコニコ動画モバイルは画質・音質ともによくありません
そこで、Flashプレイヤーを自作することにしました。
Flashプレイヤーと言ってもかなり限定的な対応です。



Silverlight ≒ Flash - プロトコル - コーデック?
SilverlightとFlashは同じ目的のために使われます。
Windows Phone 7のアプリはSilverlightXNAです。
そのため、「Flashのプロトコルとかコーデックを考えなければ、Windows Phone 7で再生できるんじゃ?」と考え、仕様を勉強することにしました。
この辺りの参考になった記事やソフトは後々ブログで紹介していこうと思います。


このアプリについて

Marketplaceにおける名称:Nico Application
名称:ニコアプリ(仮)
価格:無料
URL:http://social.zune.net/redirect?type=phoneApp&id=bc644756-ea7f-e011-986b-78e7d1fa76f8


ニコニコ動画をWindows Phone 7で閲覧するためのアプリです。
再生できる動画形式はH.264とSWFです。FLVは再生できません。しかも、動画のダウンロードが完了するまで再生できません。
H.264の場合は、

  1. ニコニコ動画のサーバーへのHTTPリクエストにCookieが必須
  2. MediaElementのHTTPリクエストにCookieを載せられない(載せる方法は後で分かったけど、WP7単体じゃ無理)
  3. WP7はURLに.mp4が入ってないと、H.264動画をダウンロードしても開いてくれない

以上の理由から、HttpWebRequestに動画をダウンロードさせ、分離ストレージに保存した上で再生させています。
プレミアム会員で高速な回線を使ってる場合だと比較的早く再生可能になりますが、一般会員の方は3分間の動画を見るためにダウンロード完了を3分待つことがあります。


SWFの場合は、動画再生の前にzlib解凍とSWFの解析を行っているので、時間がかかります。
しかしながら、SWFは10MB以下らしいので、ダウンロード自体はH.264より早く終わります。
また、SWFは10MBに近い場合は再生できません
これは、10MBに近いとzlib解凍時にOutOfMemoryExceptionが出るためです。
zlib解凍とSWF解析を同時に行えばなんとかなるはずですが、同時行うことを考えていない作りなので、後々対応したいと思います。


あとがき
Windows Phone 7でもニコニコできるといいね。


さらにあとがき
バージョン0.2を実機を借りて試したらとても重かったです。
将来のバージョンで何とかします。。。