Имя динамического потока Nginx RTMP

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

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

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

  1. Ключ потока генерируется на сервере и затем показывается клиенту
  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
Хэшированный ключ: 73E179A6DB3796A3120319BFE80763427A2122253A5C1D347461268304B28CEB98CE3813DDF5FA8B7173937ED9386169FD3BF8E8C3765BC53BB151C7F5B1431E

Текущее имя каталога: /tmp/hls/test_stream_key_user_1/index.m3u8
Желаемое имя каталога: /tmp/hls/73E179A6DB3796A3120319BFE80763427A2122253A5C1D347461268304B28CEB98CE3813DDF5FA8B7173937ED9386169FD3BF8E8C3765dex.

PPS: я подумал, что мои файлы конфигурации nginx могут помочь.

RTMP-конфигурация

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

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

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

Конфигурация сервера (ЖИВАЯ)

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

Не могли бы вы найти способ?

Miad Abdi 15.03.2021 23:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
1
3 360
0

Другие вопросы по теме