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

まめ畑

ゆるゆると書いていきます

ドワンゴインターン2008を1年たった今少し公開してみる

インターン dwango

ドワンゴインターン2008。もうあれから1年。ドワンゴのインターン終わったよ! - まめ畑で雰囲気は書いたのですが、内容を書いていいという話をキャッチしたので今回は何をやったかを書きます。(書ける範囲で)
その前に今年もインターンがあったわけですが、その成果発表の模様はドワンゴインターンシップ2009レポート@9月11日 - まりもころがしを参照して下さい。
中々精鋭ぞろいだったようです。

また、2008インターンでもう1つやってた事があるのですが、それはこちらをご覧下さいドワンゴインターン2008/2009 - Limitの日記

何をやったか

Chumbyでニコニコしたいよね!
ということで、Chumbyで動作するニコニコPlayerを作りました。
2人1組で行ったので、自分はサーバサイドを、相方の、うきょう、はPlayerを作成しました。
Chumbyってなんぞ?という方は以下のリンクが公式サイトです。
話題の情報端末 『chumby(チャンビー)』の世界へようこそ
chumby


Chumby上での制約は諸々あるのですが、当時最大の問題は日本語フォントが入っておらず、フォントを埋め込むとChumby.comで公開できるサイズを超過し、USBから起動しないといけない状態でした。結果として、USB起動を行ったのですが現在のChumbyではこの部分は解決されていますね。
その他、ハードウェアの制限としてFLVのビットレートやフレームレートをかなり下げてやらないといけないのでエンコードが必要になります。
その他にも、メッセージサーバからコメントXMLを取得してもChumby上で色や時間・コマンドのパースを行うと負荷が高まるためサーバサイドで不要部分の削除とパースを行う必要がありました。(サイズの大きいXMLを受信するとChumbyフリーズしたり再起動したりします・・・)


実装した機能ですが、Chumbyが置物としての側面があるというところを考慮して、ランキングからの動画再生・PC上のサイトで登録したキーワードやタグを持つ動画のランダム垂れ流し再生を実装しました。
一番苦労したのは、動画の再エンコード周りとChumbyからの処理を処理する箇所です。
他は細かいところで色々とスペックとにらめっこで細かい調整です。


サーバサイドでどんな処理を行っているかですがランキングからの再生は

  1. Chumbyからのランキングの取得要求に対して某APIからランキングを取得・整形し返却
  2. Chumbyはその情報でPlayerのランキングをセットアップ
  3. 見たい動画をタッチすると動画の要求をサーバへ送る
  4. キャッシュに変換済み動画があればそれを変換・なければ動画サーバから動画を取得しエンコードしキャッシュへ
  5. コメントサーバからコメントを取得し整形
  6. 動画とコメントの準備が完了したら、動画キャッシュのアドレスとコメントXMLを返す
  7. Playerが再生する

といった流れです。
アクセスごとに動画の削除を確認しており、動画の削除が確認されたらfooさんの動画を返しています。


ランダム再生は

  • タグ登録ページからタグを登録します
  • キャッシュにはmemchachedを使用しました
  1. Chumbyからランダム再生の要求
  2. 次動画アドレスがキャッシュに存在するか確認をし、存在すればその情報を返す
  3. 次動画を取得するためにユーザが選んだタグを検索する
  4. 現在使用中のタグ情報はキャッシュ中に保存されており、キャッシュに存在すればそれを使用し、そうでなければDBから取得
  5. 両方に存在しなければ、タグクラウドからランダムに1つ取得し使用する
  6. キャッシュの設定時間を越えたら新しいタグをDBから取得することで同じタグを使用しないようにしています
  7. 動画の取得とエンコードはバックグラウンドで実行されています (ランダム再生アクセス時に次動画のアドレスを表示したタイミングで実行)
  8. エンコード完了時に再生予定アドレスをキャッシュに保存

こんな感じだったと思います。


2009のエンコサーバはキューイングや負荷分散のことを前提に実装されているようです。
自分は実装しようしようと思いつつ色んな箇所ではまってしまい結局実装出来なかったので、凄く悔やまれます。
デーモンにしてしまうのが一番良かったのですが・・・


Chumbyのハード的な制限が大きく弾幕に耐え切れないという問題がありました。
これはコメント数を削れば対処可能なのですが、寂しい感じになってしまいます。
Playerの作成は難しい課題が多くかなり頑張っていました。(当時の自分にはASの知識がなく手伝えなく申し訳ない・・・)


兎に角、完成したわけですが課題を残したのが悔やまれます。
未完成の部分、サーバサイドの動作が安定していないのが特に悔しいです。
もっと技術をつけることを誓いインターンを終えました。
しかし、得た物も多く新しいチャレンジ、問題を解決することなどなどを学べて大変有意義な1ヶ月でした。

出来たもの

当時の資料作成時にとったスクリーンショットがデジカメのメモリーから発掘されたのではっておきます。
動画再生画面はタッチすると、一時停止や前の画面に戻るボタンが顔を出します。



sm9の悪霊退散・どーまんせーまん弾幕は負荷テストに最適でしたYO!


余談

どこかで見たことあるかもしれないですが、あまりに悔しくて
chumbyでニコニコしたいなら - まめ畑
で作成中だったりします。