我正在尝试制作一个小系统,它将提供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.m3u8
2.m3u8
我这样调用它们(将php url重写为php文件):
http://site/1.m3u8?username=X&password=X
http://site/2.m3u8?username=X&password=X
每一个都有我在上面解释过的部分。
如何限制每个客户机,使他一次只能打开一个连接,但同时让他切换到第二个通道(关闭第一个通道),而没有任何问题?
我花了好几天的时间来解决这个问题,但总是有些事情不好用。
我不需要你提供代码,只要一些想法或计划,可能会帮助我。
另外,如果重要的话,我正在使用nginx。
最佳答案
考虑到你提供的信息,很难确定你到底想达到什么样的目标,但这里有一个想法。
使用你的数据库。你至少需要两张桌子。
用户表(如果有用户,可能已经有了此表)
流表
在stream表中,存储每个流及其路径、状态和用户id
+----+---------+----------------+--------+
| id | user_id | stream_path | status |
+----+---------+----------------+--------+
| 1 | 1 | path/to/stream | 0 |
+--------------+----------------+--------+
| 2 | 1 | path/to/stream | 1 |
+----|---------+----------------+--------+
当用户打开第一个流时,将其状态设置为活动(1),将第二个流设置为非活动(0),当用户打开第二个流时,将此流状态设置为活动(1),将上一个流设置为非活动(0)。
在客户端,检查他们正在使用的流是否处于活动状态,如果流处于非活动状态,则销毁该流。
另外,出于安全原因,您不想将用户信息与流一起传递,在这种方法中,您不必传递。数据库将对用户进行身份验证,从中您可以查询他们有权访问的流及其状态。如果您需要对查询进行更多的动态处理,您可以在多个表(如streams表、user_streams、stream_status等)中分解这些值,但如果没有,则一个表可以处理这些数据流。
如果你想提供更多的细节,你的确切情况是什么,我很乐意更新我的答案。
关于php - 具有1个允许的连接和PHP的HTTP实时流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190636/