エンコーダとサーバ間で映像配信が切れてしまう問題解決 まとめ

長時間映像配信した時に、どうしてもエンコーダとサーバ間で切断が起きてしまう問題が発生しました。安定映像配信をするためにはどうしたら良いかまとめてみました。

Nginx RTMP Moduleを利用して、クラウド上にサーバを配置。

|エンコーダ| ⇒ インターネット ⇒ |Nginx RTMP Module|

とすると、3〜4時間ごとに映像が切れてしまう現象が発生。
エンコーダはRTMP送出エラーが記録され、Nginx側ではクライアントが切断したというログが残る。

Nginx RTMP ModuleをLAN内に配置すると、問題は全くおきない。

|エンコーダ| ⇒ LAN ⇒ |Nginx RTMP Module|

結論として
OCNインターネット回線がダメだった。プロバイダをインターリンクに変更したところ、安定し、全く切れる事が無くなった。まさかOCNでそんな問題を起こすなんて思っていなかった。

インターリンク
http://www.interlink.or.jp
2ヵ月完全無料試用可能

ポイント(あくまでうちの設備で)

  1. OCNは利用してはいけない
  2. KDDIイーサエコノミーを利用してはいけない(2017/6/7追記)
  3. エンコーダのキーフレームは1秒か2秒の間隔で
  4. エンコーダソフトは関係ない
    テストしたソフト Wirecast Play評価版、FlashMediaEncoder、OBS Studio、OBS Classic
  5. エンコーダ1台で配信する分には問題が出ない。複数台で複数チャネルの映像配信を1つのインターネット契約で行った時のみ問題が発生する
  6. ルータは関係ない
    テストしたルータ RTX1100、RTX810、Debian Jessie、AR260s
  7. Nginx RTMP-Moduleの設定にて ack_windwサイズ、chunk_sizeなど設定を変更したが関係ない
  8. 配信サービスは関係ない
    テストしたサービス Nginx RTMP Module、ビデオグ、Ustream、Uliza、Youtube Live

考察
インターリンクはInfosphereの回線を利用している
http://www.sphere.ne.jp/
Infosphereは、OCNの子会社 NTT PC Communicationsが運営しており、上位プロバイダはOCNという事になる。つまり、OCN回線を利用している事に変わりない。なぜOCNのプロバイダ契約だと映像が切れてしまう事象が起こるのかまでの原因究明にいたっていない。OCNにもエンコーダログ、サーバログなどを送付し、その切断時間為通信経路で何かおきていないかを確認したが、PPPoEセッション自体には問題がなく「正常である」との回答。さらに、同設備収容者の接続帯域が過多になった場合、その時点で通信量の多い利用者から帯域を制限する措置をするそうだが、エンコーダが切れる時間と、帯域が制限された時間に関連は見られない。1月に2回帯域制限がかかったことがあるとの事だったが、OCN回線を利用して試験した日は多数あり、切断は2回どころではない。

OCNの帯域制御
http://www.ocn.ne.jp/info/rules/qualityimprovement/

インターリンクの帯域制御
https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?id=1012

インターリンクのサポートセンターからの回答
帯域制御はリアルタイムで実施されます。
ある閾値を超えた段階で、基準値に下がるまで帯域を占有しているユーザーIDに対して順番に速度制限をかけていきます。
この帯域制御は上位回線会社にて自動で行われ、対象のユーザー様の記録は取っておりませんので、過去に遡って調査することはできません。

この回答から、帯域制限はOCNが行う帯域制限をそのまま受けてしまうと考えられる。

今後
より安定したプロバイダを見つける必要がある。OCN系列ではないインターネットプロバイダを契約しておき、インターリンクと併用冗長化する事でトラブルを回避する。

Nginx RTMP Moduleへの映像配信。

どうやっても途中で切れてしまう。2~3時間に1度のペース。すぐに再接続は
されるものの、クライアント側では5秒程度の停止時間が発生してしまう。

エンコーダを変更してテスト

Wirecast play
1.デフォルト設定だとやっぱり途中でエンコードが止まった
2.キーフレーム設定を4秒にしてみたが切れた
3.キーフレーム設定を2秒(30フレ/秒で60フレーム事)
次のフレーム数ごとにタイムコード30フレで切れた
4.3に加えてキーフレームを位置合わせ、nginx.conf にwait_key on;設定で切れた
5.nginx.confにping 0;を加え、切断確認をしないようにしたけど切れた
※YAMAHA RTX1100ルータ配下に変更
6.1024kbps,512kbpsと低ビットレートで試験 切れない

