綾小路龍之介の素人思考

[Linux] サーバでストリーミング放送を録音

Linuxサーバでストリーミング放送を録音してみる。

Vine Linux 4.1ではaptでstreamripperがインストールできます。ソースからのコンパイルもやってみたけど、INSTALLに書かれた方法ではうまくいかなかった。まぁaptでインストールできればOKってことで。

$ su -
# apt-get install streamripper

音聴くだけだとrootになんなきゃいけないけど、ストリームのキャプチャだけなのでrootですることはこれでおしまい。聞く放送局はSHOUTcastとかで探してプレイリストをダウンロードしておく。

$ w3m http://www.shoutcast.com/
$ ls
shoutcast-playlist.pls
$ cat shoutcast-playlist.pls
...
File1=http://hoge.com:8080/
...

ダウンロードしたプレイリストのFileから始まる行の=の右側を引数にして起動。カレントディレクトリの中にサブディレクトリができてその中に録音されたファイルが書き込まれる。

$ streamripper http://hoge.com:8080/

ここまでだと永久に録音し続けることになる。とまらないと困るので録音時間か録音容量で終了するようにする。-M 100で100Mbytesダウンロードしたら終了。-l 100で100秒ダウンロードしたら終了。とりあえずテストということで10Mbytesで終了ということで下。

$ streamripper http://hoge.com:8080/ -M 10

10Mbytesかは確認してないけどとりあえず自動的に落ちることを確認。ここらへんでシェルスクリプトにしてみよう。いつも使ってるログオフしても仕事を続けるスクリプトを多少書き換えて、下のような感じにしてみる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

うまくできることを確認。ログアウトしても録音は続くし、プライオリティも下がっているし、自動的に落ちる。でも問題発見。*.stderrがでかい。catしたりするとあんまりないよう内容に見えるけど制御コードっぽいのがいっぱい入ってて結構でかい。まぁ気にしなければいいんだけど。出力を抑制するオプションをヘルプを読んで探す。--quiteをつけるとコンソールにいろいろでなくなることがわかった。つーことで試しに--quietを追加してみる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

--quietしてもエラーは吐いてくれるっぽいので、このスクリプトで運用。cronに載せる。cronは基本的にホームディレクトリで実行なので、出力フォルダを指定するオプションもつけとく。ホームディレクトリに移って実行確認。変数を""で囲んでるので変数展開されない。したがって~/とか使えない。なのでディレクトリは絶対指定でごまかす。あとディレクトリはなくても作ってくれる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet -d /home/user/path/to/music/"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

このままだと100回cronで呼び出されると1GBytesディスクを消費してしまう。削除も面倒なので古いファイルは自動で削除してもらう。とりあえずテストで30分に1回cronが走るとして、最後の修正から3時間以上たったファイルは削除という方向で。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet"
D=~/path/to/music/
cd $D
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &
find . -type f -name '*.mp3' -mmin +180 -print0 | xargs -0 -r rm

おそらくこれでうまくできると思う。実際に運用するときは録音の時間を長くとった方がよさそうなので。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 100 --quiet"
D=~/path/to/music/
cd $D
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &
find . -type f -name '*.mp3' -mtime +7 -print0 | xargs -0 -r rm
crontab -e
10 11 * * * /bin/sh streamripper.sh

こんなんでどーでしょ。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-01-06T12:05:08+09:00
  2. Modified: 2009-01-06T08:40:12+09:00
  3. Generated: 2017-09-28T23:09:19+09:00