daisuke_nomura の日記

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

Windows Phone 7でニコニコ動画を閲覧するアプリを公開しました

はじめに

@daisuke_nomuraです。
Windows Phone 7(以下、WP7)でニコニコ動画を閲覧するためのアプリを開発し、6月14日にWindows Phone Marketplaceで公開しました。
開発は1月から3月にかけて10日程で基本的な部分を作り、ニコニコ動画にてエミュレータでの動作の様子を公開していました。
【ニコニコ動画】ニコ動のWP7アプリ作ってみる

【ニコニコ動画】ニコ動のWP7アプリ作ってみる その2

さて、WP7に詳しい方ならご存知ですが、エミュレータではH.264が再生できません。
上の動画で再生してるのはWMV形式であり、アプリが実機で正しくH.264を再生できるのか分かりません。
しかも私は、WP7の実機を持っていません。
ソースコードを数人に渡しましたが「理由は分からないけど全然H.264再生できない、そもそもH.264をアプリで再生できない・・・?」との回答で、何故H.264が再生できないのか検討がつきませんでした。


実機デバッグの機会がきた
実機でデバッグする機会がきたのが5月3日に開催された「プロ生勉強会 ぷちハッカソン」でした。
【ニコニコ動画】ニコ動のWP7アプリ作ってみる その3【実機で動作】

H.264が再生できない理由をSynchronizationContext辺りに絞ってアプリを直しましたが、それでも再生できない。
この集まりの最後の最後でやっと再生ができました。
H.264が再生できなかった理由は、@ch3coohさん曰く「メディア関連のデバッグだとZuneじゃなくてWPConnectを使う」らしいです。
一緒に参加されてた@mimura1133さんがブログに書かれています。
http://mimumimu.net/blog/2011/05/15/windows-phone-7-%E5%AE%9F%E6%A9%9F%E3%81%A7-mp4-%E5%86%8D%E7%94%9F%E3%82%92%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%8A%B6%E6%85%8B%E3%81%A7%E8%A1%8C%E3%81%86%E3%80%82/


Geo Trustで3週間待った上でリジェクト

とりあえず動くのは(最低限)確認したので、早速Marketplaceで公開しようとDreamSpark登録したり住基カード申し込んだりしました。
App Hubに登録してアプリを申請し、(学生アカウントだとここにある)Geo Trustからの所在確認のメールを一週間待ちましたが、全く来ません。
Windows Phone 開発者事務局にメールし、Geo Trustに再送リクエストをしてもらいましたが、それでも届きません。。。
GmailをLive IDにしたのが悪かったのでしょうか、結局所在確認が終わったのは、アプリ申請後3週間経ってからでした。
Windows Phone 開発者事務局さま、長きに渡ってご対応下さり、誠にありがとうございました。


そして、審査で一度リジェクトを食らいました。
リジェクトの理由は、「アプリ動かしてる時にホームボタンを押してホームへ移動。直ちに(又は10秒くらい経って)戻るボタンで戻ると落ちる」だそうです。
納得のリジェクトでした。
それは、アプリがレジュームされる際の動作を全く考えてなかったためです。
public staticでCookie ContainerだけでなくSession ID、動画のIDまで共有してました。
画面遷移して操作すると、破壊されちゃうんですね。。。
その後、再度申請して審査通過となりました。審査通過のために機能を削ったのは秘密です。


このアプリについて

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


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

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

以上の理由から、HttpWebRequestに動画をダウンロードさせ、分離ストレージに保存した上で再生させています。
プレミアム会員で高速な回線を使ってる場合だと比較的早く再生可能になりますが、一般会員の方は3分間の動画を見るためにダウンロード完了を3分待つことがあります。
twitterで、使用した回線(固定・モバイル)、プレミアムかどうか、再生開始までどれくらいの時間が掛かったかを是非お教えください。
加えて、次のバージョンで高速化させるので、ご期待下さい。


また、このアプリは動画プレイヤーを2つ持っていますが、片方(H.264)しか使っていません。
もう一方のプレイヤー開放は機能追加を意味しますが、前述のとおり私は実機を持っておらず実機デバッグの機会が少ないので、開発速度は遅めです。
さらにもう一つプレイヤーを持たせ、3つのプレイヤーを持つ予定です。


最後に
他人に自分の作ったプログラムを公開するという経験が人生の中でなかったので、この度のアプリ公開は非常に刺激的でした。
ソースコードを他人に見せたのも初めてでした。
言葉が思いつきませんが、忘れられない思い出となるでしょう。たぶん。


Windows Phone 7はMangoアップデートでさらに進化します。
まだまだiOS、Androidと比べると足りない点や欠けてる機能が数多く見受けられますが、Windows Phone 7に触れたときの体験は忘れられません。
非常にストレス無くスムーズであり、しかもシンプルです。
Windows Phone 7に触れる機会があったら、その素晴らしさを是非体験してください。
そして、一緒にWindows Phone 7のアプリを開発しましょう!あと、実機ください!


謝辞
実機デバッグの機会を作ってくださったのが@jz5さんでした。@jz5さんは私からソースコードをお渡しして実機でのチェックもしてくれました。次のプロ生勉強会でセッションやってくれってことですね。
@ch3coohさんのWPConnectのアドバイスは本当に役に立ちました。あのアドバイスがなければ、5月3日に私は絶望していたことでしょう。
@sinpenさんが、私が人生で初めて会った「代表取締役」という肩書きを持つプログラマでした。MotionJPEGとかADPCMなどに詳しそうなので、是非教えてください。
年上の方と話す機会は恵まれていますが、若い方と話す機会はそう多くありません。@mimura1133さんの若さと優秀さを前に私は完全に敗北してます。@mimura1133さんは色々な意味で目標となりました。
私のわがままにも答えてくださったのは@icchuさんでした。@icchuさんの実機を占有してしまったことがありました。誠に申し訳ありません。また、ありがとうございました。


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