RTMPDUMPによるストリーミングデータのダウンロード
March 3, 2011 – 3:00 pm10日ほど前にradikoをRTMPDUMPを用いて録音(ストリーミングデータのダウンロード)する方法についてみた(ここ)。これをもとに、RTMPDUMPの使用法についてさらに検討を加えた。検討の結果から得られたCentOS上でRTMPDUMPを使用する際に役立ちそうな情報を簡単にメモしておいた。
RTMPDUMPに必要な諸パラメータの取得: RTMPDUMPによりストリーミングデータをダウンロードしようとすると、当然のことながら、RTMPサーバー、放送内容ごとに夫々特有の諸パラメータを知らなければならない。こうしたパラメータは、RTMPSUCKにより取得することができる。
RTMPSUCKによるパラメータ取得は次の手続きにより行える:
- RTMPSUCKを動作させるための新規ユーザー(仮にrtmpuserとする)の作成
- RTMPストリーミング(port: 1935)を iptables により上で作成したユーザー(rtmpuser)向けにREDIRECTする
iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner rtmpuser -j REDIRECT
rtmpuserのセッション内でRTMPSUCKを実行。これによりRTMPストリーミングの取り込みを待つ状態となる。
[rmptest@localhost rtmpdump-2.3]$ ./rtmpsuck RTMP Proxy Server v2.3 (c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL Streaming on rtmp://0.0.0.0:1935
- ブラウザ上で録音対象とするサイトにアクセスし、ラジオの聴取を開始する。RTMPSUCKにより放送内容のダウンロードが開始される。ダウンロードに先立ちRTMPストリーミングが解析され、聴取対象としているRTMPサーバー関連の諸パラメータが出力される。以下、BBC World Serviceに聴取した際の出力例を示す。
[rmptest@localhost rtmpdump-2.3]$ ./rtmpsuck RTMP Proxy Server v2.3 (c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL Streaming on rtmp://0.0.0.0:1935 WARNING: Trying different position for client digest! Processing connect app: live?_fcs_vhost=wsliveflash.bbc.co.uk&undefined flashVer: LNX 10,2,152,27 swfUrl: http://www.bbc.co.uk/emp/10player.swf?revision=18269_21576 tcUrl: rtmp://61.113.95.180:1935/live?_fcs_vhost=wsliveflash.bbc.co.uk&undefined pageUrl: http://www.bbc.co.uk/worldservice/audioconsole/?stream=live Playpath: eneuk_live@6512 Saving as: eneuk_live@6512 INFO: Metadata: INFO: author BBC World Service INFO: copyright (C)2011 British Broadcasting Corporation INFO: title BBC World Service - EIEUK network INFO: presetname Custom INFO: creationdate Thu Feb 24 05:57:06 2011 INFO: audiodevice AES-32 (5+6) INFO: audiosamplerate 48000.00 INFO: audiochannels 2.00 INFO: audioinputvolume 32.00 INFO: audiocodecid mp4a INFO: audiodatarate 64.00
ダウンロード用Shell Script: 上記した方法で取得したパラメータを組み込んだダウンロード用Shell Scriptを作成した。このShell Scriptでは、首都圏内で聴取できる放送局、BBC World Serviceがダウンロード対象とされ、ダウンロード後ffmpegによりmp3にエンコードし、/directory/audioに保存される。
rtmpshell:
#!/bin/sh date=`date '+%Y-%m-%d-%H:%M'` echo "date = ${date}" DURATION=`expr ${2} \* 60` if [ "${1}" = "TBS" -o "${1}" = "QRR" -o "${1}" = "LFR" -o "${1}" = "NSB" -o "${1}" = "INT" -o "${1}" = "FMT" -o "${1}" = "FMJ" ]; then app="${1}/_defInst_" S1="rtmpe://radiko.smartstream.ne.jp:1935/"$app S2="simul-stream?ucid=e2c944e4b0c9846634d8be1fe3f4a8bb" S3="http://radiko.jp/player/swf/player_2.0.1.00.swf" S4="http://radiko.jp/player/player.html#${1}" S5=$app S6="LNX 10,2,152,27" elif [ "${1}" = "BBC" ]; then S1="rtmp://61.113.95.180:1935/live?_fcs_vhost=wsliveflash.bbc.co.uk&undefined" S2="eneuk_live@6512" S3="http://www.bbc.co.uk/emp/10player.swf?revision=18269_21576" S4="http://www.bbc.co.uk/worldservice/audioconsole/?stream=live?_fcs_vhost=wsliveflash.bbc.co.uk&undefined" S5="live?_fcs_vhost=wsliveflash.bbc.co.uk&undefined" S6="LNX 10,2,152,27" else exit fi /opt/rtmpdump-2.3/rtmpdump --rtmp "$S1" --playpath "$S2" --swfUrl "$S3" --pageUrl "$S4" --app "$S5" --flashVer "$S6" --live --stop $DURATION -o "/tmp/${1}_${date}" ffmpeg -y -i "/tmp/${1}_${date}" -acodec libmp3lame "/directory/audio/${1}_${date}.mp3" rm "/tmp/${1}_${date}"
このShell Scriptではふたつの引数(放送局ID、時間(単位:分))を用いている。例として、BBC World Service(放送局ID:BBC)を10分間にわたってダウンロードしようとする場合、次のようなコマンドを用いればよい:
#rtmpshell BBC 10
定時で定期的にダウンロードしようとする場合、コマンドをcrontabを使ってスケジューリングすればよい。
以上、簡単なメモ。
2 Trackback(s)