Node.jsで書く理由が全く無いんですが、勉強のために、
ローカルで起動して動画の管理をするためのサーバーを書いてみました。
ビューと使ったライブラリ以外は、全てCoffeeScriptで書いてます。
一応、「BlackAlbum」と名前を付けました。
ネーミングは、二重のパクリです。
joker1007/blackalbum - GitHub
https://github.com/joker1007/blackalbum
必要なもの
- node.js (v0.4.9 <= v0.4.11で動作確認)
- mongodb
- ffmpeg
- ffmpegthumbnailer
- 各種npmパッケージ
使い方
起動する
nohup coffee app.coffee -p 12345 &
http://localhost:12345/をブラウザで開く
読み込み対象のディレクトリを追加して、
データベース更新を実行すれば、サムネイルを作成してリスト表示する。
プレーヤーの設定を入れて、サムネイルかファイル名をクリックすると、
プレーヤーが起動して、再生が始まる。
背景
そもそも作ろうと思った理由は、WindowsにWhiteBrowserというイケてるメディア管理用のアプリがあるんですが、
Mac、Linuxに同様のアプリが無いんで、それじゃあ作るか、ってのが始まりです。
元々Sinatraとかで書くつもりだったんですが、Node.jsとCoffeeScriptの勉強も兼ねてって所。
実際、冒頭にも書きましたがNode.jsで書く理由がこれっぽっちも無いので、無駄な茨を踏んだ気がしてますが・・・。
本当はSocket.IOとか使って、もうちょっとインタラクティブな動きを実現したかったんですが、あんまり使い所が無かったし。
まあ、ノンブロッキングI/Oの挙動とか、コールバックスタイルでのプログラミングが大体分かったので、良かったかなと。
Node.jsでこんなことするのがそもそも間違ってる気がしますが、外部プロセスでffmpegを呼んで大量のデータ処理してると、
非同期でバンバン流れていくもんだから、ファイルディスクリプタ使いきってエラーになるとか・・・。
イマイチな点
- エラー処理が甘い
- Nodeのエラー処理がうまいこと行かなくて、しばしばサーバーごと落ちる。
- そもそもデバッグが難しい。どこで落ちてんのか分からん上に、CoffeeScriptなんでスタックトレースの行表示も役に立たない。
- try, catchもコールバック挟むと上手く動かないから、エラー処理が分散して死ねる。
- インストールに手間がかかる
- mongodbが必要。SQLiteにしとけば良かったかもしれないが面倒だった・・・。
- 自分でforkしたnode-zipfileに依存してたり
- Macでiconvを使う時に、利用するiconv本体を入れ替える必要がある
- Mac専用
まあ、Macならhomebrewとnave使えばそんなに手間かからず使えるはず・・・。