ストリーミングサーバをつくる *はじめに 昨今インターネットへの接続回線が安くなって、帯域があまりがちという人も多いかと思います。 この記事はそういう余ってしまう帯域を使い尽くしてしまいたいという、CPU 稼働率はつねに100%、帯域使用率も目指せ 100% な熱い人へお送りする FreeBSD で構築するストリーミングサーバ概説です。 無駄に CPU と帯域を使いたいならやっぱりマルチメディアですね。 さらっとマルチメディアなんて言葉を使うようになってしまった自分に衝撃を受けたりもしつつ、ストリーミングサーバとは何か。 昨今のブラウザなら他のソフトと連携して、さまざまなメディアファイルを再生できるので、音のファイルやら動画のフィアルをそのまま web 際とにおいておいて、リンクでもはっておけばかってにダウロードして再生してくれるようになっている。 まぁこうやってファイルにしてサーバに保存しておけるなら、ストリーミングサーバなんてややこしいものは必要ないんだけれども、これがライブカメラやネットラジオとなると話が変わってくる。 例えばライブカメラなんかの場合、データは常に生成されているわけで、それをいちいち細切れに保存して公開しても、見る方もいちいち細切れにされたものを見る必要があり、ライブカメラとしての意義がない。 またネットラジオなんかの場合、放送が終わったあとならファイルにまとめてサーバにアップしておけるが、それではリアルタイムで視聴者と掲示板などを使ったやり取りができなくなる。 こう言うデータを生成しながら、一方ではそれをダウンロードして再生すると言うことをしたいという時に必要になってくるのが、ストリーミングサーバという事です。 今のところFreeBSD で使用できるストリーミングサーバは ・Darwin Streaming Server ・Helix Universal Server ・icecast ・SHOUTcast などがあり、今はコンパイルできないようだけど ・peercast も一応 FreeBSD 版がある。 *Darwin Streaming Server もともとは Apple がつくっていたストリーミングサーバソフトなんだけど、それを Darwin project で APSL(Apple Public Source License) のもとオープンソースにしたもの。 なのでソースコードの入手には ADC(Apple Developer Connection)に登録する必要がある。 ADC に登録したら、ダウンロードページより、Darwin Streaming Server のソースコードがダウンロードできるので、それを /usr/ports/distfiles に置いて、/usr/ports/net/DarwinStreamingServer に移動して、make install でインストールはできる。 ports でインストール終了後、画面にさまざなまメッセージが表示されているので、それにしたがって、DarwinStreamingServer 管理用のユーザを追加する。 具体的な方法はディスプレイに表示されているし、それを見逃したなら、/var/db/pkg/DarwinStreamingServer-5.0.1.1_1/+DISPLAY にも書かれているが、 # qtpasswd -c $USER # echo admin: $USER > /usr/local/etc/streaming/qtgroups 上記のコマンドを root で実行すれば、ユーザが追加される。 あとは /usr/local/etc/rc.d/ に darwin_streaming_server.sh と streamingadminserver.sh という起動スクリプトが用意されているのでこれに start の引数をつけて実行すれば、DSS は起動する。 DSS が起動すれば、http://$HOST:1200/ にブラウザでアクセスして、表示される画面に先ほど設定した管理者ユーザ名とパスワードを入力して、管理画面を表示することができる。 とりあえず、QuickTimePlayer を起動して rtsp://$HOST:554/sample_300kbit.mov を「新規プレイヤーでURLを開く」で開いてみよう。 おそらく QuickTime のサンプル動画が見れるはずだ。 この動画ファイルの実体は、/usr/local/share/DarwinStreamingServer/movies にあるので、ここに mov ファイルを置けばいい。mov ファイルをつくるには有料のエンコーダーを使用するしか方法はないようで、一番安い方法は QuickTimePro の \3780円になる。 QuickTimePro を使えば、ライブストリーミングも出来るかもしれないのだけど、自分は QuickTimePro を買ってまで使用とは思わないので、とりあえず DSS はこれで終わり。 DSS にはもちろん MP3 の配信機能もあるのだけど、基本的に1曲ずつの配信で、複数の MP3 ファイルを連続的には威信するときには PlayList をつくる必要がある。 この PlayList は MP3 ファイルの位置を列挙したものになり、曲を増やしたり減らしたりする旅につくり直す必要がありちょっと使いにくい。 DSS には SHOUTcast とプロトコル互換の機能があり、WinAMP + DSP Plugin による MP3 の配信の方が PlayList をつかったものより楽だと思うので、そちらでまとめて説明する。 *Helix Universal Server BASIC real が提供しているストリーミングサーバの無料試用版で、配信数が5つに制限されている。 ダウンロードは http://www.jp.realnetworks.com/products/evalservers.html から出来るようになっていて、いろいろと個人情報を入力しないとだめなようになっている。。 で、ここの個人情報のところにメールアドレスを入力する場所もあって、ここに入力されたメールアドレス宛にライセンスキーを送ってくるので、少なくともここだけは使えるものを入力する必要がある。 ダウンロードしたファイルは rs901-freebsd4-ia32.bin のようになっているので、これに実行権限をつけて実行すると、自動的に解凍されてインストールが始まる。 この時に先のメールアドレス宛に送られてきたライセンスキーが必要なるので、zip 圧縮されたそれを解凍して、なかにある .lic ファイルをどこかインストールしている環境からアクセスできる場所においておき、インストール中にライセンスファイルの位置を求められたときにフルパスでライセンスファイルの位置を指定する。 インストール中に実行ファイル等をインストールするフォルダも指定する必要があるので、まえもってフォルダをつくっておき、そこにインストールするようにしておいた方が良いだろう。 また一番最後に設定された port 番号などの設定情報の一覧が出力される。 このうちで AdminPort だけは今後の設定に必要となるので忘れずにメモしておく。 ドキュメントはアーカイブに同梱されいず、オンラインマニュアルを参照する必要がある。 http://service.jp.real.com/help/library/ ここまで出来ればあとは実行するだけなので、インストールしたディレクトリで、 #.rmserver ../rmserver.cfg と入力することで、HelixStreamingServer が起動する。 サーバが起動したあと http://$HOST:adminport/admin/index.html にアクセスすると認証画面が表示されるので、先ほど設定した Admin ID とパスワードを入力すると、サーバの設定画面が表示される。 画面が表示されたら、左のメニューにある「ServerSetup」→「Media Samples」→「RealVideo9 Sample」とクリックしていくことで、サンプルのビデオを見ることができる。 自分で作成したビデオファイルなどを配信したいときには RealProducerBasic を使用して、動画ファイルを rm 形式にして、HelixStreamingServer をインストールしたディレクトリに Content といフォルダができているので、そこに rm 形式にした動画ファイルを置いて、RealOne などから rtsp://$HOST/video.rm を開くことで動画のストリーミング再生ができる。 ただしこの HelixStreamingServer は 80番ポートを使用するために、Apache などの http サーバが動いているマシンでは、http サーバを停止させて HelixStreamingServer を起動する必要がある。 *SHOUTcast WinAmp で有名な NullSoft のつくっているストリーミングサーバで、フリーで使える。 ダウンロードは http://www.shoutcast.com/download/serve.phtml リンクを辿ると FreeBSD 用のバイナリがダウンロードできるので、それをダウンロードする。 ダウンロードしたファイルを解凍すると、その中に実行ファイルがあるという形になっている。 とりあえず解凍したファイルの中ある sc_serv.conf の Password=changeme となっている部分を書き換えて自分のパスワードを設定する。 そのあと #./sc_serv とすることで、SHOUTcast サーバが起動する。 管理は http://$HOST:8000/ にアクセスするとSHOUTcast のステータスページが表示される。 その右手の方に AdminLogin というリンクがあるので、そこをクリックすると、ID とパスワードを入力する画面が表示されるので、ID に admin、パスワードに先ほど設定したパスワードを入力すると、管理画面が表示される。 MP3 をストリーミング配信したい場合には解凍したディレクトリに content というフォルダができているはずなので、そこにストリーミング配信したい MP3 ファイルを置き、http://$HOST:8000/content/(mp3file).mp3 とすれば聞くことができる。 動画の場合は NSV-tools を使用して、NSV ファイルにエンコードする必要がある。 NSV-Tools は http://www.nullsoft.com/nsv/ ここからダウンロードできる。 動画のエンコード用に VP6 コーデックや AAC コーデックも別途入手してインストールしておいた方が良いかも知れない。 AAC コーデックは WinAMP5 をインストールすることで使えるようになり、VP6コーデックは On2 http://www.on2.com/ から無償版をダウンロードすれば良い。 さて、上記の方法で NSV ファイルを作成したら、http://www.stud.ktu.lt/~vitslav/nsv/nsvscsrcGUI.exe をダウンロードして、これを使用してエンコードした NSV ファイルをストリーミングサーバに送りつけることができる。 また NSV-Tools に入っている、NSV Live Capture を使用して、ライブカメラからのデータをストリーミングサーバに送り、配信することもできる。 サーバからストリーミングとして配信されているデータを見るには WinAmp などで、「ファイル」→「URLを開く」で、 http://$HOST:8000/;stream.nsv を開けば見ることができる。 *以上ストリーミングサーバの構築とか 上記のストリーミングサーバに関しての話は、主に動画をストリーミング配信することを目的として、現在 FreeBSD で使えるであろうストリーミングサーバに関して一通り概説したと思う。 この記事により、FreeBSD で使えるストリーミングサーバに関して、大体どのようなものかはなんとなくわかるんじゃないかと、期待してみたりしてるんだけど、無理かな? 上記の説明は思いっきり簡単な部類で、とりあえずサーバをつくってストリーミング配信が一応できるというレベルのものなので、もしこれを読んで何かストリーミングサーバをつくってみようと言うなら、それぞれのソフトに関してもっときっちりと調べた上で使って欲しいと思う。 さて、ここまでは主に動画に関して説明してきたわけだが、ここからはおまけとして、MP3 のみのストリーミングサーバや、Windows でのストリーミングサーバに関して、いくつか話を書いてみようと思う。 ちなみに上で説明している動画のストリーミングができるサーバはそれぞれ MP3 のストリーミングも問題なくできる。 *icecast2 FreeBSD で動く 音専用のストリーミングサーバ。 動画の配信はできないけど、MP3 や ogg のみで、ネットラジオなどをしようと言うならおそらくは一番おすすめ。 ports は audio/icecast2 にあるのでそこで make install するだけでインストールができる。 インストール後に /usr/local/etc/icecast.xml.sample という設定ファイルができているので、これを icecast.xml に変更して、 を変更する。 その後 # icecast -c /usr/local/etc/icecast.xml とすることにより icecast を起動できる。 MP3 のストリームデータの送り方は後述することにして、再生方法は http://$HOST:8000/(filename).mp3 でストリームデータが再生される。 *peercast 最近流行りの P2P を利用したストリーミングサーバで、動画も配信できたりなかなか使い勝手が良い。 ソースが公開されているし、ちょっと前には FreeBSD 用のパッチを当たソースもあったのだけど、メンテされてないので、現在はほとんど使えない様子。 よって Windows版について解説。 オフィシャルページが http://www.peercast.org/ なので、ここからダウンロードしてインストールすればとりあえずは OK。 でもこれは P2P をの仕組を使用しているので、放送を聞いている人がまた別の放送を聞こうという人に放送データを送る必要がある。 なので、外部から peercast に接続できるようにルータなどを使用している人は、7144 と 7145 をポートフォワードするように設定しておく必要がある。 さて、peercast を起動するとタスクバーにアイコンが出てくるので、それを右クリックして、settings をクリックする。 そうするとブラウザが起動して設定画面などが表示されるようになるので、Bloadcast を開く、そしてそこにあるテキストボックスを適当に埋めていって、最後に type でストリーミングするファイル形式を選択して、CreateRelay を押すと放送準備はできたことになる。 放送を聞くときには Relay のところで、先ほど設定した放送が表示されてるはずなので、よこにある Play のボタンを押せば放送を聞くことができる。 すでに放送がされていることが前提だけど。 *ストリーミングデータの送り方。 いろいろあるけど、Winamp使うのが便利。 WinAmp2.91(http://download.nullsoft.com/winamp/client/winamp291_full.exe)、oddcast プラグイン(http://www.oddsock.org/tools/oddcastv2_wa2/) をダウンロードしてインストール、oddcast プラグインをインストールするときに Windows Media Format Distribution がダウンロードされるので、これを実行してインストール。 それから LAME encoder dll のページがひらくので、ここから lame-3.96.1.zip をダウンロードして解凍。 中に入っていた lame_enc.dll を winamp のディレクトリにコピー。 あとは好に応じて日本語化パッチとか、複数起動許可もインストールしておけばいい。 Winamp5 系統ではストリーミングの配信に使用できないので注意。 Winamp を起動したら、タイトルバーで右クリックして「オプション」→「プラグイン」→「DSP/Effcect」から「oddcast DSP」をクリックすると、ODDCAST の画面が出てくる。 ここから「Config」→「Server」で「Server type」でストリーミングサーバの種類、「Server」でストリーミングサーバの動いているホスト名かIPアドレス、「Port」でストリーミングサーバの受付ポート、「Encoder password」でストリーミングサーバのパスワードを入力して、あとは ODDCAST の画面で、「Connect」を押して、上の赤い部分が緑になれば正常にサーバに接続できたことになる。 サーバに接続できたことが確認できれば、あとは Winamp で音楽を再生していけばそれがストリーミングサーバに送信されて、ストリーミングサーバに接続した人が聞くことができるようになる。 *例 試しに icecast2 を FreeBSD サーバで動かして、Windows 上の Winamp からデータを送るのをやってみよう。 サーバの IP アドレスは 192.168.0.10 として、まずは icecast を動かす。 icecast の設定ファイル /usr/local/etc/icecast.xml には が変更されている。 # /usr/local/bin/icecast -c /usr/local/etc/icecast.xml として、icecast を起動して、 # ps -ax | grep icecast として、icecast が起動していることを確認する。 icecast が起動していることが確認できれば、次は配信の準備。 Winamp を起動して、ODDCAST の画面を表示する。「Config」→「Server」で、「Server Type」を「icecat2」、「Server」を「192.168.0.10」、「Encode password」に に設定したパスワードを入力、「Genre」に「test」、「Mountpoint」に「/test.mp3」と入力。で、「OK」通して、元の画面に戻ったら、なにか音楽を Winamp で再生しながら、「Connect」を押してみよう。 「Connect」の上にある赤いマークが緑になれば、サーバとの接続成功となる。 注意点としては「Mountpoint」のところでマウントポイントの前に「/」を入れる必要がある。 聞くときには ODDCAST の「Destination」で表示されている URL を MP3 のストリーム配信に対応しているソフトで「URL を開く」などで開くことにより、聞くことができるようになる。 *あとがき 以上、ながながと自分の知っているストリーミングについてガシガシととりあえず書いてみました。 わからないことなんかあれば、聞いてもらえば相談に乗れるかも知れません。 もうちょっとまとめて、どっかで後悔するかも。 一応公開するなら http://www.kitcc.org/~nao/ あたりで URL の告知なんかするかも知れませんので、興味があればそちらでも見てもらえればと思います。 多分テキストデータもそっちにアップするかも。