raccy / obs-rtmp-nicolive

ニコニコ生放送用 OBS Studio プラグイン
MIT License
57 stars 8 forks source link

v2.1.0-preの不具合 #17

Closed style1925 closed 7 years ago

style1925 commented 7 years ago

取り急ぎ、0.16.2(Mac)に「v2.1.0-pre」を組み込んでビルドしてみました。 試してみて、不具合を何件か発見したのでご報告します。 お時間がある際に、対応して頂けると助かります。 この変更によって開始系は、変更のおかげか遅延配信を使っても多分大丈夫でした。 (報告した動作はしていなかった。ただもう少し様子見はしてクローズするか決めます。)

1、ビットレート自動調整がおかしい (解決済み) 例 : 新配信の場合 (音声は初期値の160設定) 映像に対してきっちり1000kbps割り当てられる。※旧仕様は480kbps (サービスタイム時に検証) 音声ビットレートから引いた値が適用されていない模様。

2、「自動で配信開始と枠移動を行う」がおかしい (解決済み) 開始はされるけど、停止がされない。 (旧配信・新配信両方) 回避策 : 手動で停止をするしかない。

3、新配信枠を取得後に旧仕様枠をすると開始がされない。(自動移動使用して 手動は試してない) OBS Studio側のコミットで対応 https://github.com/jp9000/obs-studio/commit/0ea0b99aa06947fd7332a2603e2ac5f7b59be31c ※但し、OBS Studio側の設定に注意 新配信枠を取得 →枠の配信 開始 → 枠の配信終了させる。 終了と同時にOBSが強制的に鯖からの切断される。 (配信停止状態?) 次に、旧配信枠を取得 → 枠の配信開始 → OBSが開始されない。(配信停止も押せない状態) この場合、配信停止ボタンも押せないのでOBSを強制終了しないといけない

以下OBSのログを貼り付けます。 11:44:43.754: [nicolive] live waku: lv280742344 11:44:44.824: [nicolive] live waku: lv280742344 11:44:44.824: [nicolive] found live url and key with ticket 11:44:44.824: --------------------------------- 11:44:44.824: [x264 encoder: 'streaming_h264'] settings: 11:44:44.824: rate_control: CBR 11:44:44.824: bitrate: 480 11:44:44.824: buffer size: 480 11:44:44.824: crf: 0 11:44:44.824: fps_num: 30 11:44:44.824: fps_den: 1 11:44:44.824: width: 1280 11:44:44.824: height: 720 11:44:44.824: keyint: 250 11:44:44.824: vfr: off 11:44:44.824: 11:44:44.895: [nicolive] live waku: lv280742344 11:44:44.895: [nicolive] found live url and key with ticket 11:44:44.977: [nicolive] live waku: lv280742344 11:44:44.977: [nicolive] found live url and key with ticket 11:44:44.978: [rtmp stream: 'adv_stream'] Connecting to RTMP URL rtmp://nlpoca118.live.nicovideo.jp:1935/publicorigin/161102_11_0?(ユーザーID):lv280742344:68:1478054684:0:1478054668:c853a6a2c1843f51... 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN! 11:44:45.119: Last log entry repeated for 67 more lines 11:44:45.119: HandleInvoke, error decoding invoke packet

raccy commented 7 years ago

1、ビットレート自動調整がおかしい

新配信は最大1Mpbsですので、1Mpbsが可能であれば、自動的に1Mbpsになります。

2、「自動で配信開始と枠移動を行う」がおかしい (10秒設定)

私も止まりませんでした。調査中です…><

3、新配信枠を取得に旧仕様枠をすると開始がされない。(自動移動使用して 手動は試してない)

メッセージを見る限り、OBS側でデコード処理が失敗しているっぽいです。あるとしたら、大きなビットレートから小さなビットレートに変わるところで何かしらの不具合が起きているという所でしょうか。色々試して見ます。こういうパターンでも起きるというのが見つかれば、情報をいただけますと助かります。

style1925 commented 7 years ago

おっしゃる通り、自動調整は動いているのですがちょっと違う感じです。 ビットレート部分は、正常であれば1000kbpsから引いた値の936が適用されるはずなんですが、適用されていません。(音声ビットレート 64設定) 旧配信も同様に、音声ビットレートから引いた値が映像に適用されていませんでした。 その時のOBSログを貼り付けます。

新配信 音声ビットレート 64kbps設定 11:52:03.148: [x264 encoder: 'streaming_h264'] preset: veryfast 11:52:03.148: [x264 encoder: 'streaming_h264'] settings: 11:52:03.148: rate_control: CBR 11:52:03.148: bitrate: 1000 11:52:03.148: buffer size: 1000 11:52:03.148: crf: 0 11:52:03.148: fps_num: 30 11:52:03.148: fps_den: 1 11:52:03.148: width: 1280 11:52:03.148: height: 720 11:52:03.148: keyint: 250 11:52:03.148: vfr: off 11:52:03.148: 11:52:03.162: [CoreAudio AAC: 'Track1']: settings: 11:52:03.162: mode: HE-AAC 11:52:03.162: bitrate: 64 11:52:03.162: sample rate: 44100 11:52:03.162: cbr: on 11:52:03.162: output buffer: 1536

