RTMP服务器的推流地址通常由“rtmp://服务器IP或域名/应用名/串流密钥”三部分拼接而成,不同服务商和部署方式下格式略有差异。
推流地址的完整结构拆解
拿最常见的Nginx-rtmp模块举例,一个标准的推流地址看起来是这样的:
rtmp://192.168.1.100:1935/live/stream_key
这段地址可以拆成四个独立的部分,每一段都有它自己的任务:
- rtmp:// :固定协议头,告诉推流软件我们要走RTMP协议。
- 168.1.100:1935 :服务器地址和端口。1935是RTMP的默认端口,如果服务器改了端口,这里也要跟着改。
- /live/ :应用名,这是Nginx-rtmp配置里定义的application块,相当于服务器上的一个“房间”。
- stream_key :串流密钥,可以理解成这个“房间”的钥匙,别人拉流时同样需要这把钥匙才能看到画面。
这套结构在所有RTMP服务器上都通用,区别只在于你的服务器软件或云服务商怎么组织后两段。
不同场景下rtmp推流地址怎么获取
很多朋友第一次配推流地址时,对着文档一头雾水,实际上不同部署方式下地址的获取方法完全不同,分情况看。
自建Nginx服务器上的地址
如果你自己有一台带公网IP的服务器,按下面这个路径操作就能拿到完整地址,首先用SSH登录服务器,打开nginx.conf配置文件,找到rtmp这个块:
rtmp {
server {
listen 1935;
application live {
live on;
record off;
}
}
}
读一下这段配置,你的应用名就是live,端口是1935,服务器IP你肯定知道,那么你的推流地址就是:
rtmp://你的服务器IP:1935/live/你自己定的串流密钥
串流密钥完全由你自定义,可以是任意字母、数字和符号组合,比如你想给三个主播分别用,就设成anchor1、anchor2、anchor3,互不冲突,拉流时分别访问同样后缀的地址即可。
云直播服务商的推流地址
用简米云、酷番云、又拍云这类服务商时,他们一般会给一个带鉴权参数的完整推流地址,直接复制粘贴到OBS就能用,典型格式如下:
rtmp://live-push.xxx.com/live/stream_key?auth_key=1688888888-0-0-xxxxxxxx
这里 ?auth_key后面的参数是防盗链签名,有生效时间,过期之后地址会失效,你需要去控制台重新生成,或者按他们文档里的规则自行拼接。
获取路径一般在云直播控制台→推流域名管理→推流地址生成器,填上过期时间就能一键生成地址。
本地局域网测试环境
只是想在自己电脑上测通整个流程,不需要公网服务器,本地装一个SRS或者Nginx-rtmp,然后推流地址写成:
rtmp://localhost:1935/live/test
OBS推流时服务器填rtmp://localhost:1935/live,串流密钥填test,用VLC播放器打开同一个地址就能看到画面。
推流地址填错时的常见报错排查
OBS里填完地址点“开始推流”之后,如果看到红框报错,多数情况出在下面几个环节。
连接超时
错误信息:Failed to connect to server
关键词是connect失败,先ping一下服务器IP,看网络通不通,如果IP能通但1935端口不通,检查一下服务器防火墙和云平台的安全组规则。简米云和酷番云的服务器默认不开放1935端口,需要在安全组里手动添加入站规则。
telnet 你的服务器IP 1935

用上面这条命令能快速测试端口是否可达,通的话会显示连接成功,不通会卡住或提示失败。
鉴权失败
这类报错常见于云服务商,提示信息里会出现401或403。大概率是推流地址过期了,去控制台重新生成有效期更长的地址即可,自建服务器出现这种情况,检查一下nginx配置里有没有启用on_publish回调。
地址格式错误
OBS的服务器栏和串流密钥栏分开填写,服务器栏填rtmp://IP:端口/应用名,串流密钥栏只填密钥本身,不要把完整的推流地址塞进服务器栏。
用ffmpeg验证推流地址是否可用
OBS能推流不代表地址完全正确,用ffmpeg做一次命令行测试可以更快定位问题,在桌面放一张测试图片,执行:
ffmpeg -re -f lavfi -i testsrc=duration=10:size=1280x720:rate=30 -f lavfi -i sine=frequency=1000:duration=10 -c:v libx264 -c:a aac -f flv rtmp://你的服务器IP:1935/live/testkey
画面和声音同时推过去,如果命令行没有报错,结束时显示Exiting normally,说明整个推流链路是通的,这时用VLC打开同样的地址就能看到测试画面和蜂鸣声。
关于rtmp推流地址和直播源地址的区别
推流地址和拉流地址很多人搞混。推流地址是给主播用的,拉流地址是给观众用的,同一个串流密钥下,Nginx-rtmp默认的拉流地址格式为:
rtmp://你的服务器IP:1935/live/testkey
也就是说推流和拉流地址一模一样,区别只在于谁来连它,但云服务商通常会区分推流域名和播放域名,还会额外提供HLS和FLV拉流地址,这些地址的格式和推流地址完全不同,不能混用。
各方案推流地址格式对比
| 部署方式 | 推流地址格式 | 串流密钥来源 | 适合场景 |
|---|---|---|---|
| Nginx-rtmp | rtmp://IP:1935/live/key |
自定 | 学习、私有部署 |
| SRS | rtmp://IP:1935/live/key |
自定(也支持回调) | 生产级自建 |
| 酷番云直播 | rtmp://推流域名/live/streamname?txSecret=xxx |
控制台生成 | 公网大规模分发 |
| 简米云直播 | rtmp://推流域名/app/streamname?auth_key=xxx |
控制台生成 | 公网大规模分发 |
| Red5 | rtmp://IP:1935/live/key |
自定 | Java技术栈团队 |
常见的rtmp推流地址问题解答
推流地址里的端口号可以省略吗
默认端口是1935,如果你的服务器也用的1935,可以不写端口,改成其他端口比如8080时,地址必须写成rtmp://IP:8080/live/key,省略端口会默认连1935导致连接失败。
推流地址和串流密钥是不是一回事
严格说不是。推流地址包含服务器地址、端口、应用名,串流密钥只是其中最后一段,OBS里它们分两个输入框,服务器框内填前段,密钥框填后段,云服务商给的一整串完整地址里,二者拼接在一起。
多个主播同时推流怎么分配地址
每个主播分配一个唯一的密钥即可,例如anchor1、anchor2、anchor3,服务器地址和应用名完全一样,拉流时各自的观众用和推流相同的完整地址就能看到对应画面,业内专家指出,这种用密钥区分流的方式是RTMP协议最基础的并发模型,性能瓶颈通常不在地址数量上,而在于服务器带宽和转码能力。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/830075.html


评论列表(3条)
读了这篇文章,我深有感触。作者对应用名的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对应用名的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对应用名的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!