hls — HTTP Live Streaming с 1 разрешенным подключением & amp; Переполнение стека

Я пытаюсь создать небольшую систему, которая будет обслуживать списки воспроизведения HLS (m3u8), которые будут содержать несколько сегментов.

Сегменты будут загружены и отправлены из PHP. Например, сегменты будут выглядеть так:

segment.php?stream=1&username=X&password=X&file=01.ts
segment.php?stream=1&username=X&password=X&file=02.ts

Теперь, я уже сделал эту систему и работает нормально, НО у меня действительно много проблем, когда дело доходит до ограничения соединений. В общем, я хочу ограничить одного клиента (uname / pass), чтобы он мог открывать только 1 поток за раз.

Допустим, у нас есть 2 потока в следующем формате

1.m3u8
2.m3u8

И я называю их так (PHP Url Rewrite to php file):

http://site/1.m3u8?username=X&password=X
http://site/2.m3u8?username=X&password=X

И у каждого из них есть вышеупомянутые сегменты, которые я объяснил наверху.

Как я могу ограничить каждого клиента, чтобы он мог открыть ТОЛЬКО 1 соединение одновременно но в то же время Дайте ему переключиться на 2-й канал (закрыть первое), без проблем?

Я потратил несколько дней, чтобы понять это, и всегда что-то не работает хорошо.

Мне не нужно, чтобы вы предоставили мне код, просто какую-то идею или план, который мог бы мне помочь.

Также я использую NGINX, если это имеет значение.

3

Решение

Трудно определить ТОЧНО, чего вы пытаетесь достичь, учитывая предоставленную вами информацию, но вот идея.

Используйте вашу базу данных. Вам понадобится как минимум 2 таблицы.

  1. Таблица пользователей (вы, вероятно, уже получили это, если у вас есть пользователи)
  2. Таблица потоков

    В таблице потоков хранится каждый поток с указанием пути, статуса и идентификатора пользователя.

    +----+---------+----------------+--------+
    | id | user_id |  stream_path   | status |
    +----+---------+----------------+--------+
    | 1  |    1    | path/to/stream |    0   |
    +--------------+----------------+--------+
    | 2  |    1    | path/to/stream |    1   |
    +----|---------+----------------+--------+
    

Когда пользователь открывает первый поток, установите для него статус активный (1), а для второго — неактивный (0), а когда пользователь откроет второй поток, установите для этого потока статус активный (1), а для предыдущего потока — неактивный (0). ,

На стороне клиента проверьте, активен ли используемый ими поток, и уничтожьте поток, если он неактивен.

Также из соображений безопасности вы не хотите передавать информацию пользователя в потоке, и в этом подходе вам не нужно. База данных будет аутентифицировать пользователя, и оттуда вы можете запросить, к каким потокам у них есть доступ и их статус. Если вам нужно больше динамики для ваших запросов, вы можете разбить значения по нескольким таблицам, таким как таблица потоков, user_streams, stream_status и т. Д., Но одна таблица подойдет для потоков, если нет.

Если вы хотите предоставить более подробную информацию о том, каков ваш точный сценарий, я был бы рад обновить мой ответ.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]