何をやりたいのかはコマンドから察してください。
Peercastの設定はすでに完了しているものとしています。
構成
・Ubuntu 9.04 からアップグレードした Ubuntu 9.10 (カーネル2.6.31)
・PeercastVP
・SUNTEC RDPC-101 (USB AM/FM tuner)
・SUNTEC RDPC-101 (USB AM/FM tuner) ドライバ カーネルパッチ for Linux (Driver Labo. 製)
1. RDPC-101をLinuxで使えるようにする
まず、以下のような手順でドライバを組み込みます。コンパイル用のディレクトリを作成。
$ mkdir ~/module
$ cd ~/module
$ cd ~/module
カーネルパッチから、radio-rdpc101.cの部分だけを抜き出し、radio-rdpc101.cとして保存する。
ただし、2.6.31系カーネル(新しめのカーネル)のときには
#include <linux/smp_lock.h>
を書き加える必要がある。RDPC-101のカーネルモジュールを作成。カーネルまるまる再構築はめんどくさいのでモジュールだけ。
$ vi Makefile # 内容は「モジュールのみコンパイル」の記事を参照。
$ ls
Makefile radio-rdpc101.c radio-rdpc101.ko .........
$ ls
Makefile radio-rdpc101.c radio-rdpc101.ko .........
モジュールの組み込み。
$ sudo /sbin/modprobe videodev #radio-rdpc101が依存しているので
$ sudo /sbin/insmod radio-rdpc101.ko
$ sudo /sbin/insmod radio-rdpc101.ko
ここでRDPC-101をUSBポートに挿す。
先に変なところで挿しちゃってたら、違うドライバ(radio-si470x)が使われてしまいエラーになる。
そのときは
$ sudo /sbin/rmmod radio-si470x
として、モジュールを除去してから上の作業を行えばOK。再生確認。
$ sudo /sbin/modprobe snd-pcm-oss # alsaの疑似oss機能を追加(/dev/dsp*が作成される)
$ sudo /dev/dsp1 > /dev/dsp
$ sudo /dev/dsp1 > /dev/dsp
ここで、スピーカーから音が聞こえればOK
うちのマシンでは音声が再生されない仕様(?)なので、サウンドレコーダーでラジオを録音したファイルを他PCに転送して再生を確認した。
2. ffmpeg + vlc media player でPeercastにストリーム配信
以下のコマンドでoggストリーミング。
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'
[user],[passwd],[host],[port]は、Peercastへ配信するためのユーザー名、パスワード、Peercastが動いているホスト、ポートを指定する。
[user],[passwd],[host],[port]は、Peercastへ配信するためのユーザー名、パスワード、Peercastが動いているホスト、ポートを指定する。
以上で、配信ができました。
文章量は少ないけど、いろんな試行錯誤で、再生できるまでに缶詰丸5日もかかった。。。
追記
# スピーカーで聞きながら配信
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#duplicate{dst=display,dst=transcode{acodec=vorb,ab=256,channels=2}:std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'
#これだとうまくいかない
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=display,dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#duplicate{dst=display,dst=transcode{acodec=vorb,ab=256,channels=2}:std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'
#これだとうまくいかない
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=display,dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'