このページの記事は、既に旧くなっている。ただし、Shout castについては、2012年現在でもあまり変わっていないので、挑戦してみていただきたい。

Streaming MP3

Streaming MP3とは何かというと、いわゆるMpeg2レイヤー3の音楽ファイルのネットワーク放送・・である。
(これで正しいかはともかくとして、ここではとりあえずこのように定義する。
低ビットレートでの音質は、実はRealmedia-リアルオーディオ-の方がいいのだが、あれは一企業の独自規格だ。
MP3も権利関係で怪しいところがあるが、完全フリーの ogg vorbis は、RFC化されたとはいえ普及しているとは言い難く、
やっぱしMP3ということになってしまうのである)

SHOUTcast

Streaming MP3を実現するのに一番簡単なのは、SHOUTcast を使う方法だろう。

SHOUTcastサーバのソフトウエアは、営利目的での使用でなければ、無償で利用できるようだ。
(かつて公開されていたバージョン1.8.9には、セキュリティホールがあったが、FIXされた新版が出ている)

SHOUTcast DNAS
http://www.shoutcast.com/broadcast-tools
FreeBSD 4.x 版もあるし、Linux用のほか、いつのまにかWin32GUI版も揃っている。

*実験ではFreeBSD用の1.9.4を使った。以下はすべて1.9.4を想定した記述である。1.9.5では問題なく動作したが、現行バージョンの1.9.8でも完全に同じかどうかは検証していない。*
また、FreeBSD最新バージョンの 7.1-RELEASEでは、「libpthread.so.1が無い」とかいうエラーが出て動かないが、/usr/ports/misc/compat5x を make installすることでとりあえず動くことは確認している。

起動は、sc_servがあるディレクトリで、次のコマンドを投入。

% ./sc_serv

サーバセットアップ方法は次のURLにある。(「Setting up a server is easy as 1,2,3」だそうだ)
http://www.shoutcast.com/download

設定ファイル(sc_serv.conf)は、はっきりいってMP3ソースUP用のパスワード(Password:)くらいしかいじるところがない。(sc_serv と同一ディレクトリに置く。1.9.8でも 1.9.4のときの confファイルがそのまま使えた)

ソース(MP3ファイル)のUPは、WinAmpでおこなうが、下記のDSPプラグインが必要となる。

SHOUTcast DSP Plug-In for Winamp http://www.shoutcast.com/broadcast-tools

このプラグイン一つで、マイク入力を併用(Mix)してDJみたいなこともできてしまう。
DSPプラグインの設定はGUIなので、感覚的に判ると思う。ゆえに、ここでは解説しない。

受信には、RealPlayer か Winamp が必要だ。これらのソフトのURL指定で、例えば「www.zcr.jp:8883」とか入力する。「8883」というのは、sc_serv.confの「PortBase=」で設定したポート番号である。(デフォルトでは、別の数字になっている。適当に変更が可能)

なお、ブラウザで同一URLに接続すると、演奏曲の履歴や、現在演奏中の曲目等が参照できる。



Icecast

前述のとおり、以前のSHOUTcast(v1.8.9)にはセキュリティホールがあったため、サーバ・ソフトを Icecast に変更してみた。
Icecastは、SHOUTcastから派生したもので、もともとは同じコードだと思われる。そのせいか、設定ファイル等、非常に似ている。

Icecast自体は、いろいろなサーバから入手できるため、ダウンロードURLは特に記さない。
実験に使用したのは、icecast-1.3.12。(icecast-1.3.12.tar.gz というファイル名でパッケージ化されている。Windows版があるかどうかは知らない。・・でも、たぶんある?・・ なお、このVersionは既にサポート対象外となっていて、現在は、Icecast2.0系 〜ogg vorbisのストリーミングにも対応〜 がリリースされている)

設定ファイルは、1.3.12にバージョンアップしたら増えてしまったらしい(セキュリティ絡みか?)。4つあるが、全部 conf ディレクトリに置く。

