nginx でhlsライブ配信 途中経過

nginx で hls ライブ配信にトライしている。

マルチビットレートへの変換はうまくいった。今度は、hls ライブ配信してみたい。iOSでも受信できるのが目標。

hls配信は、一応実現しているのだが、なぜか途中で切断してしまう。

Nginxのマニュアルはここ
https://github.com/arut/nginx-rtmp-module/wiki/Directives#hls

hlsの項目を注意深く見るが、途中で切断してしまうもんだいについては、

hls_fragment

Syntax: hls_fragment time
Context: rtmp, server, application

Sets HLS fragment length. Defaults to 5 seconds.
ここに設定された秒数で動画ファイルを分割

この項目くらいかなと思う。この長さを長くしていけばサーバの負荷は減るはず。今現在はサーバの負荷が問題なのか、クライアント側で問題を起こしているのかは不明。

今から
hls_fragment 30s
に変更してテスト

rtmp {
   server {
   listen 1935;

   application src {
      live on;

      exec ffmpeg -i rtmp://192.168.0.98/src/$name
      -c:a libfdk_aac -b:a 64k -s 320x180 -c:v libx264 -b:v 256k -f flv rtmp://192.168.0.98/hls/$name_low
      -c:a libfdk_aac -b:a 128k -s 640x360 -c:v libx264 -b:v 512K -f flv rtmp://192.168.0.98/hls/$name_mid
      -c:a libfdk_aac -b:a 128k -s 1280x760 -c:v libx264 -b:v 1024K -f flv rtmp://192.168.0.98/hls/$name_hi;
   }

   application hls {
      live on;

      hls on;
      hls_path /usr/local/nginx/html/live/hls;
      hls_nested on;

      hls_fragment 30s;

      hls_variant _low BANDWIDTH=320000;
      hls_variant _mid BANDWIDTH=640000;
      hls_variant _hi BANDWIDTH=1280000;
   }
  }
}

※後日談

hls_variant _hi のBANDWIDTHは、128k + 1024kになってないといけない。

どのプレーヤで見ても真っ暗

んじゃ
hls_fragment 1s

にしたら、うまくいかない。じゃ、一番負荷が少なくなるようにしてみる。

エンコードは一本のみ
rtmp {
server {
listen 1935;

application src {
live on;

exec ffmpeg -i rtmp://192.168.0.98/src/$name
-c:a libfdk_aac -b:a 64k -s 320×180 -c:v libx264 -b:v 256k -f flv rtmp://192.168.0.98/hls/$name_low;
}

application hls {
live on;

hls on;
hls_path /usr/local/nginx/html/live/hls;
hls_nested on;

hls_fragment 1s;

hls_variant _low BANDWIDTH=320000;
}
}
}

エンコードを開始してからしばらく時間がかかるけど、再生される。この状態で推移させる。11:57 –

考察
やっぱり負荷がかかってるのかなぁ。