背景
在前一篇文章中已经完成了权限的鉴定,让没有权限的用户不能进行推流,这样达到了非法用户滥用推流资源的效果,也可以设置对应的黑名单,让黑名单的用户不能进行推流;现在需要对直播房间进行管理。
房间管理
-
在数据库创建对应直播房间的表,roomcheckcode存放的是验证码,用于验证用户是否有权限进行推流;roomstatus表示房间是否开始直播;
- 当用户进行推流的时候会走Nginx推流的通知,在那个通知里面进行数据库的更新,让roomstatus更新为1;当用户推流结束的时候走推流结束通知,更新数据库把roomstatus更新为0,这样就能够很准确的了解到当前直播房间的状态。
- 当用户使用VLC进行rtmp播放地址播放的时候,就会走Nginx的播放通知,这样数据的roomCount就会+1,当用户完成播放的时候,就会走播放完成通知,数据库roomCount就会-1,这样就能比较准确的统计到当前房间的人数。
- 根据updatetime和roomstatus进行定时清理空闲房间。
<?php
define('CLEARTIME',(60 * 10));//十分钟清理一次
require_once ('../common/DBConnection.php');
$sql = 'select * from live_room_t order by updatetime asc';
$con = DBConnection::getConnect();
$result = $con -> query($sql);
while($row = mysqli_fetch_array($result)) {
$updatetime = strtotime($row['updatetime']);
$status = (int)$row['roomstatus'];
$timeout = time() - $updatetime > CLEARTIME ? true : false;
if ($timeout && $status == 0){
deleteroom($row['roomid'],$con);
}
}
//删除房间
function deleteroom(string $roomId,$con){
$sql = "delete from live_room_t where roomid = '%s'";
$sql = sprintf($sql,$roomId);
$con -> query($sql);
}
$con->close();
echo "清理完成...";