输出HLS m3u8 TS段PHP-FPM Nginx

输出HLS m3u8 TS段PHP-FPM Nginx,php,nginx,ffmpeg,streaming,http-live-streaming,Php,Nginx,Ffmpeg,Streaming,Http Live Streaming,我正在阅读ffmpeg动态生成的m3u8 hls播放列表 基本上文件看起来像 #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:1

我正在阅读ffmpeg动态生成的m3u8 hls播放列表

基本上文件看起来像

#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的表:它保存流ID+用户ID+日期\开始和日期\结束和状态

一旦用户开始观察流,它就会添加新数据:示例

(StreamID : (2) , userID : (3) , Date_Start : Now() , Date_end : Null , status : ON )
一旦他关闭了连接,我想将日期_endwith Now()&状态更新为OFF

环境: Nginx、PHP-FPM和FFmpeg

我正在使用register\u shutdown\u函数('shutdown')写入上次更新

但是问题是,播放播放列表后,会多次执行关机操作,因为m3u8包含6段,每几秒钟会再次执行多次关机操作(更新区块列表),而我尚未关闭连接

我正在寻找一种将播放列表作为一个要保留的连接来处理的方法,因此只有当客户端中止连接时,才会执行函数shutdown,而不是在播放列表重新加载时执行


关于

即使您使用一个持久连接,PHP脚本也将针对每个播放列表请求执行,并且,正如您所注意到的,注册的关机函数将在每次运行结束时被调用

不要更新
Date\u end
而是立即记录HTTP请求以及用户和流ID,并定期计算统计数据。Eg.如果播放列表没有重新加载<代码> t>代码>时间,请考虑它是一个新的视图会话。 另外,我不知道您是如何跟踪用户ID的,但请记住,播放器软件可能不会维护会话,并且信息不会跨请求保存。您可以在播放列表和段URL中添加跟踪变量

这仅适用于实时播放列表,因为对于VOD,播放列表仅加载一次


如果您可以使用基于Web的播放器,则有望通过一些回调在客户端跟踪用户 SalutAsiaStruts,实际上我保留用户ID来保持用户统计在结束和双连接时,我完全不明白你的意思是:“如果播放列表没有被重新加载t时间,考虑它是一个新的视图会话。”我找不到一个很好的方法来解决它有一个输出的例子(类型+PID +时间+片段),如果您有多个并发用户同时请求相同的播放列表,您如何知道哪个是哪个?您需要一种跟踪每个请求/用户的方法。如果播放列表停止被请求的时间超过
TARGETDURATION
,则可以假定会话已结束,并使用上次请求的时间更新
Date\u end
。一旦用户请求保存在表连接上(userID、streamID、Date\u Start(with time())、data\u end(Null)、status(on)),我返回连接ID,在下一个请求段之后,我检查UserID和StreamID是否存在,如果存在,则返回该连接ID,否则添加到表中,因此稍后通过该连接ID,我将用当前时间()值和状态更新日期结束,现在问题部分是知道用户退出了流(意思是在注册时检测到关机功能)但是如何检测呢?现在让我们来谈谈你关于T时间的想法,如果你回到我发给你的pastebin,比如说我在关机时退出:20707 01:21:22pm(第29行),最后一个播放列表也是在播放列表:20707 01:21:22pm(第28行)生成的这意味着时间间隔是0秒,所以我无法准确地计算出如何比较它。这是另一个5分钟的日志