Icecast によるストリーミング

提供: ArchWiki
移動先: 案内検索

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 には HTTP ストリーミング機能が存在するため、Icecast と組み合わせる必要は必ずしもありません。詳しくは Music Player Daemon/ヒントとテクニック#HTTP ストリーミングを見てください。

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 を起動してください。

ストリームを使う

以下のことを行うクライアントが必要です:

  1. MPD サーバーに接続してサーバーを制御する。
  2. ストリームに接続して音楽を再生する。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

  • sonata パッケージをインストール
  • 起動して 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 パッケージをインストール
  • 以下のように icecast のプレイリストを指定して起動 (プレイリストは mplayer を mpd.ogg に転送します):
$ 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 によるストリーミング

シングルトラックをストリーミングしたい場合、以下の方法が使えます:

  • 以下のように設定済みのファイルを使って 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

参照