Получать поток HLS и ретранслировать

У меня есть коммерческий потоковый сервер, который транслирует потоки через HLS в Европе.

http://europe.server/stream1/index.m3u8

Теперь у моих клиентов в США возникли проблемы с сетью из-за расстояния.

Итак, я развернул новый сервер в США. Я бы хотел, чтобы он получал потоки HLS с европейского сервера и отвечал клиентам из США.

Таким образом, пользователи могут получить доступ как

http://usa.server/stream1/index.m3u8

Это будет только H265 / HEVC, поэтому использование RTMP невозможно. Каждый учебник, который я вижу в Интернете, основан на RTMP.

Я использовал следующую конфигурацию из https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/ для справки.

worker_processes  auto;
events {
    worker_connections  1024;
}

http {
    sendfile off;
    tcp_nopush on;
    aio on;
    directio 512;
    default_type application/octet-stream;
    
    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';
            
            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';
            
            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }   
            
            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }   
            
            root /mnt/;
        }   
    }
}

person user9066046    schedule 21.09.2020    source источник


Ответы (2)


Это намного проще, чем кажется.

Вам не нужно ничего, кроме кеширующего прокси-сервера. Вся видеоработа уже сделана за вас.

Конфигурационный файл Nginx, подобный этому, подойдет:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=100g 
             inactive=10m use_temp_path=off;

server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://europe.example.com;
    }
}

См. Также: https://www.nginx.com/blog/nginx-caching-guide/#proxy_cache

Кроме того, я настоятельно рекомендую использовать существующий CDN, который повысит производительность и снизит ваши затраты на обслуживание.

person Brad    schedule 22.09.2020
comment
Именно то, что я искал. Я использовал этот docs.peer5.com/guides/use- nginx-as-wowza-cache как базовый и обновленный для моих нужд. Спасибо. - person user9066046; 22.09.2020

Непонятно, в чем вопрос, но ответ такой: нет, nginx для этого не годится.

Вам по-прежнему нужен сервер потокового видео в США, потому что, если вы хотите доставить dash + hls, вам нужно перепаковать видео в США в обоих контейнерах.

Nginx отправит весь трафик дважды (более двух раз), видеостример отправит его один раз.

person Max Lapshin    schedule 22.09.2020