旧配信 音声ビットレート 64kbps設定 11:53:05.945: [x264 encoder: 'streaming_h264'] preset: veryfast 11:53:05.945: [x264 encoder: 'streaming_h264'] settings: 11:53:05.945: rate_control: CBR 11:53:05.945: bitrate: 480 11:53:05.945: buffer size: 480 11:53:05.945: crf: 0 11:53:05.945: fps_num: 30 11:53:05.945: fps_den: 1 11:53:05.945: width: 1280 11:53:05.945: height: 720 11:53:05.945: keyint: 250 11:53:05.945: vfr: off 11:53:05.945: 11:53:05.963: [CoreAudio AAC: 'Track1']: settings: 11:53:05.963: mode: HE-AAC 11:53:05.963: bitrate: 64 11:53:05.963: sample rate: 44100 11:53:05.963: cbr: on 11:53:05.963: output buffer: 1536

raccy commented 7 years ago

うーん、それはおかしいですね。私がテストしたときは1000から引いた値にbitrateはなってくれたんですが…。他と含めて確認します。

style1925 commented 7 years ago

自動調整はあるのに、何故かビットレート値がそのまま適用されていて不思議に思いました…。 調査お願いします…

新配信を取った後の、旧配信枠。 何故か動かないですね

デコード処理?に関して参考になるかもしれないやつ。

プラグイン導入時検証 「自動で配信開始と枠移動を行う」チェックを外しておく (外さない場合は切断出来ない) 枠を途中で番組終了終了させると、その時点で切断になる。 新たに新配信枠を取得して開始しても問題ない。

カスタムストリーミングサーバーでの手動入力で検証 枠を途中で番組終了させると、その時点でrtmpアドレスが無効になる。 15:47:27.078: WriteN, RTMP send error 10053 (382 bytes) 15:47:27.078: WriteN, RTMP send error 10053 (183 bytes) 15:47:27.078: WriteN, RTMP send error 10038 (42 bytes) 15:47:27.078: [rtmp stream: 'adv_stream'] Disconnected from rtmp://nlpoca301.live.nicovideo.jp/origin/rt2_nicolive 15:47:27.078: Output 'adv_stream': stopping 15:47:27.078: Output 'adv_stream': Total encoded frames: 1142 15:47:27.078: Output 'adv_stream': Total drawn frames: 1142 15:47:27.080: ==== Streaming Stop ================================================

この時点でOBSの配信停止を押す。 (kb/s 0 )になった後すぐに。 ここでうまく切断が出来ていると、新規に枠を取った際にアドレスを張り替えて配信可能 試した限り、すぐにOBSの配信停止を押さないと切断が出来ず画面上では配信停止になっていても停止されていませんでした。 またここで停止出来てた場合、配信開始をすると切断が出来なくなる (強制終了しないといけない)

詳細設定「自動的に再接続」がOFFの場合 枠終了後すぐに切断メッセージが表示される。 「サーバーから切断されました。」 もし切断後に、配信開始(接続)すると切断が出来ない (強制終了しないといけない) こちらは配信開始(接続)しない限りは、新規に枠を取りアドレスを張り替えると配信が可能

参考になるかは分かりませんが…。 切断後のプラグイン動作を変えてあげたら、回避できそうな気もします。

raccy commented 7 years ago

停止ボタンは修正しました。v2.1.0-pre1をお試しください。

ビットレートはどうやら、「拡張」にすると駄目なようです。「拡張」では複数の音声を設定できるのですが、プラグイン側で複数に対応しておらず、音声ビットレートの取得に失敗していました。対応までは「基本」で音声は一つのみにしていただくようお願いします。

新配信後に旧配信がうまくいかない件は確認しました。ちょっと原因はよくわかっておらず、調査中です。

style1925 commented 7 years ago

v2.1.0-pre1試しました。 停止ボタンは大丈夫そうでした。 (遅延配信も問題なく開始・停止してた気がします)

初めに、報告する際に拡張(詳細)と書いて無くてすみませんでした。(放送のタイムシフト見て) ビットレート自動調整に関しては、v2.0だと詳細にしても比較的大丈夫でした。(謎仕様) そういうのもあり、v2.1.0-pre1も詳細で設定して試していました。 但し、トラック1だけがほぼ正常に動作するだけでトラック2以降は行ける時とダメな時がありました。 (トラック2以降は設定を何度かしてると動いたり…?でもあんまり安定しない気がする) 何故か動いてたのが、動作しなくなっているようなので今回の修正とかでおかしくなってません…? また、トラック2以降は設定しても自動調整が出来ないと言う仕様ではどうでしょうか。 (v2.0仕様のままだとトラック2以降が安定しない不具合が残ったままですが…)

これは原因特定難しそうですね…。 解決まで新配信では「自動で配信開始と枠移動を行う」を使わない方が良いかもしれないです。

raccy commented 7 years ago

ビットレートの件がだいたいわかりました…でも、解決には至っていません。出力モードが「詳細」になっている場合に次のようなことが起きるようです。

