icecast2によるストリーミングサーバの構築

  • 秋月のWebラジオキット(http://akizukidenshi.com/catalog/g/gK-01579/)を組み立てて、世の中のストリーミングサーバが聴けるようになったが、ローカルのmp3も聴きたいと思ったので、icecast2を使ってストリーミングサーバを構築してみた

icecastのインストール

  • 予備知識:icecast(放送局のイメージ?)はices(番組のイメージ?)と組み合わせる
  • aptを使うのが最も楽
    # apt-get intall icecast2 

icecastの設定

# vi /etc/default/icecast2
  • 編集する箇所
    ENABLE=true
# vi /etc/icecast2/icecast.xml
  • 編集する箇所
    <source-password>hackme</source-password>
    <relay-password>hackme</relay-password>
    略
    <admin-password>hackme</admin-password>
    略
    <listen-socket>
     <port>8000</port>
     <bind-address>127.0.0.1</bind-address>
    </listen-socket>
    略
    <hostname>localhost</hostname>
  • ここはどうしたものか・・
  • プロセスをみるとicecast2/icecastで動作しているのでとりあえずは放置
    <changeowner>
     <user>nobody</user>
     <group>nogroup</group>
    </changeowner>

icecast起動

手動の場合、

/usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml

だが、スクリプトがあるはずなので

/etc/init.d/icecast2 start

ブラウザで

http://hogehoge:8000

で確認してみる。あがらない場合は、icecast.xmlのhostnameあたりが怪しい。

icesのインストール

これもaptでいれるのが楽。だが・・・

# apt-get install ices2

どうやら、現在aptで入るicesはices2で、mp3は不可のよう。 なのでソースからコンパイルする。 その前に、icecast2を入れるだけでices2も入ってしまうので念のため

# apt-get purge ices2

で消しておく。

まずはライブラリ類をaptで入れる。libcを入れる前に、まずコンパイルできないか確認しとおいた方が良いかも。

# apt-get install libc6 libc6-dev
# apt-get install gpp 
# apt-get install g++
# apt-get install file
# apt-get install libshout3 libshout3-dev

icesのソース取得&コンパイル

% wget http://downloads.xiph.org/releases/ices/ices-0.4.tar.gz
% tar xzvf ices-0.4.tar.gz
% cd ices-0.4
% ./configure

したら

 XML     : yes
 Python  : no
 Perl    : no
 LAME    : no
 Vorbis  : no
 MP4     : no
 FLAC    : no

となったので、なんとなく

# apt-get install lame liblame-dev

(要www.debian-multimedia.orgリポジトリ)

% ./configure --with-lame

とすると

 XML     : yes
 Python  : no
 Perl    : no
 LAME    : yes
 Vorbis  : yes
 MP4     : no
 FLAC    : no

なので

% make
# make install

configure/makeに失敗する場合、エラーをみてaptで不足しているライブラリ類を入れる。 特にmakeしたことが無いシステムだと上記のライブラリでは不足な予感。

icesの設定

設定ファイルのテンプレートは

/usr/local/etc/ices.conf.dist
/usr/share/doc/ices2/examples/ices-playlist.xml(ices2)

にあるはず(prefix)指定してなければ)。

# cp /usr/local/etc/ices.conf.dist /usr/local/etc/ices.conf
# vi /usr/local/etc/ices.conf
  • 編集する箇所(抜粋) BB-SHOUTに合わせてみた例。
    <Playlist>
      <File>/hoge/huga/playlist.txt</File>
    </Playlist>
    
    <Background>1</Background>
    
    <Verbose>1</Verbose>
     
     <Stream>
       <Server>
         <Password>icecast側で設定したパスワード</Password>
       </Server>
       <Mountpoint>/ices2</Mountpoint>
       <Name>MP3 player</Name>
       <Bitrate>192</Bitrate>
       <Reencode>1</Reencode>
       <Genre>Default genre</Genre>
     </Stream>
# vi /hoge/huga/playlist.txt
  • たとえば
    /hoge/huga/1.mp3
    /hoge/huga/2.mp3
  • どっかのディレクトリにmp3をまとめて置いていてリストを楽に作りたい場合は、
    # vi make_list.sh
    とか作って、
    #!/bin/sh
    ls /hoge/huga/mp3s/*mp3   > /hoge/huga/playlist.txt
    と記述し、実行権限を与えて、実行
    # chmod 755 make_list.sh
    # ./make_list.sh

ices起動

  • rootで起動すると怒られるのでユーザを作成する(いや必要ないかも。現バージョンではrootであがる?)
    groupadd ice
    useradd -g ice -d /var/empty/ice -s /sbin/ice ice
    passwd ice
    でもicecast2のパッケージインストール時に作成されたicecast2/icecastでいいかも。
  • ユーザiceになって
    ices -B -c  /usr/local/etc/ices.conf
  • Bオプションはバックグラウンドの意味
  • あがらない場合は、/tmp/ices.logをみつつ、hostname,パスワードの設定を再確認。 firewallにも要注意。
  • とはいえいちいち手で起動するのはメンドイ
  • /etc/rc3.d/をみるとicecastは20番目
  • 無難に98とか99に追加しようと思ったが、skeltonを元に新しく作るのもやっぱ面倒
  • というわけでicecast2内に書いてしまった
  • /etc/init.d/icecast2
    • 適当なところに定義を書く
      ICES="/usr/local/bin/ices"
      
      start_ices() {
      
       $ICES -B -c /usr/local/etc/ices_sleep.conf &
      
        return 0
      }
      
      stop_ices() {
             ps aux | grep ices
             ices_num=`ps aux | grep ices | wc -l`
             if [ $ices_num -ge 2 ];then
                     killall -KILL ices
             fi
        return 0
      }
  • あとはicecast2の起動、停止、再起動部分に追加
      start)
    略
    	start_ices
    	;;
      stop)
          stop_ices
    略
    	
    略
      restart)
          stop_ices
    略
          start_ices
    	;;
    略
  • 確認
    /etc/init.d/icecast2/start|stop|restart
    とかしてみる あとはブラウザ(ポート8000)でみて再生してみる

音声レベル平均化のために

mp3->WAV

mpg123 -w athena.wav athena.mp3

sox

  • なんでmpg123じゃダメなんだっけ・

インスコ

  • ソース
    ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/
  • パッケージ
    apt-get install sox

実行

sox moto.wav -c 2 -r 44100 out.wav
sox -t wav -r 44100 -s -w -c 2 track.wav track.raw

normalize

  • 音声レベルの平均化

インスコ

  • ソースの場合
    http://linuxbandwagon.com/wavnorm/
  • パッケージなら先にsources.listに追加
    deb http://ftp.debian-unofficial.org/debian sarge main contrib non-free restricted
    deb-src http://ftp.debian-unofficial.org/debian sarge main contrib non-free restricted
    apt-get update
    apt-get -s upgrade
    apt-get -u upgrade
  • mp3再生SW「mpg321」とともにいれる
    apt-get install mpg321
    apt-get install  normalize-audio

実行

normalize-mp3 --bitrate 128 german.mp3 english.mp3

lame

  • WAV->mp31変換

インスコ

  • /etc/apt/sources.listに
    deb ftp://ftp.nerim.net/debian-marillat/ testing main
    追加
    #apt-get update
    #apt-get install lame

実行

lame -f -b 128 out.wav german_n.mp3

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-28 (日) 21:47:48 (2432d)