回答
收藏
分享
举报
nginx rtmp 播放本地视频,如何实现目录层级查找
提问于2020-11-20 15:43

浏览 570

文章标签

rtmp {

              server {
                                   listen 1935; #服务端口--默认
                                   application vod {
                                   play /opt/video/vod/;
                                }

                   }

}

当我访问:rtmp://example.com/vod/test.mp4

默认去/opt/video/vod/ 下查找, 但是视频是根据摄像头的id划分目录的,分别在不同的目录下,比如

rtmp://example.com/vod/1/test.mp4

这样的url就无法访问,如何实现自动层级查找呢





已修改于2023-03-17 02:11



写下您的回答
发表回答
全部回答(2)

按点赞数排序

按时间排序

按照官方的 rtmp 规范文档第 30 页的内容,"rtmp://example.com/vod/1/test.mp4" 这种 url 是错的,因为规范文档里写明了 tcUrl 的格式是 "protocol://servername:port/appName/appInstance",即 url 中除了协议名,主机名和端口外,只能有两层。而你的 url 是3层,所以无法访问。

解决办法有 3 种:

1. 可以将 application vod 修改为 application x (x 是数字),但是这中配置不太灵活,因为服务器无法事先知道你有多少个摄像头。

2. 摄像头生成的媒体文件带上编号,例如:1 号摄像头生成的媒体文件是 1_test.mp4,2 号摄像头生成的媒体文件是 2_test.mp4,以此类推。

3. 你这使用的是 nginx-rtmp-module 及其各种变种吧,源代码都开放了,如果有能力,可以自己修改源代码以达到要求。

赞同

1

回复举报

回答于2020-11-20 21:42



回复winshining1202
回复

不错

赞同

0

回复举报

回答于2020-11-23 21:29



回复jiangyidigital
回复
提问者
子曰
这家伙很懒还未留下介绍~
0
文章
1
问答
0
粉丝
相关问答

有2个解决方案:

1、基于CORS,即Cross-Origin Resource Sharing,解决浏览器端的安全策略问题。又可以细分为2种,一种叫复杂请求,也就是上面dongchch的答案,对于OPTIONS请求的处理,当然后面的proxy_pass是无关的。一种叫简单请求,直接添加Access_Control_Allow-Origin头部就可以了,浏览器会处理的。

具体你可以参见我的这一课:《如何合法的跨域》https://time.geekbang.org/course/detail/100026801-98913

2、用反向代理解决。你可以直接用proxy_set_header等指令,用Nginx代理时模拟非跨域的客户端,访问实际的应用服务器,并修改应用服务器响应中的域名即可。

点赞 0
浏览 677

你好环山绕水,抱歉昨天直播时没看清你的问题,现在明白了,你可以对子目录做精确匹配后,用403拒绝:

比如下面这样就可以:

server{

    server_name www.xxx.com;

    root /home/data;

    location /news {

        return 403;

    }

}

这样,所有news子目录下的文件都会拒绝。当location比较复杂的时候,你必须考虑匹配的优先级,因为url前缀匹配优先级较低,如果有正则表达式能够命中2.html的话,你还要调整相应的正则location,如果有这种情况,你可以参考下这篇文章:https://www.nginx-cn.net/article/69

点赞 0
浏览 758

nginx upstream支持域名有几个方式可以考虑:
1.通过resolver指定DNS服务器,proxy_pass到对应域名或相关变量;
2.通过map映射方式指定访问的IP。

点赞 0
浏览 985