OBS Classic
1.32bitデフォルト設定でもやっぱり止まった
2.64bitデフォルト設定でもやっぱり止まった
3.64bit キーフレーム間隔2秒、mainプロファイル やっぱり止まった
4.nginx.conf にwait_key on;設定、TCP 送信ウィンドウの最適化を無効にするをチェック切れた
5.nginx.conf にping 0;を加え、切断確認をしないようにしたけど切れた
6.Win7 ,512kbpsで配信で切れた
※YAMAHA RTX810ルータ配下
7.Win7,512kbpsで配信 切れた
※YAMAHA RTX810ルータ配下
8.Win8,2500kbpsで配信 切れた

OBS Studio
1.512kbpsで配信して切れる

youtube live streaming + wirecast Linuxルータ2,000kbpsだと5時間ほどで切れた
ビデオグ + Wirecast+YAMAHA RTX1100ルータ 切れない
ビデオグ + Wirecast+YAMAHA RTX810ルータ 切れた
ビデオグ + OBS Classic +YAMAHA RTX810ルータ
UStream + Wirecast +Linuxルータ 切れた
UStream + Wirecast +YAMAHA RTX1100ルータ 切れない
UStream + Wirecast +YAMAHA RTX810ルータ 切れた 16時間中10回
Uliza + Wirecast + YAMAHA RTX1100ルータ 切れない
Uliza + Wirecast + YAMAHA RTX810ルータ 切れた

RTX810 ルータ配下 設定変更(RTX1100とほぼ同じ設定)
Wirecast play + Ustream キーフレームはプリセットに従う 切れた
OBS Classic + Sakura 512K キーフレーム2秒 切れた
OBS Classic + Cloudn 2500K キーフレーム2秒 切れた
Wirecast play + Videog キーフレーム設定 切れてない
Wirecast play + Ustream キーフレーム2秒 切れた
Wirecast play + Ustream キーフレーム2秒 1500k 切れた

http://junkbox.wicurio.com/index.php?%E5%9F%BA%E6%9C%AC%E4%BA%8B%E9%A0%85%E3%80%81%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AA%E3%81%A9
tcpfinのセッションは終了するセッションなので10秒でタイムアウトさせる
nat descriptor timer 1000 tcpfin 10
OBS Studio + Uliza キーフレーム2秒 2500k 切れた
FME + Ustream ダウンロードxmlから 1200k 切れた
OBS Classic + Sakura 512K キーフレーム 切れた
Wirecast + Videog 700K キーフレーム 切れた

show nat descriptor address

新契約ONU配下で100Mbpsm契約に変更
OBS Studio + Uliza キーフレーム2秒 2500k 切れた
FME + Ustream ダウンロードxmlから 1200k 切れた
OBS Classic + Sakura 512K キーフレーム 切れた
Wirecast + Nginx Sakura 2500 キーフレーム 切れた

RTX1100隼契約設定に変更
OBS Studio + Uliza キーフレーム1秒 600k 切れてない
OBS Studio + Ustream キーフレーム1秒 600k 切れたけど2日目 25時間後に切れた(メンテナンスか?)
22:21:36.882: WriteN, RTMP send error 10054 (473 bytes)
Wirecast + Videog 700K キーフレーム 切れない
Wirecast + Nginx Sakura 2500 キーフレーム 切れた
単独 OBS Studio + Uliza キーフレーム1秒 2500k 切れない

Linuxルータ配下
Wirecast + Wirecast + Nginx Sakura 1024 キーフレーム 固定IPから 切れた
Wirecast + OBS Studio + Nginx Sakura 2500 キーフレーム1 固定IPから  切れた
Wirecast + OBS Studio + Nginx Sakura 750 キーフレーム1 固定IPから  切れた

RTX1100 m同時負荷テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れた
OBS Studio + Ustream 2500k キーフレーム2秒 切れてない
OBS Studio + Sakura 2500K キーフレーム 切れてない
Wirecast + Videog 700kbps キーフレーム 切れた

RTX1100 m同時受信負荷テスト
OBS Studio + Sakura 2500K キーフレーム 切れてない
Sakuraで映像受信

アライドテレシス AR260s 新OCN回線同時負荷テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れた
OBS Studio + Ustream 2500k キーフレーム2秒切れた
OBS Studio + Uliza 2500K キーフレーム 切れた
Wirecast + Videog 700kbps キーフレーム 切れた

