Icecastで行う音楽ファイルの独自ブロードキャスト
Icecastの実態は、独自のストリーム配信に必要なWebサーバ構築用のプログラムとライブラリのコレクションであり、具体的な役割はソースプログラムから渡されるオーディオデータへのURL指定によるアクセスを可能とすることである。またIcecastはShoutcastとシームレスな通信ができるので、あなたにその気があるなら、自分が独自のストリーム配信を行っていることを全世界の人間に知ってもらうことも不可能ではない。ラジオストリームの受信に必要となるのは、VLC、MPlayer、Xineなどのプレーヤプログラムである。
Icecastサーバにオーディオデータを渡すには、そのためのソースプログラムが必要である。そうした役割を担うIcesには、MP3でのストリーム配信をサポートした0.xバージョンおよびOgg Vorbisフォーマットをサポートした2.xバージョンという2つの系統が用意されている。ここで問題となるのは、IcecastサーバとIcesソースクライアントの設定が若干複雑で、特に新規ユーザにとっては1つのハードルとなることだ。
これらのパッケージについては、UbuntuやDebianのように各自のリポジトリに収録しているディストリビューションも多いが、本稿では手作業でコンパイルするための手順を一通り解説することにする。最初に行うべきステップは、パッケージが依存する、libxml2、libxslt1 curl、libxslt1-dev、vorbis-tools、libogg-dev、libvorbis-dev、libshout3-devのインストールである。その次のステップとしてはIcecastおよびIces用ファイル群をダウンロードする。これら2つのアーカイブをそれぞれ専用のフォルダにて展開し、次にこれらの各フォルダに移動してから通常用いる「./configure; make; make install
」コマンドによるインストールを行う。
Icecastの設定手順
ディストリビューションによっては異なる場合もあるが、Icecast用設定ファイルの格納先は通常/usr/local/etc/icecast.xmlとされているはずである。サーバの動作設定に関する大部分の情報はこのファイルにて指定する。例えばソースクライアントがオーディオデータをサーバにストリーミングする際に参照する<source-password>
フィールドの値は、Icecastを保護する観点から独自のパスワード値に変更しておくべきだろう。同じく<admin-password>
フィールドの値は、ストリーム配信に関するXML統計の閲覧時に使用するものである。<listen-socket>
フィールドにはIcecastに使用させるドメインおよびポート番号を指定する。<logdir>
はログの格納先を指定する。なおディレクトリの編集をサーバに許可するには、正しいパーミッションを設定しておかなくてはならない。
その他に必要なのはマウント関連の設定であり、これらは特にオーディオストリームを一般配信する際に用いる名前とWebサイトおよび、サーバへの初回アクセス時に再生させるオーディオクリップなどを指定する場合に重要となる。これらの設定は<mount>
セクションにて行う。こうした設定に関係するのは、<max-listeners>
、<stream-name>
、<stream-description>
、<stream-url>
、<genre>
などである。このうちstream-urlは、パブリックディレクトリに一覧させるアドレスの指定である。実際にユーザが入力すべきURLを変更させたければ、<mount-name>
タグにあるマウントポイントを修正すればいい。ストリーム配信をパスワード保護させる場合は、<username>
および<password>
タグにて必要な設定を施す。なおストリーム配信を複数化してそのためのマウントポイントを増設する場合は、セクション全体(<mount>
タグも含む)を複製して先のリストの続きに追加しておく。
必要な設定変更が完了したら、次に「icecast -c /usr/local/etc/icecast.xml
」とコマンドを入力することでサーバを起動させる。なお設定ファイルの格納位置が異なる場合は、ここでのパス指定もそれに合わせた変更が必要となる。実際にサーバが起動しているかの確認は、topないしhtopコマンドにてログをチェックするか、ブラウザにて「http://yourip:port/admin/stats.xml」にアクセスすればいい。この場合のユーザ名はadmin
であり、パスワードとしては<source-password>
に設定した値を使用する。
IceSによるオーディオストリームの配信設定
Icecastサーバのセットアップが完了したら、オーディオデータをサーバに渡すソースクライアント側の設定を行う。なおここでの設定例ではIcecastサーバとIcesソースクライアントは同一マシン上に置かれていることを想定しているが、それ以外の配置も可能である。
最初のステップとして、再生する音楽ファイルとその順番をクライアントに通知するためのプレイリストファイルを作成しておく。それにはテキストエディタにてplaylist.txtを作成し、その中にファイル参照用の情報を下記のフォーマットにて指定すればいい。
# 再生させる音楽ファイルのパスを一覧 /music/track1.mp3 /music/track2.ogg # 以下同様……
すべての音楽ファイルが同じディレクトリに格納されている場合は、より簡便なプレイリストファイル作成法が存在する。例えば下記のコマンドをブラウザから実行すると、当該ディレクトリに属す全ファイルのうち拡張子が.mp3であるものが指定したテキストファイルに一覧される。
find /path/to/audio/directory -iname "*.mp3" > playlist.txt
ここでの-iname
パラメータを変更すれば.oggファイルについても同様の手法が使えるが、あるいは-iname "*.mp3"
の指定を丸ごと削除すれば当該ディレクトリ中の全ファイルが一覧されるはずである。なおディレクトリ中の全ファイルを無条件に一覧させる場合、オーディオ以外のファイルがプレイリストに登録されるとIcesにてエラーが発生するので注意が必要だ。プレイリストファイルの用意が済んだら、コマンドラインから下記のコマンドを実行してIcesクライアントを起動させる。
ices -h yourhost.com -P your-password -F /location/of/playlist.txt
Icesにはプレイリスト段階で演奏順をランダム化する機能は用意されておらず、そうしたファイルを作成したければ必要なシェルスクリプトをユーザが独自で記述しなくてはならない。もっとも演奏順をランダム化させることだけが目的であれば、対象となるすべての音楽ファイルを1つのプレイリストに登録した上で、設定ファイルにてランダム演奏用のパラメータを有効化しておくのが一番簡単な方法である。具体的な操作としてはテキストエディタにて/etc/ices2/ices-playlist.xmlを開き、<param name="random">
の設定値を1
に変更すればいい。これにより一般のオーディオプレーヤに用意されているシャッフル再生と同様の処理がIcesにて行われるようになる。
-h
オプションを空欄にしておくと、Icesのローカルホストアドレスはデフォルト値のままとされる。またデフォルトのポート番号をIcecastの設定ファイルにて変更してある場合は-p portnumber
によるポートの変更コマンドを追加しておく。
以上の準備に問題がなければ、設定ファイルに指定したアドレスおよびマウントポイントにブラウザないしストリーミングプレーヤを用いて接続すると、自分自身が最初に接続したユーザの場合、プレイリストに登録された1番目の音楽ファイルがストリーム配信されるはずである。その後はソースクライアントからIcecastサーバに対する音楽ファイルのフィードが継続的に実行されていき、ストリーミング再生中に接続した他のリスナーはアクセス時に演奏されていた楽曲を途中から聴く形になる。
ストリーム配信を停止させる場合は、「killall ices
」および「killall icecast
」コマンドにて双方をシャットダウンさせればいい。
自分が新規に音楽ファイルのストリーム配信を開始することをインターネット上で宣言する場合、ストリーミングのプロバイダとなる者には著作権保護された楽曲の再生に対する使用料の支払い義務が課される可能性があることに留意しておかなくてはならない。著作権使用料の将来的な動向については様々な議論がなされているが、アメリカ国内に居住する人間の場合は、米国議会図書館の示す著作権使用料に関する情報が参考になるだろう。
自前のストリーミングサーバを立ち上げるということは、音楽ファイルの再生が日常生活の一部に溶け込むということだ。それは単に自分自身が任意のコンピュータからWeb経由でアクセス可能になるという意味だけではなく、例えば自分で作曲した最新の楽曲を友人に聴いてもらう用途に供することもできるし、仕事で利用するならば、会議や電話での打ち合わせに参加できなかった同僚や職員に対して当日の録音記録を配信するという使い方も考えられるだろう。あるいは思い切って今の職場を離れ、他のWebブロードキャスタと共にインターネットラジオステーションのトップを目指すバトルに参戦するというのもありかもしれない。いずれにせよこれらすべての選択肢は、手元のLinuxマシンにてIcecastを運用することであなた自身の手中に収まるのだ。
Kurt Edelbrockは大学生であると同時に、テクノロジ関係のジャーナリストおよびブロガーとしても活動中で、オープンソースに関係する様々な記事を執筆している。