nginx hls配信するためのチューニング

nginx でhls配信できるようになったのはいいが、じっくり映像を見ると、時々途切れる。切れ目はおそらくtsファイルの切れ目じゃないかなと思う。受信バーが伸びていくが、それがなかなか伸びず、再生位置がどんどん迫り、受信バーが無くなった時点で配信が途切れて「プツ」っという感じになり。最悪はバッファしているのかウェイティングの時間が1s〜5sくらいクルクル出てくる。

そこで、セッティングを変えたらだいぶましになった。

     application multi_jp {
        live on;

        record all manual;
        record_unique on;
        record_path /tmp/rectmp/jp;
        record_suffix _jp.flv;
        exec_record_done /usr/sbin/yamdi -i $path -o /tmp/record/jp/$filename;

        on_play http://localhost:8080/on_play;

        hls on;
        hls_path /usr/local/nginx/html/hls/jp;
        hls_nested on;
        # tsファイルの分轄サイズ キーフレームの倍数にする事
        hls_fragment 15s;
        # m3u8ファイルに掲載する、分割tsファイルの長さhls_fragment15sで、playlist_length 1mならtsファイルは4つ掲載される
        hls_playlist_length 1m;
        # m3u8ファイルの一番最後に記載されているtsファイルから再生する
        hls_type live;

        hls_variant _lw BANDWIDTH=320000;
        hls_variant _md BANDWIDTH=576000;
        hls_variant _hi BANDWIDTH=2128000;
     }

 

hlsの設定だけでは、途切れが改善できなかったので、httpを吐くnginxの設定もチューニングした。

参考

nginx最大パフォーマンスを出すための基本設定
https://gist.github.com/koudaiii/386eb55a29b1adc19c5e

nginx でKeepAliveを設定してみる

nginx でKeepAliveを設定してみる

# Nginx本体のプロセス数は内部判定にまかせる
worker_processes auto;
# workerプロセスが最大に開けるファイル数の制限
worker_rlimit_nofile 100000;

events {
#一つのプロセスが開ける最大のコネクション数
worker_connections 2048;
#できるだけクライアントからのリクエストを受け取る
multi_accept on;
use epoll;
}

http {
include mime.types;
#default_type application/octet-stream;

# tuning for hls
#エラー画面のnginxバージョン番号非表示
server_tokens off;
#一つのデータパッケージにすべてのヘッダ情報を含む
tcp_nopush on;
#データをキャッシュしないでどんどん送信する
tcp_nodelay on;
#
access_log off;
#keep-aliveタイムアウト時間は少し短くしておく
keepalive_timeout 10;
#クライアントタイムアウト時間を少し短くする
client_header_timeout 10;
#クライアントタイムアウト時間を少し短くする
client_body_timeout 10;
#非アクティブのコネクションをクローズする
reset_timedout_connection on;
#クライアントへの送信タイムアウト
send_timeout 10;
#各種keyの共有メモリ設定
limit_conn_zone $binary_remote_addr zone=addr:5m;
#keyの最大コネクション数 一つのアドレスから100コネクションをリクエスト
limit_conn addr 100;
default_type text/html;
charset UTF-8;
#転送内容をgzipで圧縮
gzip on;
#圧縮gzip_httpバージョン
gzip_http_version 1.0;
#ie6圧縮禁止
gzip_disable "msie6";
#全てのプロキシも圧縮
gzip_proxied any;
#gzip圧縮する最低サイズ(これより小さいデータは圧縮しない)
gzip_min_length 1024;
#圧縮レベル 1-9で圧縮可能
gzip_comp_level 6;
#キャッシュをオープンする 同時最大数とキャッシュ時間の設定
open_file_cache max=100000 inactive=20s;
#キャッシュの検知間隔時間
open_file_cache_valid 30s;
#非アクティブファイルの最小ファイル数
open_file_cache_min_uses 2;
#ファイルのエラー情報もキャッシュ
open_file_cache_errors on;
##############
}