DBSJの研究動画配信サービス自体は、2003年に始まっている。当初から主に、3月に行われるデータベース関連の研究ワークショップ(DEWS:データ工学ワークショップ、DEIM:データ工学と情報マネジメントに関するフォーラム)を対象とし、その研究発表を、リコーのMPMeisterというソフトでWebコンテンツ化したものを配信する、というスタイルをとっていた。(MPMeisterにリンクを貼ろうと思ったが、かねて聞いていた通り、3月末で生産終了となっていたので、リンクは張らないでおく。)しかし、対象発表件数の増大に伴い、コンテンツ作成の手間がひじょうにかかるようになり、諸方面で協議の結果、今年のDEIM2011から、動画のみの配信にして手間を軽減しようということになった。この方針転換により、今年度の動画公開は、サイト運用側、つまり私に、従来より負荷がかかるものとなった。
実のところ、当初はコンテンツの構成が変わるだけで、それほど手間は増えないと考えていたし、そういう公開方法も選択肢としてあり得たと思っている。しかし、いろいろ思案しているうち、システムの全面構築し直しという方向に傾いていった。
システム設計にあたり、次のような点を重視した。
- 閲覧環境を極力限定しない。Windows, Mac, Linuxのいずれでも、また使用ブラウザがなんであっても閲覧できること。ファイアウォールの中からでも問題なく閲覧できること。iPhoneやiPad、Android端末などからでも閲覧できれば、通勤通学のちょっとした時間で見ることができたりするので、より望ましい。
- バッチ処理による動画エンコーディングが可能なこと。事前の情報から、発表件数が300件に届くことが分かっていた。つまり動画を300本処理しないといけないわけで、バッチ処理前提の動画エンコーディング処理手順を構築しておかないと、やってられない。
- AVCHD形式の動画をエンコードできること。後で分かってきたことだが、AVCHD形式の動画は、特にMacで処理するには何かと不便なことが多い。
- ちゃんとしたWebアプリケーションフレームワークを使う。今後、学会のシステムを大きく改修することも念頭にあるので、それを見越しての判断である。機能面、普及度、個人の趣味^^;により、Rails 3を採用した。
試作を繰り返しているうちに、動画部分はHTML5のvideo要素によるマークアップに落ち着いていった。当初はFlash videoを考えていたのだが、手持ちのソフトでswfのバッチ処理をする方法がわからず(Adobe Flash CS4 + Adobe Media Encoder CS4で swf + flv/f4v 形式のFlash videoをバッチ生成する方法ってあるんでしょうか…)、この方法は断念した。結局、Dive into HTML5の動画に関する記事に基づき、Ogg Theora, H.264, VP8という3種類の動画をバッチ生成し、Flashも含めてvideo要素のfallbackでマークアップするという方法を採用した。ただし、Flashの組み込み方はこの記事のままではなく、Adobe Developer Connectionのチュートリアルにもあるswfobjectのスタティックパブリッシングを採用した。上のスクリーンショットでは、講演資料をハンドアウト風にスライドショーで見られるようにしているが、ここはjQuery.popeyeを利用している。
また、動画エンコードの方法も元記事から少し改良している。改良点は:
- ffmpeg2theoraの最新版(0.27)では、2パスエンコーディングができるみたいなので、採用した。
- HandBrakeの最新版(0.9.5)では、エンコードのプリセットがいくつか追加された。プライベートで使っている経験から、iPhone 3GS/iPhone 4/iPadでも再生可能なプリセットとしては "AppleTV" が一番よさそうと思っているので、これを採用した。
結果、300本×3 = 900本の動画のエンコーディングを行うこととなったが、この目的のためにLinux PCを2台新規に投入した結果、4日ほどですべてのエンコードが終了している。
先に書いたとおり、システム全体はRails 3で実装を行った。本格的にRailsを触るのは初めてで、Agile Web Development with Rails の 4th edition を読みながらのコーディング作業だったが、セッション管理による認証もAjaxも使って、その割に実装期間1ヶ月強というのは、我ながらまあまあ早かったように思う。Railsサマサマである。
今のところRailsのcachingも全然使っておらず、Apacheのチューニングも全然やっていないので、性能面がすごく心配だったのだが、チュートリアル講演3本を公開してからのログを見る限り、それほどアクセスの殺到もないようで、少し安心している(アクセスが少ないというのは、それはそれで、うーん、とも思うのだが)。ログを見ている限り、目論見通りiPadでアクセスされている方もいらっしゃるようで、こういうところは嬉しい。
以下、雑感である。
- Railsすばらしい。
- 英語が読めるかどうかで、Railsの開発効率はぜんぜん違うような。githubのプラグインの説明もほとんど英語だし、疑問が出てきた時にググルと、的確な解決策が海外のブログやstackoverflowなどに出てることが多い。
- パフォーマンスは今後の課題。今のところ、Rails経由で動画を送り出すのは遅いと考えて、Apache経由で送り出している。本来はRails経由で(つまりセッション管理の元で)送り出したいのだけど。
- ブラウザのプラグインにはいろいろ苦しめられた。特に動画関係。勝手にsource要素をembed要素に置き換えてしまうヤツとか、入れてるだけでVP8動画のスムーズな再生が出来なくなるヤツとか(しかもFirefox 3では問題が出ず、Firefox 4になった途端悪さをするとか…一時、Firefox 4を完全に疑ってました)。
- jQuery.popeyeにバグが…しかもかなり orz なバグ。開発元にはコメントしてみたんだけど、バグフィックスしてくれるかなあ。これは別記事で書こうと思ってます。
- Androidはワケわかりません。ちゃんとテスト機(NECのLifetouch note)まで用意したのに、再生できるはずのH.264が再生できない…基本的に資料が少ないし、何を基準にして実装すればいいのか見当がつかず…今回のシステムリリースでは対応を見送らざるを得なかった。

0 comments:
コメントを投稿