如何对客户端隐藏 RTMP 流 url?
Posted
技术标签:
【中文标题】如何对客户端隐藏 RTMP 流 url?【英文标题】:How to hide the RTMP stream url from client? 【发布时间】:2017-04-29 14:07:25 【问题描述】:我有一个由 nginx-rtmp 驱动的自定义 RTMP 服务器。
这是我的配置:
server
listen 1935;
chunk_size 4000;
ping 10s;
ping_timeout 5s;
application live
live on;
wait_key on;
play_restart on;
当主播想要开始直播时,他/她会将内容发布到rtmp://myserver.com/live/someUserDefinedStreamName
。
当观众想要观看直播时,他/她会从 API 端点获取流 url,这就是问题所在。
someUserDefinedStreamName
字面意思是“公共”,这意味着每个人都可以将内容发布到此 url 以伪装成广播者。
关于这个问题有什么建议可以防止观众知道原始流网址吗?
例如,广播公司向rtmp://myserver.com/live/someUserDefinedStreamName
发布内容,而观众可以通过rtmp://myserver.com/live?someHashString
观看流,但如何?
【问题讨论】:
【参考方案1】:显然,您可以在配置文件中添加一些回调到 php 脚本,以便在用户发布视频时触发。
使用回调可以检查用户和密码。
I found this article
【讨论】:
【参考方案2】:您可以使用nginx-rtmp 模块中的选项轻松保护您的 rtmp 资源, 使用on_play 保护资源不被播放(通过检查自定义后端的权限)和on_publish 限制发布用户。
rtmp
application appname
# a url to your custom backend
on_play http://localhost:9090/check_user;
# backend server should return 200 for allowing otherwise return 401 or 403
# you can also return 301 or 302 like redirection for redirecting to
# other stream
on_publish http://localhost:9090/check_publish_perm;
# same conditions as on_play
【讨论】:
【参考方案3】:这是一个较老的问题,因此发布者可能不再需要答案,但这是我们目前为防止未经授权的发布者访问我们的 rtmp 流而采取的措施。如果您的发布商有动态 IP 地址,这不是最理想的解决方案。
rtmp
server
listen 1935;
chunk_size 4096;
application live
live on;
meta copy;
hls on;
hls_path /mnt/hls/live;
hls_fragment 5s;
hls_playlist_length 10s;
allow publish IP_ADDRESS_GOES_HERE;
deny publish all;
允许发布和拒绝发布行将传入源限制为允许中的源并拒绝所有其他源。
目前正在stack上寻找更好的解决方案
【讨论】:
以上是关于如何对客户端隐藏 RTMP 流 url?的主要内容,如果未能解决你的问题,请参考以下文章