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 -
参考とさせていただきました
- rtmpdump に関して
- embedTagSourceUrl のリダイレクト