Icecast によるストリーミング
Icecast はネットワーク上で音声や動画などのメディアをストリーミングするためのプログラムです。Icecast サーバーに接続できる様々なクライアントが存在し、「マウントポイント」を作成したり、サーバーを制御したり、流されている音声を視聴したりすることができます。
Icecast は同時に多数の音声ストリームをストリーミングすることができます。各ストリームにはクライアントからアクセスするための「マウントポイント」が存在し、通常は以下のようなネットワーク URI を使います:
http://server:8000/mpd.ogg.m3u
上記の URL は "mpd" という名前のマウントポイントを参照しています。
目次
Icecast のインストール
icecast パッケージをインストールしてください。もしくは icecast-khAUR パッケージをビルド・インストールしてください。Icecast-kh (Karl Heyes) は次の公式リリースにマージされる予定の機能が追加されています。
インストールしたらテキストエディタで設定ファイル /etc/icecast.xml
を開いてください。特に注意が必要なセクションは <authentication> です。<authentication> ブロックには icecast で使用するパスワードを設定します。デフォルト設定から変更することを強く推奨します。
Icecast はデフォルトではポート 8000 を使用します。必要であれば変更してください。
icecast 2.3.2-4 からデーモンは nobody ユーザーで実行されるようになりました。Icecast-kh はデフォルトで icecast ユーザーで実行されます。変更したい場合は <changeowner> セクションの設定を見てください。
Icecast のパス
ローカルユーザー
ローカルユーザーで icecast を実行する場合、/etc/icecast.xml
が使用できないため /usr/share
から icecast web の xml ファイルをコピーする必要があります:
$ cp -R /usr/share/icecast/web ~/icecast/
コピーしないと XSLT に関するエラーが表示されウェブインターフェイスが機能しません。また、<changeowner> セクションをコメントアウトして、root 権限を必要とするプロセスの所有者を変更してください。
Icecast の起動
以下のコマンドを実行することでシングルユーザーで Icecast を起動できます:
# icecast -b -c /etc/icecast.xml
ターミナルのフォアグラウンドで icecast を実行したい場合、-b
フラグを外してください。
システムデーモンとして icecast を実行する場合、icecast.service
systemd ユニットを起動してください。システムの起動時に自動的に実行したい場合は、ユニットを有効化してください。
ウェブブラウザで http://localhost:8000/ を開くことで Icecast が動作しているか確認できます。Icecast2 のステータスページが表示されるはずです。もしくは以下のコマンドを実行してみてください:
# systemctl status icecast
MPD によるストリーミング
MPD はデーモンプロセスを使って音楽を再生するプログラムです。使いやすい音楽データベースやプレイリストが組み込まれており、様々なフロントエンドが存在します。
MPD とクライアントのインストール
Music Player Daemon の記事を読んで MPD とクライアントをインストール・設定してください。
Icecast の実行
先に Icecast を起動してください。上の #Icecast の起動を参照。
Icecast のソースとして MPD を設定
/etc/mpd.conf
を編集して、以下を追加して Icecast の audio_output を有効にしてください:
audio_output { type "shout" encoding "ogg" name "my cool stream" host "localhost" port "8000" mount "/mpd.ogg" # This is the source password in icecast.xml password "hackme" # Set either quality or bit rate # quality "5.0" bitrate "64" format "44100:16:1" # Optional Parameters user "source" # description "here is my long description" # genre "jazz" } # end of audio_output # Need this so that mpd still works if icecast is not running audio_output { type "null" name "fake out" }
MPD の起動
MPD を起動してください。
ストリームを使う
以下のことを行うクライアントが必要です:
- MPD サーバーに接続してサーバーを制御する。
- ストリームに接続して音楽を再生する。MPD サーバーに接続しても Icecast サーバーの出力を変えることはできますが音楽は聞けません。
Sonata (グラフィカルな mpd クライアント) や mplayer (コマンドラインクライアント) がクライアントとして使用できます。mplayer を使用する場合、リモートの mpd サーバーを制御する別の手段が必要になります (例えば ssh など)。
MPD
別の mpd インスタンスから icecast のストリームを再生することができます。
mpc を使って mpd のプレイリストの url を追加してください:
$ mpc add http://ip.of.server:8000/mpd.ogg.m3u
ローカルの mpd インスタンスと同じようにストリームを再生することが可能です。
Sonata
- sonataAUR パッケージをインストール。
- 起動して Sonata の設定を開く。
- 'Name' をサーバーの名前に設定。
- 'Host' をサーバーの IP アドレスに設定。
- 'Port' を '6600' に設定。
- '+' をクリックしてローカルコンピュータの設定を同じように追加。
- 右クリックして 'Connections' からサーバーを選択。そして 'Library' タブをクリック。上手く行けば、サーバー上の音楽コレクションが表示されるはずです。フォルダを右クリックして 'Add' を選択してください。'Current' タブをクリックすると現在のプレイリストが表示されます。ライブラリから選択したフォルダの中身が表示されるはずです。曲をダブルクリックすると、テキストが太字になりプログレスバーが表示されます。ただし何も聞こえません。
- 右クリックして 'Connections' からローカルコンピュータを選択してください。そして 'Streams' タブをクリックします。右クリックして 'New' を選択してください。'Stream Name' にサーバーの
/etc/mpd.conf
ファイルの audio_output { } セクションの名前を入力して URL をサーバーの IP アドレス:8000/mpd.ogg.m3u
としてください。そしてストリームをダブルクリック。 - 'Current' タブをクリックするとストリームの URL が表示されます。ダブルクリックするとしばらくしてからサーバーで選択した曲が聞こえてくるはずです。
MPlayer
$ mplayer -playlist http://ip.of.server:8000/mpd.ogg.m3u
同一マシンで ssh サーバーを動作させている場合、リモートの mpd サーバーにログインしてから ncmpcpp を使って制御できます。
また、MPD サーバーがアクセス可能なインターフェイス・ポートを使っている場合 (MPD マシンで $ ss -p -l -t
を実行したときに 0.0.0.0 を listen していると表示される場合など)、MPD_HOST 変数を設定して mpc などのローカルクライアントからリモートサーバーを指定できます:
$ export MPD_HOST=ip.of.server $ export MPD_PORT=6600 # optional $ mpc play
oggfwd と ffmpeg2theora によるストリーミング
シングルトラックをストリーミングしたい場合、以下の方法が使えます:
- ffmpeg2theora と oggfwdAUR パッケージをインストールしてください。
- 以下のように設定済みのファイルを使って icecast を起動 (もしくは systemd ユニットの
icecast
を起動):
$ icecast -c path/to/config.xml
- ffmpeg2theora を起動して oggfwd に出力し、icecast サーバーに転送:
$ ffmpeg2theora --no-skeleton --novideo -o - path/to/audio/file | \ oggfwd localhost 8000 source_password_here /mountpoint_name_here.ogg
もしくは、以下のスクリプトを使用することもできます:
#!/bin/sh if [ $# -eq 1 ] then music="$1" else echo "Usage: $0 music-file" exit 1 fi pass="source_password" mountpt="mount_point_name" set -e ffmpeg2theora --no-skeleton --novideo -o - "$music" 2> /dev/null | \ oggfwd localhost 8000 "$pass" /"$mountpt".ogg
参照
- MPD Wiki: Configuration
- [1] - oggfwd and ffmpeg2theora howto.