Nginx RTMP динамическое имя потока - PullRequest
0 голосов
/ 17 марта 2019

Доброе время суток,
Я пытаюсь создать простой RTMP / HLS-сервер, чтобы иметь возможность осуществлять потоковую передачу и просматривать потоки, однако я не могу изменить имя каталога, на которыйnginx-rtmp-module (модуль) сохраняет данные.

Все работает просто отлично, я могу транслировать на сервер и затем просматривать поток HLS в браузере, однако единственный способ сделать это - ввести ключ потока в качестве целипапку на сервере, чтобы получить файл m3u8.

В настоящее время у меня есть следующие настройки:

  1. Ключ потока генерируется на сервере и затем отображается наclient
  2. Клиент вводит: rtmp: //live.local/live в качестве конечной точки и затем вставляет ключ, сгенерированный на шаге 1
  3. По запросу на запуск потока модуль вызывает on_publishв http://app.local/stream/start, где сначала проверяется, существует ли ключ в базе данных, и, если это так, он создает новую запись базы данных для потока (с UUID в качестве первичного ключа), получает ключ, полученный при создании записии возвращает его в скрипт
  4. Скрипт принимает UUID, полученный на шаге 3, затем использует алгоритм SHA-512 для генерации уникальной строки (которую планировалось использовать в качестве имени каталога)
  5. После хеширование выполняется, сценарий возвращает 301 с заголовком местоположения
  6. . Теперь сам поток переименовывается, однако папка, в которой хранятся файлы, остается ключом потока вместо хешированного значения, полученного на шаге 4 и возвращенного на шаге 5.

Кто-нибудь знает, как:

  1. Переименовать поток (думаю, я уже это сделал)
  2. Переименовать каталог для файлов потоков
  3. ИЛИ есть ли способ динамически переписать все запросы, например, клиентские запросы http://live.local/stream/here_is_the_hashed_uuid/index.m3u8, php принимает значение хеша, получает список активных потоков, хеширует все потоки 'uuid и, если совпадает, возвращает файлы из другого каталога

Любая помощь действительно приветствуется!И спасибо за ваше время!

PS Просто небольшой пример того, что у меня есть сейчас и чего я хочу достичь

Ключ потока: test_stream_key_user_1
1053 * Хэшировано ключ: 73E179A6DB3796A3120319BFE80763427A2122253A5C1D347461268304B28CEB98CE3813DDF5FA8B7173937ED9386169FD3BF8E8C3765BC53BB151C7F5B1431E

1056 * Текущий каталог именование: /tmp/hls/test_stream_key_user_1/index.m3u8
Желаемая каталог имен: /tmp/hls/73E179A6DB3796A3120319BFE80763427A2122253A5C1D347461268304B28CEB98CE3813DDF5FA8B7173937ED9386169FD3BF8E8C3765BC53BB151C7F5B1431E/index.m3u8

PPS думал, что мои Nginx файлы конфигурации может помочь

1067 * конфигурация RTMP 1070*
server {
listen 1935;
ping 30s;
notify_method get;
notify_update_timeout 10s;

application live {
    live on;
    hls on;
    hls_nested on;
    hls_path /tmp/hls;
    hls_fragment 3;
    hls_playlist_length 60;
    on_publish http://app.local/api/stream/start;
    on_done http://app.local/api/stream/stop;
    on_update http://app.local/api/stream/update;
    }
}

Конфигурация сервера (APP)

server {
    listen 80;
    listen [::]:80;

    root #replaced#;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name app.local www.app.local;

    location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }

    # PHP-FPM Configuration Nginx
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    location /api {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /sitemap.xml {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /login {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /broadcasting {
            try_files $uri $uri/ /index.php?$query_string;
    }


    location ~ /\.ht {
            deny all;
    }
}

Конфигурация сервера (LIVE)

server {
    listen 80;
    listen [::]:80;

root #replaced#;

    index index.html index.htm index.nginx-debian.html;

    server_name live.local www.live.local;

location /stat {
    rtmp_stat all;
    rtmp_stat_stylesheet original_stat.xsl;
}

location /control {
    rtmp_control all;
}

location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    location /stream {
            try_files $uri $uri/ /index.php?$query_string;
    }

location /hls {
    add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
            add_header 'Access-Control-Allow-Headers' 'Range';

    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Headers' 'Range';
        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 /tmp;
    add_header Cache-Control no-cache;
    }

location /dash {
    root /tmp;
    add_header Cache-Control no-cache;
    add_header 'Access-Control-Allow-Origin' '*' always;
    }
}
...