RTMPDUMPによるストリーミングデータのダウンロード

March 3, 2011 – 3:00 pm

10日ほど前に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を使ってスケジューリングすればよい。

以上、簡単なメモ。


  1. 2 Trackback(s)

  2. Jun 6, 2011: RTMPDUMPによるradikoの録音 | Yama's Memorandum
  3. Oct 28, 2011: 自宅サーバー構築・覚書きリスト | Yama's Memorandum

Post a Comment