如何对客户端隐藏 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?的主要内容,如果未能解决你的问题,请参考以下文章

您如何仅通过 Javascript 读取 RTMP 流?

视频流媒体推流平台RTMP协议是如何进行网络连接并推送视频流的?

如何从此 URL 获取 RTMP 和流名称? [关闭]

RTMP协议抓包分析推流过程

RTMP协议抓包分析拉流过程

怎么查看流媒体服务器中所有的rtmp流