icecast.conf
users.aut
groups.aut
mounts.aut
もちろん、パスワード無しでもできる・・とは思うが・・試してない・・(^^;

UNIX系OSでの起動は次のごとく、-c で設定ファイルを、-b でデーモン(バックグラウンド)動作を指定する。「-b」を指定しなければ、コンソールモードになる(shutdown で終了)。なお、「-b」は最後に指定しないと、なぜか無視されてしまうみたい。

% /usr/local/icecast/bin/icecast -c /usr/local/icecast/conf/icecast.conf -b

Icecastサーバを起動しおいて、ブラウザで例えば http://www.zcr.jp:8883/list.cgi にアクセスすると、 演奏中の曲名等の情報が表示される。(しつこいけど、「8883」ってのは、icecast.conf内で指定したポート番号ね)
ストリーミング受信するには、list.cgi のページの「Mount」のLINKを辿るか、WinAmp等で直接「サーバ名:ポート番号・・例えば www.zcr.jp:8883」を指定する。
実験では、パスワード照合してOKのユーザのみ聴取可能にしたため、ここで「ID:パスワード」の入力要求が来る。

なお、list.cgiで表示されるページはカスタマイズ可能で、実験では次のような templates を用意した。

mountlist.html
list_directory.html
bodytag.html
header.html
info.html
これらは、すべて templates ディレクトリに置く。(他のファイルはデフォルトのまま使用)

Icecast/SHOUTcastサーバでできること

  1. WinAmpのプレイリストをえんえんと放送可能。
  2. もちろん、マイクその他の入力を使ってライヴ(リアルタイム)でDJみたいなことも可能。
  3. ファイルリストにあるMP3ファイルを自分で選択してストリームで聴くことも可能。
  4. 当然、ラジオ番組一本ををMP3にまとめておいて、それをえんえんループさせることも可能。
  5. さらに、Web-Chat等と組み合わせればリクエスト番組も可能。
  6. サーバに接続できるのであれば誰でもどこからでも放送可能。(ただし、パスワードが必要)

ストリーミングデータのUP

Windows環境からIcecastサーバにストリーミングデータをUPするためには、以下のソフトが必要だ。

WinAmp5
http://www.winamp.com/media-player/japanese

LAME 3.9*エンコーダ(lamewin32.exe中のlame_enc.dll)
http://www.mp3-tech.org/encoders_win.html
lame_enc.dllを Winamp\Plug-ins\ のフォルダにCOPY

Oddcast DSP Plug-in (dsp_oddcast_*.exe)
http://www.oddsock.org/tools/dsp_oddcast/ 当然WinAmpのインストール後にインストールする。WinAmpのDSP/Effectの設定でOddcast DSPを指定。WinAmp5でもOK。
(SHOUTcast用のプラグインでは、ヘッダ形式が異なるため、接続できない)

WinAmpのプレイリストをえんえんストリーミングするだけなら、この3つがあれば可能。(マイク/ライン入力を使うには、さらに技が必要で、http://www.ladio.net/housou401/housou401.html ここらへんが参考になるだろう。



帯域幅の問題

サーバ負荷はあまり気にしなくてもいいようだ(DSPプラグインでエンコードする負荷の方が大きい)が、回線の帯域幅が問題になる。
例えば、MP3をまあまあそれなりの音質にしたいならば、少なくとも96kbpsくらいでエンコードする必要があるが、そうするとADSL8Mでは、上りの速度(帯域幅)上限が1Mbps未満(実質800kbps程度?)なので、1024/96=10.666で、同時接続数上限が10程度に制限されてしまう。

もちろん、普通のISDN64Kでは、96kbpsエンコードの音は飛びまくって聞けないため、さらにレートを落として56kbpsエンコードにしたとしても、1024/56=18.28で同時に18人しか聴くことができない。
したがって、リアルタイムで多くのクライアントに配信しなければならない場合は、別ネットワーク上に配信サーバを複数準備するなどのテクニックが必要となる。
自前LAN内部ONLYでのストリーミングであれば、10Mbps〜100Mbpsなのでこんなことは気にしなくていいのだが・・・・

(ついでに、ルータを使用してインターネット接続している場合は、icecast.conf内で指定したUDPポートを開けておかないと、インターネット経由でサーバに接続できないので注意)

最近は、P2Pストリーミングなんてテクニックも出てきているが、これってどうなんでしょ??(勉強不足)
PeerCast

「曲名送出機能」の問題

サーバの方で曲名をストリームに乗せる(icecast.conf で、use_meta_data 1 とする)と、WinAmpでは正常に受信できて、曲名も表示できるが、RealPlayerでは、初っぱなの数秒間しか再生できず、実質的に聴取不能になる。
つまり、Icecastの「曲名送出機能(use_meta_data)」は、「WinAmpに特化した機能」であると言わざるをえない。(曲名送出を抑止するには、「use_meta_data 0」とする)

ちなみに、Win95機(CPU=83MHz)で RealPlayer8-BASICと、WinAmp2.81を比較してみた結果は、勝負にならないくらいRealPlayerの方が重い。
RealPlayerの「統計情報」で見ると、パケットは全部受信できているのに頻繁に音飛びが発生する。
これは、おそらくCPU負荷がでかいため、再生が追いつかないのだろう。これに比べて、WinAmpでは、音飛びはまったくない。

そういう事情もあるので、Icecastのストリーミングは、できれば、WinAmpで聴いてほしい・・・と。
やはり、MP3ストリーミング・クライアントの王道はWinAmpということで・・(^^;

なお、曲名送出ONの状態では、WinAmpであれば、バージョン2.81でも3.0でも受信はできるが、曲名表示は3.0ではできないみたい。



サーバの解放

と、いうわけで、www.zcr.jp では、いつでもストリーミングができる態勢になっている。しかし、常時サーバが起動しているわけではない。
問題はコンテンツである。もちろん、著作権の問題もあり、音楽を流す場合は実質的にオリジナル曲等の著作権問題をクリアできているものしか使用できない。
JASRACもロボットを使って違法コンテンツの探索に乗り出しているようである。

その他、前述の帯域幅(同時接続数制限)の問題もあるわけが、ストリーミング(放送)をやってみたい方(ただし地元に限る)は、検討の上、サーバを解放するので、メイルでもいただければと思う。

また、なんかおもしろい使い方があれば、ぜひご教示願いたい。

最後に、文中で例としてあげた「www.zcr.jp:8883」というポートは、あくまでも例であるので、念のため。


Inter-Networking Top | GUITAR | Music Midi included | 音楽CD(CDDA) | JA7KPI | ZCR/bLOG