Nginx RTMP Pull для потоковой передачи HLS - PullRequest
2 голосов
/ 06 мая 2020

Я следовал этому руководству по настройке потоковой передачи RTMP для HLS - https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/

Потоковая передача RTMP работает нормально, но по какой-то причине я не могу заставить HLS связываться с уже существующий RTMP сервер. Я использую OBS для потоковой передачи в RTMP, и он настроен на x264, и, насколько я знаю, код по умолчанию c для звука - AA C, поэтому я не уверен, почему он не принимает его.

Текущий Nginx .conf

worker_processes  auto;
events {
    worker_connections  1024;
}

# RTMP configuration
rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

# Define the Application
        application show {
            live on;
            pull rtmp://localhost:1935/stream/test;
            # Turn on HLS
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }

        # RTMP video on demand for mp4 files
        application vod {
            play /mnt/mp4s;
        }

        # RTMP stream using OBS
        application stream {
            live on;
        }

    }
}

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/;
        }
    }
}

Я попытался изменить ссылку rtmp, которая есть в этой конфигурации, как на внутренний, так и на внешний IP-адреса, так как она доступна. Я протестировал просмотр rtmp с другого компьютера в сети, чтобы убедиться, что он работает. Я хотел избежать перекодирования с помощью ffmpeg, поскольку у сервера нет такой мощности.

1 Ответ

1 голос
/ 07 мая 2020

Вот и разобрался. По сути, все, что я искал, - это преобразование RTMP в HLS без необходимости перекодирования. Если кто-то еще это видит и нуждается в этом, это довольно просто, однако вам нужен ffmpeg, чтобы это осуществить. По сути, вы указываете ffmpeg передать поток в HLS, и поскольку OBS уже находится в правильном видео / аудио формате, он без проблем примет его. Я использовал следующую команду:

ffmpeg -re -i rtmp://localhost:1935/stream/test -codec copy -f flv /mnt/hls/stream.m3u8

Выполнение этого способа практически не повлияло на мой процессор, что было именно тем, что мне было нужно.

...