他にもapply_encoder_settings(配信前にエンコーダーの設定を行うために呼び出される構造体メンバー)がなぜか3回呼び出されているなど、ちょっとバグっぽいところがあるようです。しばらくは「基本」を使っていただくようお願いします。

style1925 commented 7 years ago

修正までは、「基本」利用はわかりました。

「詳細モード」ビットレートの件 v2.0を再度数回試してましたが詳細の音声ビットレートがトラック変えても問題なく適用されてました。

そこで少し気になったのでv2.0から現時点の最新コミット(b45fa69)のどこでおかしくなったか探してみました。 だいだい分かってたのと同じでしたら、申し訳ありません。

問題がなく取得と適用が出来てたコミット 1be535f (dd6df91の1つ前) 詳細での映像ビットレートが正常に反映されなくなったコミット dd6df91

また、このdd6df91の変更で出力モード「基本」に対して以下の翻訳が表示されてました。(%1 はビットレート数値)

(警告: 配信の映像ビットレートは %1 に設定され、これは現在の配信サービスの上限です。 %1 より大きい値に設定する場合、高度なエンコーダオプションを有効にして「配信サービスのビットレートを制限する」のチェックをオフにしてください。)

この表示に従い制限チェックをオフにするとビットレート自動調整が効かなくなります。(設定値がそのまま適用) 基本モードを使用する人がどれぐらい居るか分かりませんが、この変更で発生した表示は良くないです。

raccy commented 7 years ago

「基本」で「配信サービスのビットレートを制限する」が有効でないと変更した設定が元に戻されてしまうようです。設定タイミングを元の配信開始にも行うことで、回避するようにしました。

style1925 commented 7 years ago

早速試してみました。(efb2048) 基本(チェックあり、なし)・詳細(トラック変更)どちらも大丈夫そうでした。 素早い修正ありがとうございます。

raccy commented 7 years ago

残りの新配信終了後にうまくいかない動作ですが、プラグインを入れていない素のOBS(0.16.2 mac)であっても、うまく動かないことを確認しました。放送終了後に、表示上は配信終了状態なるのですが、ストリーミング設定がグレーアウトしており、内部的にはまだ放送中の扱いになるようです。正常終了もできず、強制終了が必須でした。

OBS側の不具合となります。ちょっとプラグインで根本的になんとかできるようなものではなさそうです。番組終了前にOBSの配信を停止すれば正常に配信終了できるため、終了時間前に終了するなどの対策を考えたいと思います。

style1925 commented 7 years ago

ちょっと色々と試していたら、OBSを再起動せずに新配信→旧配信が出来ました。 何故プロファイル変更で動くかは謎ですが、変更の際にニコ生プラグインが動いてました。

OBS Studio設定 本体設定 : 「自動的に再接続」は必ずオフにする プラグイン : 「自動で配信開始と枠移動を行う」は使わない

手順 新配信を取得する ↓ OBSの配信開始をさせる (手動) ↓ 新配信枠を終了 (手動) ↓ OBSが強制切断食らう (この後そのまま通常枠を取得して開始すると出来ない。) ※この間まで分かっていた所 ↓ プロファイルを変更する (何でもOK) ↓ 元使っていたプロファイルに戻す (ここは別にやらなくても大丈夫) ↓ 旧配信枠を取得する ↓ OBSの配信開始をさせる (手動) ↓ 問題なく動く


更に追記 再起動しなくても動作する方法 (2017/04/05 04:40) 映像ビットレート・音声ビットレートのどちらかを新配信終了後に変更して適用をしているとプロファイル変更をしなくても新配信→通常配信で配信開始が出来ました。 なぜビットレートの設定変更で動作するかは分かりませんが、情報として。

OBS Studio設定 本体設定 : 「自動的に再接続」はオフにする ※こちらはバグが多い プラグイン : 「映像ビットレートを自動調整」を使う

新配信を取得する ↓ OBSの配信開始をさせる (手動) ↓ 新配信枠を終了 (手動) ↓ OBSが強制切断食らう (この後そのまま通常枠を取得して開始すると出来ない。) ↓ 設定 > 出力 「映像ビットレート」「音声ビットレート」のどちらかを変更する。 ↓ 旧配信枠を取得する ↓ OBSの配信開始をさせる (手動) ↓ 問題なく動く

style1925 commented 7 years ago

新配信(β)後に通常配信をするとOBS Studioが開始出来ない問題 (3)

下記コミットで修正されたので、この問題はクローズします。 https://github.com/jp9000/obs-studio/commit/0ea0b99aa06947fd7332a2603e2ac5f7b59be31c

環境 OBS Studio 18.0.1-75-g0ea0b99-modified ニコ生プラグイン v2.2.0-pre1 (ビルド時に一緒にコンパイル)

OBS Studio側の設定 「自動的に再接続」は必ずオフにする ※オフにしてない場合、強制切断後の自動再接続(放置)でバグるので。(次枠の配信開始が出来ない) ※設定変更をしてない場合、今まで通り枠終了後はOBS Studioの強制終了が必要。

ニコ生プラグインの設定 ログインのみ。他の設定項目は初期値