http://www.nicovideo.jp/watch/1380872606
上記の動画を例にDL方法を解説する。
http://flapi.nicovideo.jp/api/getflv/1380872606
上記URLをログインした状態(Cookieが設定されている状態)でGETする。 クエリ文字列がレスポンスとして得られる。 これをkeyとvalueに分割してURLデコードすることで連想配列を得る。
今回の例では、
urlキーの値 rtmpe://smile-chefsf.nicovideo.jp/smile?m=mp4:21968710.95779
の内、
smile-chefsf.nicovideo.jp
をHOSTとして、
rtmpe://smile-chefsf.nicovideo.jp/smile
をTC_URLとして、
mp4:21968710.95779
をPLAYPATHとして使う。
また、fmstキーの値1382088230:272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3
の内、
コロンで区切られた左側部分 1382088230
をFMST_2として、
右側部分 272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3
をFMST_1として使う。
必要なパラメータを変数に設定しておく。 PAGE_URLには対象動画の閲覧URLを与える。 SWF_URLとFLASH_VERについては、rtmpsuckを使って調べた結果をそのまま使っている。 今後、指定すべき文字列が仕様変更で変わることもあるかもしれない。
$ HOST=smile-chefsf.nicovideo.jp
$ TC_URL=rtmpe://smile-chefsf.nicovideo.jp/smile
$ PAGE_URL=http://www.nicovideo.jp/watch/1380872606
$ SWF_URL=http://res.nimg.jp/swf/player/secure_nccreator.swf?t=201111091500
$ FLASH_VER="WIN 11,6,602,180"
$ PLAYPATH=mp4:21968710.95779
$ FMST_1=272c4c4c0a951fd4c79a4b3c5e6a63a9ffcaffd3
$ FMST_2=1382088230
以上のパラメータを与えてrtmpdumpを実行する。
今回使ったrtmpdumpはgit://git.ffmpeg.org/rtmpdump
のソースをコンパイルしたもので、
コンパイル時点でのHEADはコミット番号a9f353c7ccf29d6305e13fedb77653b8681e9fc2
だった。
$ ./rtmpdump \
-l 2 \
-a smile \
-n $HOST \
-t $TC_URL \
-p $PAGE_URL \
-s $SWF_URL \
-f "$FLASH_VER" \
-y $PLAYPATH \
-C S:$FMST_1 \
-C S:$FMST_2 \
-C S:$PLAYPATH \
-o output.flv
うまくいけば、以下の様な出力を得る。 output.flvには途中までダウンロードした結果が保存されているはずだ。
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: You haven't specified a port (--port) or rtmp url (-r), using default port 1935
Connecting ...
INFO: Connected...
ERROR: HandleCtrl: Ignoring SWFVerification request, use --swfVfy!
Starting download at: 0.000 kB
INFO: Metadata:
INFO: duration 1420.03
INFO: moovPosition 28.00
INFO: width 640.00
INFO: height 360.00
INFO: videocodecid avc1
INFO: audiocodecid mp4a
INFO: avcprofile 77.00
INFO: avclevel 31.00
INFO: aacaot 2.00
INFO: videoframerate 29.97
INFO: audiosamplerate 48000.00
INFO: audiochannels 2.00
INFO: tags:
INFO: cprt-und SMILEVIDEO_MP4
INFO: trackinfo:
INFO: length 85201116.00
INFO: timescale 60000.00
INFO: language und
INFO: sampledescription:
INFO: sampletype avc1
INFO: length 68161536.00
INFO: timescale 48000.00
INFO: language und
INFO: sampledescription:
INFO: sampletype mp4a
11399.523 kB / 117.22 sec (8.2%)
ERROR: RTMP_ReadPacket, failed to read RTMP packet header
12335.273 kB / 124.59 sec (8.7%)
Download may be incomplete (downloaded about 8.70%), try resuming
ダウンロードが不完全なので、
パラメータに -e
を加えて何回かrtmpdumpを実行する。
パーセンテージが100%に到達すればダウンロード完了となる。