alsaドライバ + jackd + icecast2 + darkiceでネットラジオ配信
ustreamやyoutubeなどでラジオの配信などは本当に楽ちんになりましたが、独自に広告をとったりしてネットラジオ局を公開することもできます。smoothjazzやsomefmと同じような仕組みを作る方法です。
サーバはlinuxサーバ。事情によりdebianではなくubuntu(Linux 2.6.32-27-generic#49-Ubuntu)で作りました。
ネットラジオ放送の仕組みはサーバとクライアントが必要です。考え方としてはサーバという放送局に対して出先のスタジオから放送内容をサーバに送って配信することになります。
1 client(darkice) → 2 server(icecast2) ⇔ リスナー(itunes/winamp/VLC)
という仕組みです。
1のクライアントから構築していきます。
audio inはalsaドライバ + jackdを使います。alsaはaudioドライバでjackdはひとつのインターフェースを同時に使えるようにするラッパーのような物と思っておけば良いと思います。jackdを通さなくてもいいのですが通さないと同時に複数利用ができなくなります。録音しながらラジオ配信とかする場合はjackdは必須です。
ALSAドライバ + jackdのインストール
# apt-get install linux-backports-modules-alsa-lucid-generic # apt-get install jackd # apt-get install libasound2 # apt-get install libasound2-plugins # for libasound_module_pcm_jack.so # apt-get install darkice # apt-get install icecast # apt-get install lame
audioドライバがちゃんと動作し、認識しているかは下記の方法で確認できます。
# aplay -l **** ハードウェアデバイス PLAYBACK のリスト **** カード 0: SIS966 [HDA SIS000], デバイス 0: ALC000 rev1 Analog [ALC000 rev0 Analog] サブデバイス: 0/1 サブデバイス #0: subdevice #0
という感じです。
さらに録音ができるかどうかは下記の方法で確認できます。
# arecord -t wav -d 5 test.wav
aplay/arecordが入っていない場合は別途インストールして下さい。
次にjackdを走らせます。
/usr/bin/jackd -R -d alsa -d hw &
jackdのオプションは下記の通り
usage: jackd [ --no-realtime OR -r ] [ --realtime OR -R [ --realtime-priority OR -P priority ] ] (the two previous arguments are mutually exclusive. The default is --realtime) [ --name OR -n server-name ] [ --no-mlock OR -m ] [ --unlock OR -u ] [ --timeout OR -t client-timeout-in-msecs ] [ --port-max OR -p maximum-number-of-ports] [ --debug-timer OR -D ] [ --no-sanity-checks OR -N ] [ --verbose OR -v ] [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ] [ --replace-registry ] [ --silent OR -s ] [ --version OR -V ] [ --nozombies OR -Z ] -d backend [ ... backend args ... ] Available backends may include: alsa, dummy, freebob, firewire, net, oss, sun, or portaudio. jackd -d backend --help to display options for each backend
複数のインターフェースがあって入力端子、チャンネルを指定したい場合は
/usr/bin/jackd -d alsa -d hw:0 -r 44100 &
などと明確に指定もできます。
.asoundrcの設定
次にalsaから入ってきてる音声入力をjackdでどのような振る舞いをさせるかの設定をします。
# cd ~ # vim .asoundrc
pcm.jackplug { type plug slave { pcm "jack" } } pcm.jack { type jack playback_ports { 0 alsa_pcm:playback_1 1 alsa_pcm:playback_2 } capture_ports { 0 alsa_pcm:capture_1 1 alsa_pcm:capture_2 } }
.asoundrcの設定方法の詳細は
http://wikiwiki.jp/tetsuya/?asoundrc
alsaドライバをjackd経由で動作しているか確認するには
# aplay -D pcm.jackplug file
などとしてpcm.jackplugを介してwavファイルなど再生してみることでテストが可能です。
icecast2の設定(serverの設定です。場合によっては異なったマシンの場合があります。)
icecastの設定は簡単です。icecastのバージョンをしっかりと把握すること、そしてパスワードの設定をしっかりすることが重要です。icecastのバージョンが違うだけでのちに行うdarkiceの設定でつまずきます。ここではicecast2であるということで設定していきます。
/etc/icecast2/icecast.xmlを編集(変更部分のみ記述)
<authentication> <source-password>kmusiclife</source-password> <relay-password>YOUTPASSWORD</relay-password> <admin-user>admin</admin-user> <admin-password>YOURPASSWORD</admin-password> </authentication>
YOURPASSWORDの部分を設定変更。
サーバサイドでicecast2を再起動/起動します。
# _etc/init.d/icecast restart
darkiceの設定と配信
darkiceからicecast2にたいして音声データを送ります。icecastが実際に配信をします。darkiceの設定は下記のとおりです。
/etc/darkice.cfg にファイルを作成/編集
[general] duration = 0 bufferSecs = 5 [input] device = jack_auto # pcm.jackplugでは安定しなかったです sampleRate = 44100 bitsPerSample = 16 channel = 2 [icecast2-0] format = mp3 sampleRate = 44100 channel = 2 bitrateMode = abr bitrate = 128 lowpass = 10500 server = icecast_server.com port = 8000 password = YOURPASSWORD mountPoint = radio.mp3 name = CHANNEL NAME description = CHANNEL DESCRIPTION url = http://www.kmusiclife.com genre = radio public = no remoteDumpFile = /tmp/radiochannel.mp3
device = pcm.jackplugにするとxrun errorが出て安定しませんでした。
jack_autoにするとxrun errorがでなくなり安定しました。
上記は配信サーバicecast_server.com:8000/radio.mp3という名で配信を行います。
lameでmp3にエンコードして配信します。oggでも配信が可能です。
darkiceからicecastに配信
darkiceを起動しicecastに対して配信を開始します。
# /usr/bin/darkice &
この時にエラーがややこしいのでアドバイスしておきます。
Using ALSA DSP input device: pcm.jackplug Using POSIX real-time scheduling, priority 98 DarkIce: LameLibEncoder.cpp:75: lame lib opening underlying sink error [0]
というエラーが出ることがあります。このエラーはlameのエラーではなく認証のエラーの場合が多いです。icecast.xmlなどのパスワードを確認して下さい。認証ではねられている可能性があります。よくあるケースとしてはicecastのバージョンを間違えているということがあります。確認して下さい。
うまく行けば
DarkIce 0.20.1 live audio streamer, http://darkice.tyrell.hu/ Copyright (c) 2000-2007, Tyrell Hungary, http://tyrell.hu/ Using config file: /etc/darkice.cfg Using ALSA DSP input device: pcm.jackplug Using POSIX real-time scheduling, priority 98
というメッセージが出たりします。
配信しているラジオを聴く
icecast_server.com:8000/radio.mp3 で配信しているラジオを聞くにはVLCを入れると分かりやすいです。
VLCを起動 → ファイル → ネットワークを開く → URLにラジオのURLを入力します。
例) http://icecast_server.com:8000/radio.mp3
認証を通したい場合いはicecast認証などと調べてみてください。webインターフェースからクライアント側の認証ができます。basic認証なのでURLにuser/passを埋め込めますので便利です。