ニコ生の新配信(β)と録画方法について


11月1日に公開された新配信(β)以下新配信について。「ユーザー番組の配信ビットレートが1Mbps」になって高画質配信ができると思ったのもつかの間、記事をよく読むと、「時間帯と視聴ユーザーの会員状態によってビットレートが異なります」とあるように送信映像が視聴者にそのまま送られずに再エンコードされることが分かり、試す前からいやな予感がする告知であった。

ニコニコ生放送「新配信(β)」の提供を開始しました‐ニコニコインフォ
【11/4更新】「新配信(β)」でお困りの方へ‐ニコニコインフォ
検索結果:新配信 | ニコニコヘルプ

主な特徴を抜粋すると

  • 配信ビットレートは 1Mbps 固定だがそのまま配信映像が見られるわけではなく再エンコードされた形で、会員状態と時間帯によってはさらにビットレートが制限される
  • エコノミータイム(17時〜3時)になるとプレミアム会員は 768kbps、一般会員は 384kbps に制限され、タイムシフト視聴では一般会員の 384kbps しか見られない
  • 座席上限がなくなるが一般会員が途中で追い出される場合がある
  • 30分1枠が基本となっていたのが、1回の無料延長で60分1枠が可能になる

記事に書いてない部分では同時視聴の制限が緩和され、通常配信は2放送までだったのが、新配信は3放送まで同時に見られるようになり、新旧の配信方法の同時視聴制限は合算せずに最大5放送まで同一アカウントのブラウザで見られる。

配信映像の画質について

Twitter で調べてみるとコメントビューワの文字が読めない、同じビットレートのハードウェアエンコードの映像より汚いとか色々言われているが、確かにそのようで激しく動く映像を新配信で配信するとものすごく映像が破綻する結果になる。一方でレトロゲームやカード式のソーシャルゲームといったそれほどビットレートを必要としない映像なら 768kbps まではそれほど破綻が気にならなかった。

推奨設定での配信結果(概算)

3時から17時 17時から3時(プレ) 17時から3時(一般)
総ビットレート(公式) 1Mbps 768kbps 384kbps
解像度 800×450 800×450 512×288
映像ビットレート(概算) 907kbps 667kbps 288kbps
Profile Main@L3.1 Main@L3.1 Main@L2.1
ref 参照フレーム 4 4 4
B-frame 最大連続枚数 3 3 3
CABAC on on on
音声ビットレート(概算) 62kbps 62kbps 62kbps
旧配信からの遅延増加 1秒未満 1秒未満 1秒未満

補足としてビットレート調整について、暗部は急激に低下し、同一フレーム(いわゆる静止画放送)でも大きく低下、それ以外は基本的には平均ビットレートから外れない設定になっている。

録画方法について

新配信の生放送を namarokuRecorder から録画すると一般会員用の低画質しか録画できない。そこで新配信の映像を録画するには少し手間が必要になる。ちなみにプレミアム会員だと PC からでは一般会員の低画質を体験できないので、PC 以外のデバイスから見るか、sp ドメインに変更することで体験できる。


http://live2.nicovideo.jp/watch/lv1234567890 (新配信のアドレス)
http://sp.live.nicovideo.jp/watch/lv1234567890 (sp ドメインへの変更)

ニコ生の録画方法 まとめ

新配信の放送を開き、Wireshark などで配信ポート番号を調べる。Wireshark を使わなくてもポート番号は現時点では 2832 から 2836 の 5通りしか確認していないので順番に試せば Wireshark で調べる必要は無い。調べ方はブラウザ以外の通信アプリケーションを終了して流れるパケットで Lenght サイズの大きいのを探し、Info の左の数値がポート番号になる。次に調べたポート番号を RTMPDumpHelper に割り当て、KSV の rtmpsrv の起動に変更する。すると RTMPDumpHelper を起動すると同時に rtmpsrv も起動し、新配信のニコ生をリロードすれば解析結果が Command.txt に出力される。

RTMPDumpHelper の使い方

ここで Command.txt で出力されたコマンドをそのまま実行しても「WARNING: HandShake: Server not genuine Adobe!」のエラーが出るので少し加工する。

加工前(録画ファイル名は加工済み)
rtmpdump -r "rtmp://pc01.dmc.nico:2835/live" -a "live" -f "WIN 23,0,0,207" -W "http://nl.nimg.jp/public/relive/2.0.5/assets/uweb/r1/swfs/v1/AriesPlayer.swf" -p "http://live2.nicovideo.jp/watch/lv1234567890" --live -y "rt2_nicolive/nicolive-production-pg333587677800_bb6f1df63b231953bca37fa80467bff3293511a3e1b402488cff5a655f3a8980?rt2_nicolive=151356.wcreq9_ogdjom_1hz5mdclcaai1" -o "output.flv"

加工後(-r を -vr に変更し、-a から -y 手前までを削除し / でつなげる)
rtmpdump -vr "rtmp://pc01.dmc.nico:2835/live/rt2_nicolive/nicolive-production-pg333587677800_bb6f1df63b231953bca37fa80467bff3293511a3e1b402488cff5a655f3a8980?rt2_nicolive=151356.wcreq9_ogdjom_1hz5mdclcaai1" -o "output.flv"
ちなみに rtmpdump の -N オプションが不要なので普通の ffmpeg でも録画できる
ffmpeg -f live_flv -i "rtmp://pc01.dmc.nico:2835/live/rt2_nicolive/nicolive-production-pg333587677800_bb6f1df63b231953bca37fa80467bff3293511a3e1b402488cff5a655f3a8980?rt2_nicolive=151356.wcreq9_ogdjom_1hz5mdclcaai1" -c copy "output.flv"

注意点として、この新配信は動画の強制再エンコードの新配信と同じように視聴ページを開いてないと録画が止まるので放送ページを開いたままにしておくか、コメントビューワで放送に接続し続けていれば録画が止まらない。

WebSocket 通信で調べる方法

追記 2016年11月12日 9時26分
WebSocket 通信の方法がやっと理解できたので上に書いてある Wireshark と rtmpsrv で調べる必要がなくなったが、手動で行う場合は時間制限があるので手早く行う。また新配信の放送ページのソースコードさえ分かれば、WebSocket 通信に niconico のログインは不要である。

Simple WebSocket Client – Chrome ウェブストア
Simple WebSocket Client :: Add-ons for Firefox

新配信の放送を開いたら右クリックからソースコードを開き、broadcastIdaudienceToken を探す。

次に broadcastIdaudienceToken をつけて WebSocket Server を立ち上げる。
ws://a.live2.nicovideo.jp:2805/unama/wsapi/v1/watch/broadcastId?audience_token=audienceToken

ws://a.live2.nicovideo.jp:2805/unama/wsapi/v1/watch/138093265512?audience_token=138093265512_151356_1478995643_de1c48bc086767a044ee114e01d2ad62f30bf1a8

そして、Request の部分に broadcastId をつけて通信する。
{"type":"watch","body":{"params":["broadcastId","","true","rtmp",""],"command":"getpermit"}}

{"type":"watch","body":{"params":["138093265512","","true","rtmp",""],"command":"getpermit"}}

http://potato.2ch.net/test/read.cgi/software/1473703893/248 より

WebSocket Client 設定例


そして、body -> currentStream -> uri と body -> currentStream -> name
を / でつなげれば録画できる URL になる。また時間切れになって録画できなくなったら rt2_nicolive 以下を書き換えれば良い。

コメントを残す

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