この文書について
silky (FreeBSD 7.0R1) サーバ上に、icecast と liveice を使ってストリーミングサーバを構築した際の記録です。
目標は数時間から1日でプレイリストを切り替え、iTunes などから聞くことができるようにすること。
ちなみに、mp3 ファイルが全部 128kbps とか、あるビットレートで固定してエンコードしている、または再生したいファイルは全部再度エンコードしてもいい!という人は、liveice ではなく shout を使ってください。
silky (FreeBSD 7.0R1) サーバ上に、icecast と liveice を使ってストリーミングサーバを構築した際の記録です。
目標は数時間から1日でプレイリストを切り替え、iTunes などから聞くことができるようにすること。
ちなみに、mp3 ファイルが全部 128kbps とか、あるビットレートで固定してエンコードしている、または再生したいファイルは全部再度エンコードしてもいい!という人は、liveice ではなく shout を使ってください。
icecast は一発で入ります。
cd /usr/ports/audio/icecast
make && make install
これは自分でコンパイルしても、そんなに問題はないでしょう。
次に liveice です。
LiveIce: Live Source Client For IceCast
こちらの開発元サイトから .tar.gz をつれてきて、解凍します。
./configure && make なタイプですが、make install でコケてくれます。
mkdirs というのがあるらしいのですが、少なくとも SRCDIR には見当たりません。どうやら指定したディレクトリを作成するモノのようで、mkdir -p で代用可能です。 よって、以下の内容で mkdirs ファイルを作成します。
#!/bin/sh mkdir -p $1
chmod 755 mkdirs
あとは ./configure && make && make install で通るでしょう。注意したいのは、コイツは make install すると設定ファイルを上書きしてくれるので、後述の編集を したあとに make install するときは気をつけましょう。
さらに、mp3 をエンコードするために lame、デコードするために mpg123 を同じく ports からインストールしました。これらは特に問題はないでしょう。
icecast の設定は簡単です。設定ファイルは /usr/local/etc/icecast/conf/icecast.conf にあります。
このファイルは丁寧なコメントがつけられているので、読みながら書いていけば大丈夫です。
以下、私が編集した部分について簡単な説明だけします。
location Somewhere in Japan
rp_email root@linkage.white-void.net
server_url http://silky.white-void.net:35466/
ブラウザで開いたときに表示される情報になります。ローカルやクローズドな環境で使う分には、適当でも構わないでしょう。
encoder_password hackme
admin_password hackme
oper_password hackme
encoder は icecast にストリームデータを送信するサーバです。今回の場合は liveice が対応します。admin と oper はそのまんま管理者ですね。気を抜かず、 しっかりパスワードは設定しましょう。(ただしクリアテキストなのでその点は注意)
# hostname 172.16.x.y
port 35466
server_name silky.white-void.net
listen するインターフェースを指定する hostname、ポート番号とサーバ名です。この部分の上には、
# The server_name specifies the hostname of the server, don't set it to an ip,
# and don't even THINK about setting it to a hostname not pointing to your ip.
とあって、IP アドレスを書いちゃダメ、とあります。いまいちよくわかりませんが、素直に従っておきます。
console_mode 3
最後に、いわゆる daemon モードになるように指示します。0 だと interactive なモード + ログ表示、1 はログ表示なし、 2 はログ専用、そして 3 がバックグラウンドでの動作となります。
設定が終わったら起動します。
/usr/local/bin/icecast -c /usr/local/etc/icecast/conf/icecast.conf
標準ではファイルは /usr/local/icecast/etc/liveice.cfg です。icecast は /usr/local/etc/〜 でちょっと違うので、気をつけて。
こちらも icecast と同じようにコメントが付いていますので、さほどは困りません。
# basic options
SERVER silky.white-void.net
PORT 35466
PASSWORD hackme
先に設定した icecast のサーバアドレスとポート番号、そして encoder のパスワードを指定します。
SAMPLE_RATE 44100
BITRATE 192000
#MONO
STEREO
サンプルレートとビットレート、ステレオか否かの設定です。
Don't be too greedyと書かれていますが、この記事で求めていることがすでに greedy なので無視します(ぇ
MOUNTPOINT default
マウントポイントというものの設定です。この場合、http://silky.white-void.net:35466/default で liveice のストリームが聞けることになります。
NAME Silky Random Stream
GENRE \203X\203g\203\212\201[\203\200
PUBLIC 0
#URL http://star.arm.ac.uk/~spm/software/liveice.html
#PASSWORD hackme
ストリームの情報です。GENRE はストリームのジャンル、PUBLIC は…よくわかりません。どこぞのページに URL を公開されても困るので、とりあえず 0 に。
ちなみに GENRE には Shift-JIS で「ストリーム」と書いてあります。日本語にしたい方は、ファイル共有などを駆使してがんばって埋め込んでください(笑
URL も同様にパス。PASSWORD に至ってはさっぱりなので、やっぱりコメントアウトします。
#NO_MIXER
#ESDMON_MODE
#SHOUT_MODE
MIXER
ライン入力、esdmon 入力、プレイリスト再生、ミキサのどれを入力として使用するかを指定します。ぶっちゃけ、SHOUT_MODE と MIXER の差がわかりません。 MIXER も実質はプレイリストの再生モードです。
シグナルによるプレイリストの再読み込みが可能なのは MIXER だけなので、こちらを指定します。
# update script can be executed at every track change...
# Not well documented - in fact not documented at all
#UPDATE_SCRIPT /home/2510/bin/liveice-update
各曲を再生する「前」に起動されるプログラムへのパスです。後述しますが、バグの山ですので、この時点では指定しちゃだめです。
すべて設定できたら、起動します。シェルスクリプトから起動すると何故か固まるので、あきらめて普通にシェルから起動します。
cd /usr/local/icecast
./bin/liveice
cd しているのは、カレントディレクトリに .liveice_temp_files というディレクトリが作成されるためです。
さて、これで普通なら iTunes などのソフトでストリームが聞こえるハズです。ハズですが、私の環境はひねくれてるのか、どうにもうまくいきません。
以下、起きた問題を列挙します。
まず簡単に直る mp3 ファイルの再生問題を解決します。
要は mpg123 がアホなのが悪いので、mpg123 を修正…してもいいんですが、実は不完全なのでほかの手段を使います。
何も難しいことはありません。ports から mpg321 をインストールして、liveice の設定を変更するだけ。ひどい話ですが。
#DECODER_COMMAND mpg123
DECODER_COMMAND /usr/local/bin/mpg321
(そもそもフルパスじゃなかったのに、よく動いてたなぁ…)
お次は UPDATE_SCRIPT です。これはソースコードを patch でぶん殴って修正します。
あと、画面が汚れる & daemon モードがない点、.liveice_temp_files が邪魔な問題もまとめて patch で張り倒します。
おまけとして、/usr/local/icecast/log/liveice.pid に pid ファイルを吐くようにしておきました。
使うときはこんな感じで。
tar -zxf liveice.tar.gz
cd liveice
gzcat ../liveice-patch.gz | patch
./configure
make && make install
コマンドラインに --daemon をつけると、daemon モードになります。