作为一个rtmp服务器,基本的验证机制是需要有的,srs很巧妙的使用了http callback的方式来实现验证机制。
1)首先,在服务器上,使用了如下配置:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
gop_cache off;
queue_length 10;
min_latency on;
mr {
enabled off;
}
mw_latency 100;
tcp_nodelay on;
http_hooks {
enabled on;
on_connect http://你服务器的IP/valid/test.php;
on_close http://你服务器的IP/test.php;
on_publish http://你服务器的IP/test.php;
on_unpublish http://你服务器的IP/test.php;
on_play http://你服务器的IP/test.php;
on_stop http://你服务器的IP/test.php;
}
}
其中,http_hooks就是挂接一些回调通知。 其它的主要是我测试的合适的低延时的一些配置,实测可以在1s左右的延时,很不错。
将“你服务器的IP”改为您网站的域名或者IP即可。然后建立一个test.php文件,如下代码:
$verifyData = file_get_contents("php://input");这样,每次无论推流还是观看,第一次进入会进入on_connect。 然后此时建议记录clientid(连接的标记),以及该clientID对应的用户信息。
比如,如果推流地址为 rtmp://127.0.0.1:1935/live/test?user=zhangsan&pass=123
可能第一次on_connect时收到的connect ID为 152, 此时需要php里面记录下152的连接对应的用户名是zhangsan。(本php代码中没有演示如何记录,随便你存内存还是数据库,自己想办法存),然后在on_publish时来验证张三有无推流到这个地址的权限。
看官你可能问了,为什么不直接在on_connect时判断呢? 原因是刚连上来,我不知道这个张三是要推流,还是观看。所以先留下来,等on_publish或者on_play再去校验。on_connect可以只做初步判断和记录。
推流验证可以在on_publish,播放验证需要在on_connect保存clientid对应的tcurl,并在on_play验证tcurl。