Доброе время суток,
Я выбрал nginx-rtmp-module для службы потокового вещания, которую я делаю, однако проблема, с которой я сейчас сталкиваюсь, заключается в том, что я не могу скрыть закрытый ключ, выданный приложение для пользователя, или в случае, когда я могу это сделать, поток постоянно останавливается каждые 9 секунд или около того.
Подходы, которые я выбрал:
1. Передача потока из приложения live в dash-live после запуска события on_publish . В течение этого времени генерируется новый открытый ключ потока, а затем закрытый ключ скрывается, и пользователь может просматривать поток, получая доступ к новому открытому ключу, но в этом случае поток останавливается каждые 9 секунд
2. Решение, которое выложено ниже, еще раз - но на странице статистики отображается ключ потока, который генерируется открытым ключом, но файлы для потока сохраняются в папке закрытого ключа, а манифест содержит закрытый ключевая информация, связанная с потоком
Я размышлял над этой проблемой около 10 дней или около того, задавал много вопросов в разных форках на github, однако, похоже, никто не знает, как решить эту проблему (хотя люди пытались это сделать).
С моей точки зрения, этот модуль не учитывает новый ключ, возвращаемый из обратного вызова on_publish при создании каталогов, но фактически использует его для публикации информации о потоке.
У меня есть следующий конфиг:
application live {
deny play all;
live on;
dash on;
on_publish http://app.local/api/stream/start;
on_publish_done http://app.local/api/stream/stop;
on_update http://app.local/api/stream/update;
dash_repetition on;
dash_fragment 5s;
dash_playlist_length 60s;
dash_cleanup on;
dash_nested on;
dash_clock_compensation http_head;
dash_clock_helper_uri http://live.local/time;
dash_path /tmp/dash/stream-dash;
}
Дело в том, что поток, создаваемый страницей / stats , фактически является новым открытым ключом, однако информация о фрагментах и манифесте по-прежнему записывается в папку закрытого ключа.
Почему на странице статистики отображается поток с открытым ключом, но данные по-прежнему записываются в папку с именем закрытого ключа?
P.S. А вот логика генерации нового открытого ключа написана на PHP
- Выписка заявка и имя из запроса
- Проверить, действительно ли в запросе есть эти значения (ожидая получить два, поэтому посчитаем их)
- Извлечение $ ключа (имя) и $ app (приложение) из полученного массива
- Кэширование информации о канале (здесь мы проверяем, существует ли канал с этим ключом потоковой передачи, и если это так, кешируем его в Redis)
- Проверка, является ли модель пустым , если это так, то предоставляется неверный ключ потока
- Извлечение Пользователь , связанный с Каналом
- Проверка, если Пользователь запрещен для потоковой передачи
- Создание новой записи Stream (со всеми данными, связанными с потоком RTMP и статусом Live)
- Формирование ключа кэша из модели (для исключения дальнейших запросов к базе данных)
- Обновление потокового кэша с информацией по умолчанию (все установлено на null )
- Отправка события в браузер, что поток начался
- Возвращение ответа 301 и установка Местоположение в хэш SHA-512 потока UUID
Ключ, полученный на шаге 12, фактически является новым открытым ключом, и, как вы можете видеть, страница статистики фактически возвращает этот точный ключ, однако данные по-прежнему записываются в ключ, полученный на шаге 3