Ustream の放送を録画する

さて、 Ustream の放送を rtmpdump をつかって録画してみます。録画済みのものではなく中継されているものです。

(追記:続 Ustream の放送を録画する書きました。)

必要な情報の収集

Ustream の中継動画の各種情報の取得については Ustream の動画情報 - 見上げれば、空 に書きました。それでは AMF ファイルの packet['message'][0]['value'] をみていきます。

status が "online" ならば中継が行われており、 streamId や streamName などが存在します。また配信されている URL ですが、中継によって cdnUrl のときと fmsUrl のときとその両方が存在するときがあります。

cdnUrl があるときは、多くの場合 cdnUrl には rtmp://ustreamlivefs.fplive.net/ustreamXlive-live/ であり、 streamName には stream_live_1_1_cid ときます。ただし、たまに異なる形式のときがあります。

fmsUrl があるときは、 fmsUrl には rtmp://flashXX.ustream.tv/ustreamVideo/cid で、 streamName には streams/live であることがほとんどです。これもたまに別のもののときがあります。

cdnUrl と fmsUrl の両方があるときは、 cdnUrl の形式で streamName が記述されるようです。

保存

$ rtmpdump -v -s swfUrl -r cdnUrl/streamName -o output.flv
$ rtmpdump -v -s swfUrl -r cdnUrl -y streamName -o output.flv

$ rtmpdump -v -s swfUrl -r fmsUrl/streamName -o output.flv
$ rtmpdump -v -s swfUrl -r fmsUrl -y streamName -a appName -o output.flv

ここで swfUrl はフラッシュのアドレスを記述します(後述)。

appName は fmsUrl のパスの部分を指定します。多くの場合には "ustreamVideo/cid" と記述することになります。

swfUrl

検索すると swfUrl には http://static-cdn1.ustream.tv/swf/live/viewer.rsl:123.swf とか http://cdn1.ustream.tv/swf/4/viewer.rsl.558.swf といった文字列が与えられていて、どれが正しいのかわかりませんが、見ていると決め打ちでもいいような感じです。

ちゃんと求めようとすると、 Ustream API のチャンネルの getInfo の embedTagSourceUrl を利用すると取得できるようです。

たとえば nasa-hd-tv の embedTagSourceUrl は http://www.ustream.tv/flash/live/1/6540154 ですが、このアドレスにアクセスすると http://static-cdn1.ustream.tv/swf/live/viewer:95.swf?cid=1/6540154&vrsl=c:334 にリダイレクトされます。

このリダイレクト先の URI からクエリを削除すればおそらく swfUrl として使ってよいと思われます。サーバも多くの例と同じですし、実際に配信用のフラッシュファイルとして使われていますので。

リダイレクト先は、プログラムでは HTTP のレスポンスヘッダの Location フィールドをみれば取得できます。

その他のオプション

情報を探していると、割と使われていたオプションを挙げておきます。

-f PLAYER_VERSION
フラッシュプレイヤのバージョンを指定します。 man でデフォルトを調べると、うちでは "LNX 10,0,32,18" でした。実際にインストールされているものは、埋めこまれたフラッシュを右クリックして表示されるメニューや Adobe - Flash Player でわかります
-p PAGE_URL
動画が埋めこまれていたページのアドレスを指定します
-q
rtmpdump が静かになります

mplayer で視聴する

応用編(?)として rtmpdump でダンプした動画を保存せずに mplayer で見てみます。

$ rtmpdump -v -s "http://static-cdn1.ustream.tv/swf/live/viewer:95.swf" -r "rtmp://ustreamlivefs.fplive.net/ustream2live-live//stream_live_1_1_6540154" -q -o - | mplayer -