Я читаю динамически генерируемый плейлист m3u8 hls из ffmpeg
в основном файл выглядит как
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:3
#EXTINF:11.000000,
2_3.ts
#EXTINF:8.000000,
2_4.ts
#EXTINF:11.000000,
2_5.ts
#EXTINF:11.000000,
2_6.ts
#EXTINF:8.000000,
2_7.ts
#EXTINF:11.000000,
2_8.ts
Я пытаюсь найти способ ограничить соединение одним соединением.
У меня есть таблица под названием Connection: она сохраняет идентификатор потока + идентификатор пользователя + Date_Start & date_end & статус
Когда пользователь начинает смотреть поток, он добавляет новые данные: пример
(StreamID : (2) , userID : (3) , Date_Start : Now() , Date_end : Null , status : ON )
как только он закрыл соединение, я хотел бы обновить date_end с Now () & статус ВЫКЛ
Окружающая среда:
Nginx, PHP-FPM & FFmpeg
я использую the register_shutdown_function( 'shutdown' )
написать последнее обновление
однако проблема заключается в том, что после воспроизведения списка воспроизведения выключение выполняется много раз, поскольку duo к m3u8 содержит 6 сегментов, каждые несколько секунд завершение работы выполняется много раз снова (обновляется список чанков), пока я еще не закрыл соединение.
Я ищу способ обработки списка воспроизведения как одного соединения, которое нужно сохранить, поэтому отключение функции будет выполняться ТОЛЬКО при прерывании соединения клиентом, а не при перезагрузке списка воспроизведения
С уважением
Даже если вы используете одно постоянное соединение, PHP-скрипт будет выполняться для каждого запроса списка воспроизведения, и, как вы заметили, зарегистрированная функция завершения будет вызываться в конце каждого запуска.
Вместо обновления Date_end
немедленно регистрируйте запросы HTTP вместе с идентификаторами пользователя и потока и периодически вычисляйте статистику. Например. если плейлист не был перезагружен для T
время посмотрим, это новый сеанс просмотра.
Кроме того, я не знаю, как вы отслеживаете идентификатор пользователя, но имейте в виду, что программное обеспечение плеера, скорее всего, не будет поддерживать сеанс, и информация не будет сохраняться между запросами. Вы можете добавить переменные отслеживания в список воспроизведения и сегменты URL.
Это работает только для живых плейлистов, потому что для VOD плейлист загружается только один раз.
Если вы можете использовать веб-проигрыватель, можно надеяться, что вы сможете отследить пользователя на стороне клиента с помощью некоторых обратных вызовов.
Других решений пока нет …