“自主研发直播”实现nginx rtmp模块多通道输入输出和权限控制
浏览:1093 次

我之前写过一篇文章,使用nginx和nginx rtmp模块实现直播。
然而,在此之前,只能进行直播。只有一个人可以推这条小溪。它没有实现多人、多通道的输入输出,也没有权限控制。只要您知道rtmp URL,就可以推送。
本文基于前一篇文章。
原始地址:
1、 权限控制
说实话,我检查了很长时间,但没有找到任何原因。最后,我花了半天时间研究了nginx rtmp模块文档,终于找到了答案。
文件中有两个主要部分需要注意:
实时配置发布_通知部分
publish_ Notify中Notify的配置部分
1.现场发布_通知
所谓的publish_ Notify是指publish_ Notify默认关闭,主要涉及推送过程中的一些事件。
打开publish_ Notify允许您配置Notify。
发布_通知;
2.Notify的配置
Notify的配置与实时事件和回调代码的执行有关。
例如,流式链接、直播开始、直播结束状态,然后异步调用http链接进行一些逻辑处理。
主要配置参数如下:
连接(_O)
正在播放
发布(_O)
on_完成
on_播放_完成
发布时完成
记录完成

_更新
......
从以上配置参数可以看出,可以触发连接、直播、输出、直播结束等,从而进行权限验证
例如,当触发流时,您可以使用on_publish控件权限,接收相关参数并控制它们。如果用户不存在,则不允许流式传输。
2、 多通道I/O
这里的多通道I/O意味着有多个活人,每个人都有不同的输出地址。
1.直播终端
很多人有不同的流媒体和直播地址,这涉及到直播参数。事实上,在各种平台上进行直播时,除了地址之外,还有直播键或直播码。
以OBS为例。选择自定义流媒体服务器作为流媒体类型,然后将显示URL和流媒体密钥。
流密钥是实现多通道输入输出的关键。
2.Rtmp发布配置
由于需要权限控制,因此需要使用发布。首先,您需要验证您的权限,以证明您有推送流的权限。
因此,rtmp的配置如下(结尾将给出完整的配置示例):
因为我们只讨论权限控制,所以我们不需要关心hls等。我也发表了评论。
#将直播的app名称设置为myapp
appmyapp{
继续;#Live on表示已启用Live模式
发布_通知;
发布(_O)https://tp5.ptbird-ubuntu/on_publish.html ;
#hls打开;
#hls_路径/tmp/hls;
#hls_片段2s;
#hls_播放列表_长度6s;
}

关键配置为:_发布;
以下是假定在web服务器上的处理程序。互联网上的一些人认为这种逻辑在本地nginx上。我建议不要把它混为一谈,直接部署在其他可以连接的web服务器上。
我安装在我的另一台ubuntu kylin web服务器上。
无论如何,可以访问的PHP处理是可以的。再多说也没用。
3.权限验证URL
示例的配置如下所示。这是模板配置的示例。
流密钥的格式为:test?Pass=123456。可以看出,这与url的get参数配置非常相似。Test是用户名,pass是密码。
为什么没有名称=测试
因为name是rtmp on_发布的默认参数name不能更改。
不得使用GET['name'],但应使用POST
起初,我总是使用get来获取参数,但我发现它并不成功,无法验证--
后来在网上查询后发现,get无法用于获取参数。尽管流密钥的格式类似于get类型,但必须使用POST来获取参数。
自定义参数
除了名称不能更改之外,其他参数可以自定义
例如,pass=123456&Check=123455
3、 代码验证权限
1.ThinkPaPHP 5版本
这里使用PHP进行验证。顺便说一下,我在thinkphp5框架中部署了上面的url。
因此,我实际上有一个路由,只使用带有html后缀的URL。
//配置直播推送的URL
路由::规则('on_publish','index/publish/index');
实际逻辑很简单:
接收两个参数
通过数据库验证

返回验证信息
必须返回http标头。返回2xx表示成功,3xx i