输出HLS m3u8 TS段PHP-FPM Nginx

时间:2016-04-06 21:34:44

标签: php nginx ffmpeg streaming hls

我正在阅读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 + Date_Start& Date_end&状态

用户开始观看流后,会添加新数据:示例

(StreamID : (2) , userID : (3) , Date_Start : Now() , Date_end : Null , status : ON )

一旦他关闭了连接,我想用Now()&更新date_end。状态为OFF

环境: Nginx,PHP-FPM& FFmpeg的

我使用the register_shutdown_function( 'shutdown' )撰写上次更新

然而问题是一旦播放播放列表,关闭执行多次,m3u8包含6个段,每隔几秒钟关闭执行多次(两个块列表更新),而我还没有关闭连接

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

此致

1 个答案:

答案 0 :(得分:0)

即使您使用单个持久连接,也会为每个播放列表请求执行PHP脚本,并且,就像您注意到在每次运行结束时都会调用已注册的关闭函数。

不是更新Date_end,而是立即记录HTTP请求以及用户和流ID,并定期计算统计信息。例如。如果在T时间内没有重新加载播放列表,请考虑它是一个新的视图会话。

另外,我不知道您是如何跟踪用户ID的,但请记住,播放器软件不太可能维护会话,并且不会跨请求保存信息。您可以在播放列表和细分网址中添加跟踪变量。

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

如果您可以使用基于Web的播放器,您可以通过一些回调在客户端跟踪用户。