10

Ubuntu 12.04

nginx 1.2.4

avconv -バージョン

avconv version 0.8.10-4:0.8.10-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Feb  6 2014 20:56:59 with gcc 4.6.3
avconv 0.8.10-4:0.8.10-0ubuntu0.12.04.1
libavutil    51. 22. 2 / 51. 22. 2
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0

私は avconv と nginx を使用して HLS ストリームを作成していますが、現在、レイテンシーは定期的に 30 秒をはるかに超えています。よく読んだ後、HLS には遅延が組み込まれており、10 秒が予想され、推奨されることもありますが、30 秒は非常に極端なようです。

nginx-rtmp Google グループで多くの議論を見てきましたが、特にこのスレッドには多くの提案がありました。と を減らすことで問題を解決しようとしましhls_fragmenthls_playlist_lengthが、大きな効果はありませんでした。

nginx.conf:

#user  nobody;
worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

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

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8888;
        server_name  localhost;

        add_header 'Access-Control-Allow-Origin' "*";

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
        }

        # rtmp stat
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            # you can move stat.xsl to a different location
            root /usr/build/nginx-rtmp-module;
        }

        # rtmp control
        location /control {
            rtmp_control all;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;

        application myapp {
            live on;

            hls on;
            hls_path /tmp/hls;
            hls_base_url http://x.x.x.x:8888/hls/;
            hls_sync 2ms;
            hls_fragment 2s;

            #hls_variant _low BANDWIDTH=160000;
            #hls_variant _mid BANDWIDTH=320000;
            #hls_variant _hi BANDWIDTH=640000;
        }
    }
}

avconv コマンド:

avconv -r 30 -y -f image2pipe -codec:v mjpeg -i - -f flv -codec:v libx264 -profile:v baseline -preset ultrafast -tune zerolatency -an -f flv rtmp://127.0.0.1:1935/myapp/mystream

編集

nginxを使用してRTMPストリームも生成しているため、ボトルネックになっているのはavconvではないことはわかっています。この RTMP ストリームには非常にわずかな遅延 (数秒) があります。

4

2 に答える 2

8

hls_playlist を 4 秒に、hls_fragment を 1 秒に減らすことを詳述した回答は適切です。ただし、ソース ビデオのキー フレーム間隔が hls_fragment の長さよりも長い場合、nginx は通常、より長いフラグメントを作成する必要があり、レイテンシが増加することに注意することが重要です。

達成した最小レイテンシは、hls_fragment が 1 秒で、ソース ビデオのキー フレーム間隔も 1 秒でした。これらの設定により、7 秒未満のレイテンシを達成しました。

于 2016-08-14T12:33:02.130 に答える
6

私はかつて同じ問題を抱えていました。nginx.conf に 2 つのパラメーターを追加すると、レイテンシーがさらに 10 秒短縮されました。ここに私のconfがあります:

    application hls {
        hls_playlist_length 4s; 
        hls_fragment 1s
    }

ただし、10 秒が限界のようです。より良い解決策はありますか?

于 2016-05-26T03:52:02.960 に答える