現在のニコ生の録画方法は以下を参照。
ニコ生の新配信と録画方法について
以下の記事は旧配信向けで、現在の Flash Player を使わない HTML5 の HLS はこの方法とは異なる。そして、2019年5月23日のメンテナンス以降の配信では使えなくなった。
WebSocket 経由の rtmpならまだ取得できたが、2019年5月30日より視聴期限未定で公開されている過去の公式生放送と現在放送中の公式生放送以外 WebSocket 経由の rtmp は受信できなくなった。
2019年5月23日のメンテナンス以降の配信で getedgestatus で調べられる rtmp は廃止された模様。
ニコ生の録画と配信方法の歴史
2018年12月11日以降に rtmpdump で保存する方法の解説。
タイムシフトを Flash で再生して kakorokuR で保存する
一般的にニコ生と言っても配信者は公式、チャンネル、ユーザーの3タイプと、ライブとタイムシフト(TS)を組み合わせた6種類ある。その中で特殊なコマンド -N が必要になるのは、ユーザー生放送のライブとタイムシフト、チャンネル生放送のライブである。さらに -N を使う場合データはリアルタイム(等速)でしか取得できないので、ユーザー生放送のタイムシフトは放送時間分だけ時間が掛かることになる。Windows 環境では namarokuR, kakorokuR が主流になっているが、現在開発が活発ではないので今後の仕様変更に対応できるかどうかは不明である。
目次
rtmpdump 配布先
-N が使える rtmpdump の配布先
- nht.r.ribbon.to 削除された
- meronpan3419/rtmpdump_nicolive(ソースコードのみ)
- ydixon/rtmpdump-ksv-nicolive: rtmpdump with ksv’s patch(ソースコードのみ)
- rtmpdump[20160215_1949].zip(パッチファイル付き)
- Axfc UpLoader -2786658.zip-(Mac と linux)削除された
新しいニコ生用の rtmpdump
N を使わない新しいニコ生用の rtmpdump と ffmpeg(librtmp)
Gyan の ffmpegは librtmp がないので代わりにお気に入りの動画を携帯で見ようの ffmpeg を使う。
FFmpegダウンロード お気に入りの動画を携帯で見よう
API のアドレス
niconico にログインしていないと getplayerstatus, getedgestatus にアクセスできない。
以下のどれにでもアクセスしてもよい
http://watch.live.nicovideo.jp/api/getplayerstatus?v=lv[id]
http://watch.live.nicovideo.jp/api/getplayerstatus/lv[id]
http://sp.live.nicovideo.jp/api/getplayerstatus?v=lv[id]
http://sp.live.nicovideo.jp/api/getplayerstatus/lv[id]
例
http://watch.live.nicovideo.jp/api/getplayerstatus?v=lv219589296
2018年12月12日の昼以降は getplayerstatus の一部が欠けているので getedgestatus で補う。
https://ow.live.nicovideo.jp/api/getedgestatus?v=lv[id]
getplayerstatus, getedgestatus を1つにする
ライブのときの場合
公式生放送その1
アニメ配信など高画質対応生放送の場合
stream に3つの連番で配信データがあるが数値は固定ではなく、nlari 以外もある。書き換える場所はこの部分と、auth 以下の部分で rtmp://nlakmjpk.live.nicovideo.jp:1935/live の部分は共通。
nlari_01@s12345 416x234 nlari_02@s12346 704x396 nlari_03@s12347 416x234
コマンド例
rtmpdump -vr "rtmp://nlakmjpk.live.nicovideo.jp:1935/live/nlari_02@s12346?auth=dbEagczc.badbcfdSdtbudqbYcYbXdIcfdP-bvsI40-frG-vga-CwDCzp_zyCAmy&aifp=0191210" -o out.flv
rtmpdump -vr "rtmp://nlakmjpk.live.nicovideo.jp:1935/live/<stream><tickets><stream name></stream></tickets></stream>?<stream><tickets><stream></stream></tickets></stream>" -o out.flv
librtmp
mpc-hc "rtmp://nlakmjpk.live.nicovideo.jp:1935/live playpath=nlari_02@s12346?auth=dbEagczc.badbcfdSdtbudqbYcYbXdIcfdP-bvsI40-frG-vga-CwDCzp_zyCAmy&aifp=0191210"
mpc-hc "rtmp://nlakmjpk.live.nicovideo.jp:1935/live playpath=<stream><tickets><stream name></stream></tickets></stream>?<stream><tickets><stream></stream></tickets></stream>"
ffplay -f live_flv "rtmp://nlakmjpk.live.nicovideo.jp:1935/live playpath=<stream><tickets><stream name></stream></tickets></stream>?<stream><tickets><stream></stream></tickets></stream> live=1"
公式生放送その2
tickets に10のストリームがあり来場者数によって受信できるストリームは異なる。1つしかない場合は一番最初が高画質。2つの場合は二番目が高画質。
コマンド例
rtmpdump -vr "rtmp://smilevideo.fc.llnwd.net:1935/smilevideo/s_lv219589296?uid=151356&h=05ae291cd42109d2cb8a12ed4792e950" -o out.flv
rtmpdump -vr "rtmp://smilevideo.fc.llnwd.net:1935/smilevideo/s_lv[id]?<tickets></tickets>" -o out.flv
librtmp
mpc-hc "rtmp://smilevideo.fc.llnwd.net:1935/smilevideo playpath=s_lv219589296?uid=151356&h=05ae291cd42109d2cb8a12ed4792e950"
mpc-hc "rtmp://smilevideo.fc.llnwd.net:1935/smilevideo playpath=s_lv[id]?<tickets></tickets>"
チャンネル生放送
途中から有料生放送の場合は有料になる前でも数分で途切れることが多い。
コマンド例
rtmpdump -vr "rtmp://nlech01.live.nicovideo.jp:1935/liveedge/live_150509_00_1/lv200000000" -N "rtmp://chnl01.ep.live.nicovideo.jp:1935/publicorigin/150509_00_1/,lv200000000?1430000000:30:f2ca0fe957422c14" -C "S:151356:lv200000000:0:1430000000:4150e64db27c979c" -o out.flv
rtmpdump -vr "<rtmp><url></url></rtmp>/lv[id]" -N "<stream><contents_list><contents></contents></contents_list></stream> -C S:<rtmp><ticket></ticket></rtmp>" -o out.flv
ユーザー生放送
チャンネル生放送と同じだがホストが異なる。
コマンド例
rtmpdump -vr "rtmp://nleu13.live.nicovideo.jp:1935/liveedge/live_150509_00_1/lv200000000" -N "rtmp://nlpoca124.live.nicovideo.jp:1935/publicorigin/150509_00_1/,lv200000000?1430000000:30:d3624da642c8f3bf" -C "S:151356:lv200000000:0:1430000000:e742879ae0d3d94f" -o out.flv
rtmpdump -vr "<rtmp><url></url></rtmp>/lv[id]" -N "<stream><contents_list><contents></contents></contents_list></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flv
タイムシフトのときの場合
タイムシフトの場合は <stream><quesheet><que></que></quesheet></stream> の中から、/publish から始まるデータの必要部分だけを抜き出し、複数ある場合もあるのでその都度取得する。
公式生放送
KSV版を使う場合はファイルパス(-y)とレジューム(-e)を指定する必要がある。現在(2015年12月)はレジュームが不要かは未検証。最近は見られないが、rtmpe 配信の場合は、-W http://live.nicovideo.jp/certified.swfを追加する。ffmpeg で保存する場合は入力オプションの-rtmp_buffer 36000000を追加する。バッファを大きくすると途中で「RTMP_ReadPacket, failed to read RTMP packet header」のエラーで止まるので ffmpeg で保存せずに rtmpdump を使う。
【ニコ生】namareco namarokuについて語ろう Part29より、2019年7月現在、過去のTSしか rtmp はみられないが、その場合には-W “https://live.nicovideo.jp/nicoliveplayer.swf”を指定する。
コマンド例
rtmpdump -r "rtmp://nlaoe111.live.nicovideo.jp:1935/fileorigin/01/mp4:/content/20150427/lv217145340_194126458000_1_966ec4.f4v" -C "S:151356:lv217145340:0:1430000000:7a3277826cd26a64" -o out.flv
rtmpdump -r "rtmp://nlaoe111.live.nicovideo.jp:1935/fileorigin/01" -y "mp4:/content/20150427/lv217145340_194126458000_1_966ec4.f4v" -C "S:151356:lv217145340:0:1430000000:7a3277826cd26a64" -W "https://live.nicovideo.jp/nicoliveplayer.swf" -e -o out.flv
rtmpdump -r "<rtmp><url></url></rtmp>/mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flv
rtmpdump -r "<rtmp><url></url></rtmp>" -y "mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -W "https://live.nicovideo.jp/nicoliveplayer.swf" -e -o out.flv
librtmp
ffplay -i "rtmp://nlaoe111.live.nicovideo.jp:1935/fileorigin playpath=mp4:content/20150427/lv217145340_194126458000_1_966ec4.f4v conn=S:151356:lv217145340:0:1430000000:7a3277826cd26a64 swfUrl=https://live.nicovideo.jp/nicoliveplayer.swf swfVfy=1"
ffplay -i "<rtmp><url></url></rtmp> playpath=mp4:<stream><quesheet><que></que></quesheet></stream> conn=S:<rtmp><ticket></ticket></rtmp> swfUrl=https://live.nicovideo.jp/nicoliveplayer.swf swfVfy=1"
チャンネル生放送
簡単配信(H.263)でもファイルパスのコンテナは f4v になる。HTML5版以降により廃止。KSV版を使う場合はファイルパス(-y)とレジューム(-e)を指定する必要がある。現在(2015年12月)はレジュームは不要か未検証。バッファを大きくすると途中で「RTMP_ReadPacket, failed to read RTMP packet header」のエラーで止まるので ffmpeg で保存せずに rtmpdump を使う。
コマンド例
rtmpdump -r "rtmp://nlace01.live.nicovideo.jp:1935/fileorigin/00/mp4:/content/150509/lv200000000_203510899000_2_1eb707.f4v" -C "S:151356:lv200000000:0:1430000000:067e232cc6900011" -o outflv
rtmpdump -r "rtmp://nlace01.live.nicovideo.jp:1935/fileorigin/00" -y "mp4:/content/150509/lv200000000_203510899000_2_1eb707.f4v" -C "S:151356:lv200000000:0:1430000000:067e232cc6900011" -e -o outflv
rtmpdump -r "<rtmp><url></url></rtmp>/mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flv
rtmpdump -r "<rtmp><url></url></rtmp>" -y "mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -e -o out.flv
librtmp
ffplay -i "rtmp://nlace01.live.nicovideo.jp:1935/fileorigin playpath=mp4:content/150509/lv200000000_203510899000_2_1eb707.f4v conn=S:151356:lv200000000:0:1430000000:067e232cc6900011"
ffplay -i "<rtmp><url></url></rtmp> playpath=mp4:<stream><quesheet><que></que></quesheet></stream> conn=S:<rtmp><ticket></ticket></rtmp>"
ユーザー生放送
簡単配信(H.263)でもファイルパスのコンテナは f4v になる。HTML5版以降により廃止。新配信が一般的になった現在はN を使わない新しいニコ生用の rtmpdump と ffmpeg(librtmp)を参照。
コマンド例
rtmpdump -vr "rtmp://nleu22.live.nicovideo.jp:1935/liveedge/ts_150509_00_0 -C S:151356:lv200000000:0:1430000000:28078a7a50bca2d4" -N "rtmp://nlpoca143.live.nicovideo.jp:1935/fileorigin/ts_00,/content/20150506/lv200000000_224815576000_3_3d715a.f4v?1430000000:30:98f4e9bc83f491f1" -o out.flv
rtmpdump -vr "<rtmp><url></url></rtmp>/lv[id]" -N "<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flv
関連記事
更新履歴
2015年5月14日 書き間違いの修正とKSV版のコマンドの追加と rtmpe のときの対応、XMLタグの色つけ。
2015年5月28日 librtmp での読み込み方法。
2015年7月4日 公式生放送の librtmp 読み込みで live=1 が不要だったので消した。
2016年3月25日 公式のアニメ配信で MPC-HC で音が鳴らなくなるのを確認、ffplay では live=1 が必要になった。
2016年10月6日 ユーザー生放送のTSの librtmp の playpath の説明部分が間違っていたのを直した。
2018年9月13日公式・チャンネル生放送のTSが新配信になったので注意書きを追加した。
2018年12月15日 一部の librtmp を mpc-hc から ffmpeg に変更した。
2018年12月20日 ffmpeg でバッファを大きくしてタイムシフトを保存すると途中でエラーになり保存が最後まで進まないので書き直した。
[…] http://nico-lab.net/nicolive_rtmpdump_commands/ #ニコ生の配信データを保存する rtmpdump のコマンド内容のまとめ | ニコラボさん #getplayerstatusを把握したのみです。 […]
こちらに書かれている公式生放送のタイムシフトの
“`
rtmpdump -r /mp4:/ -C S: -o out.flv
“““
のコマンドを試したのですが以下のようなエラーとなりました。
`
PS D:\rtmpdump-2.3> .\rtmpdump.exe -r rtmp://nlaoe114.live.nicovideo.jp:1935/fileorigin
/04/mp4:/content/20181031/lv316486947_084009849000_1_92437b.f4v -C S:39581939:lv316486947:0:1542802149:4e26cdb1c9d7437
5 -o out.flv
RTMPDump v2.3
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting …
WARNING: HandShake: client signature does not match!
INFO: Connected…
ERROR: Closing connection: NetStream.Play.StreamNotFound
`
以前は確かにこのやり方で保存できたのですが、これはrtmpからhlsに完全に移行してしまったということでしょうか?
またlivedlによるhlsを使った保存には放送時間分の時間が掛かってしまいます。
flash版が廃止された今でも放送時間分の時間をかけずに公式生放送のタイムシフトを保存する方法はあるのでしょうか?
記事冒頭にも書いてますが、これが原因ですので一度Flashで再生する必要があります。
https://ch.nicovideo.jp/nico-lab/blomaga/ar1670436
前もってFlashで再生しておいたので今度は保存できるようになっているはずです。
https://ch.nicovideo.jp/weathernews
実験でチャンネル生放送のTSをrtmpdumpでこちらに書かれているコマンドを使ってDLしようとしたのですが、これも一度再生しないとDL不可なストリームなのでしょうか?
INFO: Connected…
ERROR: Closing connection: NetStream.Play.StreamNotFound
また(仮のrtmpdumpエンジンを使うに設定してDLした後の番組はこちらに書かれているコマンドを使ってDL出来る様になります。
チャンネルに限らずどのTSも保存する直近に一度再生してないと rtmpdump ではDL不可のような気がしますが、http://nico-lab.net/new_cumtom_rtmpdump_and_ffmpeg_without_n-option_for_nicolive/ で紹介している ffmpeg は再生しなくてもDLできています。