■サーバーのオーディオをワイヤレスにしたので、次はサーバーのオーディオファイルを再生する仕掛けを整備することにした。ジュークボックスというか、要するにメディアサーバーの一種だけどウェブから操作することが前提。そういうものは以前も一回作ったことがあって、ただ、微妙に使いにくいのでやめてしまった。
やめた理由の一つはオーディオ再生するプログラムをCGIで呼び出すと、再生が終了するまでブラウザをロックしてしまうことと、それを避けるために非同期起動させると今度は制御できなくなることだった。
ブラウザとは非同期で再生させて、制御できるようにするには、ブラウザから直接プレーヤーソフトを起動するのではなく、間に1つサーバーを立てて、そこを経由させる作りにせざるを得ない。ブラウザからの再生指示は、サーバーの中にウェイティングリストとしてキューイングさせる。
そうした構造を持たせることとなれば、再生状況はサーバーの内部ステータスをサマリレポートとしてダンプしたものを、別のクライアントプログラムが読むようにすればいい。作るモジュールも、中心となるサーバーと、サーバーに対するインターフェースクラス、そしてクライアントの実装ということになる。
ジュークボックスサーバーはキューイング、mp3プレイヤープロセスの管理、ステータス情報の開示をしているだけで、あまり複雑なことはしていない。mo3ファイルはwmpからのリッピングで生成されるけど、その格納構造はツリー構造を持っている。そこからアドホックにサーバーへ渡すプレイリストを生成する必要があるのだけど、そうしたいろいろなバリエーションのありそうな処理はクライアント側(Request Client)で行う作りとしている。
クライアント・サーバー間の通信は古典的なIPCで、セマフォやメッセージングキュー、共有メモリを使う。サーバー間の通信ではないのでSOAPやRFCは不要というだけなのだけど、そうしたサーバー間通信をハンドリングし、サーバーへ中継ぎをするインターフェースとしてのクライアントを実装することも可能ではある。(けど、そこまで作るかは考えていない)