Gentoo/Linuxで高品質Ustream配信するよ!
どのくらい高品質なのか
下のコマンドでデスクトップをキャプチャした程度の画質になります
ffmpeg -r 20 -s 768x480 -f x11grab -i :0.0 -f alsa -i default \ -acodec libmp3lame -vcodec libx264 -b 300k -ar 22050 -ab 48k \ -threads 4 -vsync 1 -y -f flv out.flv
Linuxで高品質配信したっていいじゃない!
そもそもデフォルトの配信はFlash Playerでごにょごにょやってるようですが,
そいつがうまく動いてくれてない(高画質配信に対応してない?)んだと思います.
Windows/Mac用にはのFlash Media Live Encoderっていうのがあるらしいんですが,
Linux用は用意されていません.
そこで,Flash Playerで配信しようとするのを,やめます!!
Ustreamにはrtmpというプロトコル(ストリーミング配信用のやつ?)が用意されています.
Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、 Adobe Flash プレーヤーとサーバーの間で、音声・動画・データを やりとりするストリーミングのプロトコル。元々は Macromedia が開発 していて、Adobe に買収された。プロトコルの仕様は公開されている。 (Wikipediaより)
なるほど.こいつを使えばいいのですな.
幸いなことに,ffmpegはこのrtmpを使ってエンコードしたデータを送信することができるらしいです.
方法
そこで,とりあえずrtmpで送信できるようにffmpegをコンパイルします.
Ubuntuとかの人は多分デフォルトのままで大丈夫らしいです.
USE="rtmp network" emerge -av ffmpeg
おもむろにEnterをッタターンッっとたたいたら,
- Ustreamのサイトにアクセスします.
- 自分のアカウントのダッシュボードにいく
- 番組設定→詳細設定→「Flash Media Live Encoder のXMLファイルをダウンロード」をクリック
- DLしたxmlファイルの中身をみる
<output> <rtmp> <url>rtmp://1.8765432.fme.ustream.tv/ustreamVideo/1234567</url> <backup_url></backup_url> <stream>e6a578cf852511312f8792408dd433a5offair</stream> </rtmp> </output>
みたいなところがありますね!
この
rtmp://1.8765432.fme.ustream.tv/ustreamVideo/1234567/e6a578cf852511312f8792408dd433a5offair flashver=FME/3.0\20(compatible;\20FMSc/1.0)
とりあえず,Ustreamのライブ配信ページにアクセスしましょう!
Webカメラとかにアクセスしてもいい?とか聞かれますが,
めんどくさいので全部「お断りしますっ(キリッ」と答えます.
ここで配信ページにアクセスしないとデータが送れない可能性があったりなかったりするみたいです.
さぁ,ffmpegでエンコードしたデータをここに送りますよ!さっき作ったURI使うよ.
ffmpeg -r 20 -s 768x480 -f x11grab -i :0.0+100,200 -f alsa -i default -acodec libmp3lame \ -vcodec libx264 -b 300k -ar 22050 -ab 48k -threads 4 -vsync 1 -y \ -f flv 'rtmp://1.8765432.fme.ustream.tv/ustreamVideo/1234567/e6a578cf852511312f8792408dd433a5offair flashver=FME/3.0\20(compatible;\20FMSc/1.0)'
ffmpegのオプションはなんかてけとーに調整してくだしあ
ちょっとだけ解説します.
- -r 20 : フレームレートです.今回は20fpsだよ!
- -s 768x480 : サイズです.でっかくできるよ!
- -f x11grab -i :0.0+100,200 : デスクトップをキャプチャするよ!
- +100,200 は,画面の左上からx=100px,y=200pxのとこがキャプチャの左上になるよ!
- -f video4linux2 -i /dev/video0 とかにするとWebカメラからとるよ!
- -f alsa -i default : デフォルトのオーディオソースつかうよ!
- -threads 4 : 4スレッドでエンコードするよ!
- -f flv 'rtmp://... : rtmpでustreamに送信するよ!
おもむろにEnterをッタターンッと叩いたら,たぶんエンコードとかはじまると思います.
Stream mapping: Stream #0.0 -> #0.0 Stream #1.0 -> #0.1 Press [q] to stop, [?] for help frame=79187 fps= 20 q=12.0 size= 139953kB time=01:05:56.82 bitrate= 289.8kbits/s dup=106 drop=12
多分右の方に「なんかサーバにデータが届いてるよ!」的なボタンがあるので,そいつをクリックします.
あら不思議!自分のデスクトップが映っているじゃありませんか!
すてきですね!!