現在のニコ生の録画方法は以下を参照。
ニコ生の新配信と録画方法について

以下の記事は旧配信向けで、現在の 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)

Windows の ffmpeg でよく使われている Zeranoe の ffmpeg は librtmp がないので代わりに k-tai-douga の ffmpeg を使う。
FFmpegダウンロード お気に入りの動画を携帯で見よう

rtmpdump コマンド一覧と使い方

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.flvrtmpdump -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.flvrtmpdump -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.flvrtmpdump -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.flvrtmpdump -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.flvrtmpdump -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.flvrtmpdump -r "<rtmp><url></url></rtmp>/mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flvrtmpdump -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 outflvrtmpdump -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 outflvrtmpdump -r "<rtmp><url></url></rtmp>/mp4:/<stream><quesheet><que></que></quesheet></stream>" -C "S:<rtmp><ticket></ticket></rtmp>" -o out.flvrtmpdump -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.flvrtmpdump -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 でバッファを大きくしてタイムシフトを保存すると途中でエラーになり保存が最後まで進まないので書き直した。

5 thoughts on “ニコ生の配信データを保存する rtmpdump のコマンド内容のまとめ

  • ざっく

    こちらに書かれている公式生放送のタイムシフトの
    “`
    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版が廃止された今でも放送時間分の時間をかけずに公式生放送のタイムシフトを保存する方法はあるのでしょうか?

  • 匿名

    https://ch.nicovideo.jp/weathernews
    実験でチャンネル生放送のTSをrtmpdumpでこちらに書かれているコマンドを使ってDLしようとしたのですが、これも一度再生しないとDL不可なストリームなのでしょうか?
    INFO: Connected…
    ERROR: Closing connection: NetStream.Play.StreamNotFound
    また(仮のrtmpdumpエンジンを使うに設定してDLした後の番組はこちらに書かれているコマンドを使ってDL出来る様になります。

    • admin

      チャンネルに限らずどのTSも保存する直近に一度再生してないと rtmpdump ではDL不可のような気がしますが、http://nico-lab.net/new_cumtom_rtmpdump_and_ffmpeg_without_n-option_for_nicolive/ で紹介している ffmpeg は再生しなくてもDLできています。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)