アライドテレシス AR260s biglobe 同時負荷テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れた
OBS Studio + Ustream 2500k キーフレーム2秒切れた
OBS Studio + Uliza 2500K キーフレーム 切れた
Wirecast + Videog 700kbps キーフレーム 切れてない

〇2セッションテスト
アライドテレシス AR260s biglobe 単回線テスト
OBS Studio + Uliza 2500K キーフレーム 切れた

RTX810 新OCN回線同時負荷テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れてない
Wirecast + Videog 700kbps キーフレーム 切れてない

RTX1100 biglobe 単回線テスト
OBS Studio + Uliza 2500K キーフレーム 切れた

RTX1100 OCNm契約2セッション目 単回線テスト
OBS Studio + Uliza 2500K キーフレーム 切れた

RTX1100 OCNm契約2セッション目 単回線テスト
OBS Studio + Cloudn 2500K キーフレーム 切れた

〇2セッションテスト HUBをBuffalo GigaHUBに変更
RTX1100 インターリンク 単回線テスト
OBS Studio + Cloudn 2500K キーフレーム 切れてない

RTX810 新OCN回線同時負荷テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れてない
Wirecast + Videog 700kbps キーフレーム 切れた

〇2セッションテスト HUBをBuffalo GigaHUBに変更 2つの別々のネットワークとする
RTX1100 インターリンク 単回線テスト
OBS Studio + Cloudn 2500K キーフレーム 切れない

RTX810 新OCN回線単回線テスト
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れた

〇2セッションテスト HUBをBuffalo GigaHUBに変更
RTX1100 インターリンク 単回線テスト
OBS Studio + Cloudn 2500K キーフレーム 同時刻に切れた(今までにない)
OBS Studio + nginx cloudn 2500k キーフレーム2秒 同時刻に切れた(今までにない)
Wirecast + Videog 700kbps キーフレーム 同時刻に切れた(今までにない)

〇1セッションテスト インターリンク
RTX1100 インターリンク 単回線テスト
OBS Studio + nginx cloudn 2500K キーフレーム 切れない
OBS Studio + nginx cloudn 2500k キーフレーム2秒切れない
OBS Studio + Ustream 2500k キーフレーム2秒切れない
Wirecast + Videog 512kbps キーフレーム切れない

〇1セッションテスト インターリンク
RTX1100 インターリンク 単回線テスト
OBS Studio + nginx cloudn 2500K キーフレーム 切れない
OBS Studio + nginx cloudn 2500k キーフレーム2秒切れない
OBS Studio + Ustream 2500k キーフレーム2秒切れない
OBS Studio + Videog 512kbps キーフレーム切れない(早朝ビデオグのメンテ切断は有る)

〇1セッションテスト OCN
RTX1100 インターリンク 単回線テスト
OBS Studio + nginx cloudn 2500K キーフレーム 切れない
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れた
OBS Studio + Ustream 2500k キーフレーム2秒 切れた
OBS Studio + Videog 512kbps キーフレーム(早朝ビデオグのメンテ切断は有る) 切れない

〇1セッションテスト インターリンク Linuxルータ
RTX1100 インターリンク 単回線テスト
OBS Studio + nginx cloudn 2500K キーフレーム 切れない
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れない
OBS Studio + Ustream 2500k キーフレーム2秒 切れない
OBS Studio + Videog 512kbps キーフレーム(早朝ビデオグのメンテ切断は有る) 切れない

〇1セッションテスト インターリンク Linuxルータ
LINUX インターリンク 単回線テスト
OBS Studio + nginx cloudn 2500K キーフレーム 切れない
OBS Studio + nginx cloudn 2500k キーフレーム2秒 切れない
OBS Studio + Ustream 2500k キーフレーム2秒 切れない
OBS Studio + Videog 512kbps キーフレーム(早朝ビデオグのメンテ切断は有る) 切れない
OBS Studio + Nginx + Sakura 2500k,628k,368K キーフレーム2秒 切れない

〇1セッションテスト インターリンク Linuxルータ
LINUX インターリンク 単回線テスト
OBS Studio + Nginx + Sakura 2500k,628k,368K キーフレーム1秒 切れない
OBS Studio + Nginx + Cloudn 2500k,628k,368K キーフレーム1秒 切れない
OBS Studio + Nginx + Sakura 1628k,628k,368K キーフレーム1秒 切れない
OBS Studio + Nginx + Sakura 1628k,628k,368K キーフレーム1秒 切れない

関連コンテンツ