伪静态视频中的实时m3u8流

时间:2018-09-30 05:50:57

标签: php sql nginx hls m3u8

背景故事是一位希望具有满足以下要求的24/7播放实时视频流的客户:

  • 如果有人连接到原点并进行流播,请捡起
  • 如果来源是音频,请添加静态图片;如果不是按原样播放
  • 如果没有来源,请检查预编程的“直播”流
  • 如果存在预编程的视频流,请播放
  • 如果不存在预编程的流,请播放列表中的随机视频

因此,基本上,他们希望确保只要有人连接到流,某事总是在播放。

我所做的是:

[实时直播]

  • 设置一个可写入m3u8文件的nginx-rtmp-模块

[实时直播]

  • 控制面板以将资产添加到已编程的流
  • 将流信息写入数据库

[随机直播]

  • 选择随机文件并播放的脚本

然后我有一个中央live.m3u8,它按顺序执行以下操作:

  1. 如果nginx-rtmp文件夹中存在m3u8,则流通过
  2. 如果为!m3u8,请检查数据库中已编程的流并播放
  3. 如果使用!program,请选择随机文件并流式传输
  4. 如果!视频,则注入静态图片,否则直接播放

我的数据库表是基于以下事实:创建列表时,必须为第一视频 选择固定的开始时间。列表将始终是连续的,并围绕该列表创建一个连续的24小时循环。例如,如果他们从1500小时开始选择10个40分钟的视频,那么,那么我将在1500-1900小时窗口(0300-0700-1100-1500-1900-2300)周围创建400分钟的区块。

这是通过在数据库中记录每个段的开始时间来完成的,所以我的表如下所示:

id     order     extinf          start         file
112    100       10.000000       15:00:00      112.ts
113    101       10.000000       15:00:10      113.ts
114    102       10.000000       15:00:20      114.ts
300    103       12.000000       15:00:30      300.ts
301    104       12.000000       15:00:42      301.ts
302    105       12.000000       15:00:54      302.ts
303    106       12.000000       15:01:06      303.ts

这样,当用户要求“实时”流时,我的查询如下:

SELECT
    m3u8.order, m3u8.extinf, m3u8.file, m3u8.start
FROM
    video_hls
WHERE
    m3u8.start >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MINUTE),'%H:%i:%s') AND m3u8.start <= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 MINUTE),'%H:%i:%s')
ORDER BY
    m3u8.order ASC

选择前一分钟和后三分钟的技巧,再加上#EXT-X-DISCONTINUITY标签的使用,将使玩家认为自己已经加入了正在进行的直播并对其进行了对待。 / p>

现在的问题是,每当有人在23:59:59-00:00:00边界上观看时,他们都会流失并必须重新连接,然后一切都很好。

“开始”列是普通时间,我的SELECT语句仅处理H:i:s,因此,没有什么-我可以看到-可以实现此目标,所提供的m3u8文件看起来非常好(它可以正常工作对于一天中其他所有86398秒),它也不包含任何日期信息,只是一个接一个的普通文件。

对于这种行为,我似乎根本找不到任何原因...(可悲的是,由于它是订阅服务,因此受到严格的监视和保护,我无法共享URL。)

0 个答案:

没有答案
相关问题