Skip to content

Instantly share code, notes, and snippets.

@oh-sky
Forked from tondol/nicovideo_rtmpe.md
Created April 13, 2014 09:46
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save oh-sky/10576857 to your computer and use it in GitHub Desktop.
## STEP0. はじめに
http://www.nicovideo.jp/watch/1380872606
上記の動画を例にDL方法を解説する
## STEP1. パラメータの取得
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として使う
## STEP 2. ダウンロード
必要なパラメータを変数に設定しておく
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%に到達すればダウンロード完了となる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment