目次
はじめに
- MP3 Vorbis ( ogg ) FLAC AAC をサポート
- リアルタイムエンコードも出来るので音源が Vorbis 等でも WMP で再生できる
- プレイリスト & ファイル名が UTF-8 なら日本語のファイル名でも再生できる
配信形式について
- リアルタイムエンコードする
- FLAC だろうが Vorbis だろうが関係なくどのプレイヤーでも再生できる
- FLAC だろうが Vorbis だろうが関係なくどのプレイヤーでも再生できる
- リアルタイムエンコードしない
- MP3
- ストリーミングに対応しているプレイヤー ( Windows Media Player 等) で再生できる
- 音質が若干低い
- ストリーミングに対応しているプレイヤー ( Windows Media Player 等) で再生できる
- Vorbis ( ogg )
- 一般的なプレイヤー ( Windows Media Player 等) では再生出来ない
- 音質は MP3 より良い
- 一般的なプレイヤー ( Windows Media Player 等) では再生出来ない
- MP3
多少の負荷を我慢できるならリアルタイムエンコードで配信した方が良い。
配信時の注意事項
- 共通事項
- FLAC はメタタグを読み込まない
- FLAC はメタタグを読み込まない
- foobar2000
- MP3 , Vorbis は日本語メタタグが文字化けする
- MP3 , Vorbis は日本語メタタグが文字化けする
- Winamp
- MP3 , Vorbis は英語・日本語共に正常に表示される
- MP3 , Vorbis は英語・日本語共に正常に表示される
- WMP
- MP3 , Vorbis , FLAC 共通してタイトルなどのメタタグを表示しない
- MP3 , Vorbis , FLAC 共通してタイトルなどのメタタグを表示しない
インストール
事前に pkg_tools.conf でオプションを設定しておくと幸せになるかも。
# portinstall audio/ices0
To start ices at system boot, copy /usr/local/etc/ices.conf.dist to
/usr/local/etc/ices.conf, modify it to suit your environment and add:
ices0_enable="YES"
to /etc/rc.conf.
起動できるように。
# vi /etc/rc.conf
ices0_enable="YES"
設定
設定ファイルのコピー。
# cp /usr/local/etc/ices.conf.dist /usr/local/etc/ices.conf
# chmod 644 /usr/local/etc/ices.conf
とりあえず動くように設定する。
# vi /usr/local/etc/ices.conf
最低限
<File>/usr/local/etc/ices-playlist.txt</File>
<BaseDirectory>/var/log/ices</BaseDirectory>
<Hostname>127.0.0.1</Hostname>
<Port>8000</Port>
<Password>password</Password>
設定例
<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
<Playlist>
<!-- This is the filename used as a playlist when using the builtin
playlist handler. -->
<File>/usr/local/etc/ices-playlist.txt</File>
<!-- Set this to 0 if you don't want to randomize your playlist, and to
1 if you do. -->
<Randomize>1</Randomize>
<!-- One of builtin, perl, or python. -->
<Type>builtin</Type>
<!-- Module name to pass to the playlist handler if using perl or python.
If you use the builtin playlist handler then this is ignored -->
<Module>ices</Module>
<!-- Set this to the number of seconds to crossfade between tracks.
Leave out or set to zero to disable crossfading (the default).
<Crossfade>0</Crossfade>
-->
</Playlist>
<Execution>
<!-- Set this to 1 if you want ices to launch in the background as a
daemon -->
<Background>1</Background>
<!-- Set this to 1 if you want to see more verbose output from ices -->
<Verbose>0</Verbose>
<!-- This directory specifies where ices should put the logfile, cue file
and pid file (if daemonizing). Don't use /tmp if you have l33t h4x0rz
on your server. -->
<BaseDirectory>/var/log/ices</BaseDirectory>
</Execution>
<Stream>
<Server>
<!-- Hostname or ip of the icecast server you want to connect to -->
<Hostname>127.0.0.1</Hostname>
<!-- Port of the same -->
<Port>8000</Port>
<!-- Encoder password on the icecast server -->
<Password>password</Password>
<!-- Header protocol to use when communicating with the server.
Shoutcast servers need "icy", icecast 1.x needs "xaudiocast", and
icecast 2.x needs "http". -->
<Protocol>http</Protocol>
</Server>
<!-- The name of the mountpoint on the icecast server -->
<Mountpoint>/example</Mountpoint>
<!-- The name of the dumpfile on the server for your stream. DO NOT set
this unless you know what you're doing.
<Dumpfile>example.dump</Dumpfile>
-->
<!-- The name of you stream, not the name of the song! -->
<Name>Example</Name>
<!-- Genre of your stream, be it rock or pop or whatever -->
<Genre>Other</Genre>
<!-- Longer description of your stream -->
<Description>Example Streaming server</Description>
<!-- URL to a page describing your stream -->
<URL>http://example.com:8000/</URL>
<!-- 0 if you don't want the icecast server to publish your stream on
the yp server, 1 if you do -->
<Public>0</Public>
<!-- Stream bitrate, used to specify bitrate if reencoding, otherwise
just used for display on YP and on the server. Try to keep it
accurate -->
<Bitrate>128</Bitrate>
<!-- If this is set to 1, and ices is compiled with liblame support,
ices will reencode the stream on the fly to the stream bitrate. -->
<Reencode>1</Reencode>
<!-- Number of channels to reencode to, 1 for mono or 2 for stereo -->
<!-- Sampe rate to reencode to in Hz. Leave out for LAME's best choice
<Samplerate>44100</Samplerate>
-->
<Channels>2</Channels>
</Stream>
</ices:Configuration>
ファイル名を UTF-8 に変換
プレイリストを作成する前にファイルの文字コードを変換します。
事前に converters/convmv の導入が必要です。
通常でしたら EUC-JP なファイル名かと思いますが、一応 Shift-JIS を変換する方法も載せておきます。
- EUC-JP to UTF-8
# convmv -r -f euc-jp -t utf-8 /share/Music/MP3/
- Shift-JIS to UTF-8
# convmv -r -f sjis -t utf-8 /share/Music/MP3/
これは変換後どのようになるのか表示されるだけですので、実際に変換は行われません。
実際に変換を行う場合は最後に –notest を付けます。
- EUC-JP to UTF-8
# convmv -r -f euc-jp -t utf-8 /share/Music/MP3/ --notest
- Shift-JIS to UTF-8
# convmv -r -f sjis -t utf-8 /share/Music/MP3/ --notest
プレイリストの作成
次はプレイリストを作成します。
# find /share/Music/MP3/*.ogg | nkf -w > /usr/local/etc/ices-playlist.txt
これを定期的に cron で回せば CD 買ってきてエンコ→アップでプレイリストに追加されていきます。
起動
起動してみる。
# /usr/local/etc/rc.d/ices0 start
プロセスが上がってるか確認する。
# ps -auxww | grep ices
icecast の時に開いたページで ices の情報が表示されれば成功。
シグナル
ices がサポートしているシグナルの一覧。
- SIGINT
- ices を終了する
- ices を終了する
- SIGHUP
- ices の再起動。プレイリストとログファイルを開きなおす。
- ices の再起動。プレイリストとログファイルを開きなおす。
- SIGUSR1
- 現在のトラックスキップして次のトラックを再生する
- 現在のトラックスキップして次のトラックを再生する
シグナルの送り方。
# kill -USR1 `cat /var/log/ices/ices.pid`
phpとかに組み込んだりする場合はどうするんだろう?
ログローテーション
logrotate を導入している場合は下記のページを参考に logrotate の設定を行えばログローテーションされる。
感想
大体使ってみた感じ、日本語タグの文字化けさえなんとかなれば普通に使えそうな感じ。
Web 画面では正常に表示されるのでプレイヤー側の問題かなぁと思うんですが・・・。
それと ices は複数起動ができるので ( 設定ファイルとプレイリストも個別に用意 ) 例えば洋楽のみとか邦楽のみ、マイベストストリーミングとかもできます。
ただ、その場合は rc スクリプトを書き換えないとダメっぽいです。
エンコードソフト
- CD 取り込みは EAC がお勧め
- MP3 エンコードでは沢山ソフトがあるのでお好きなものを
- Vorbis エンコードでは aoTuV が鉄板らしい
Lame ( MP3 )
- Sound Player Lilith から lame でエンコード
"--preset" "cd" "-q" "0" "%FilePath%%FileName%%FileExt%" "--add-id3v2" %#"--tt" "%>%Title%" %<"--ta" "%>%Artist%" %<"--tl" "%>%Album%" %<"--ty" "%>%Date%" %<"--tc" "%>%Comment%" %<"--tg" "%>%Genre%" %<"--tn" "%>%Track%" %<"%FilePath%%Title%.mp3"
aoTuV ( Vorbis )
- Q4 ( 128kbs ) でエンコードしても全然聞ける
- 気になるなら Q6 ( 160kbs ) でどうぞ