自己搭建直播服务器这件事,我搁置很久才动手。主要原因就是平台直播限制很多,码率、时长、内容审核都有约束,有时候只是想给几个朋友共享游戏画面,或者把家里摄像头画面推流出去,没必要走公共直播平台。后来用一台轻量云服务器搭配SRS,不到半小时就部署完成。下面把操作过程写出来,照着操作可以少踩很多坑。
先准备机器。云服务器上手最简单,腾讯云、阿里云、华为云轻量应用服务器都可以,最低配2核2G就能跑SRS。操作系统选择Ubuntu 22.04或者Debian 12,不要用CentOS 7,软件源版本太老旧。带宽是重点,直播推流占用服务器上行带宽,观众拉流占用下行带宽。如果推流码率3000kbps,单个观众就消耗服务器3000kbps下行,十个观众合计30Mbps。先预估观看人数,少数几个人观看,5M带宽勉强够用,人数多就要升级带宽或者接入CDN。家里旧电脑也可以充当服务器,但需要公网IP,同时宽带上传速度充足;没有公网IP就得配置内网穿透,整体比云服务器麻烦不少。

服务器购买完成,安全组放行对应端口。SSH的22端口最好只开放自己常用IP,不要直接填0.0.0.0/0。RTMP协议使用1935端口,SRS的HTTP服务端口8080,管理API端口1985,这个端口不要对公网开放,否则其他人可以直接控制你的推流。后续网页播放需要的话,再开启80和443端口。
登录服务器之后,安装Docker最省事。Ubuntu执行两行命令,更新软件源,安装docker.io,启动并设置开机自启。接着拉取SRS镜像运行容器:
docker run -d --name srs -p 1935:1935 -p 1985:1985 -p 8080:8080 ossrs/srs:5
等待几秒,执行docker logs -f srs查看日志,没有报错就代表服务启动成功。SRS默认支持RTMP推流,同时支持HTTP-FLV、HLS拉流,不用修改配置文件就能直接使用。想要自定义配置,可以进入容器或者挂载自己的srs.conf文件,但首次部署先不要改动,默认配置足够验证功能。
打开OBS软件,服务选项选择自定义,服务器地址填写rtmp://你的服务器IP/live,串流密钥自定义,例如mystream。密钥不要设置成123456这类简单内容,虽然SRS默认不校验密钥,但被别人猜到就可以往你的服务器推送垃圾流。填写完成点击开始推流,OBS下方出现绿色标识并显示码率,代表推流成功。
使用VLC测试拉流,打开网络串流,输入rtmp://你的服务器IP/live/mystream,就能看到画面。延迟大概两三秒,个人使用完全没问题。网页端播放可以直接打开SRS自带播放页面,浏览器访问http://你的服务器IP:8080/players/srs_player.html?stream=mystream,点击播放。HTTP-FLV地址是http://你的服务器IP:8080/live/mystream.flv,可以借助flv.js嵌入自己网站。HLS地址是http://你的服务器IP:8080/live/mystream.m3u8,兼容性更好,但延迟达到十秒以上,直播体验不如FLV。
想用域名访问,网页播放走HTTPS,可以在服务器部署Caddy或者Nginx反向代理8080端口。Caddy配置最简单,两行配置就能自动申请证书。但RTMP本身传输没有加密,推流数据还是明文传输,如果需要更高安全性,可以改用SRT推流,SRS支持该协议,或者使用stunnel封装RTMP,普通个人直播一般不需要。定期更换推流密钥,SRS支持HTTP回调鉴权,配置相对复杂,等出现盗推情况再部署也来得及。
正式运行之后,最大瓶颈通常是带宽和流量费用。云服务器固定带宽计费,5M每月几十元,但只支持一两个人观看高清画面。按流量计费更灵活,一旦被恶意刷流量,账单会失控。所以安全组尽量限制来源IP,管理端口不要暴露,推流密钥做好保密。如果只是给少数朋友观看,直接发送FLV地址就行。想要公开分享,可以接入CDN,CDN回源到你的SRS服务器,观众从CDN节点拉流,服务器只承担一路回源带宽。
家用旧电脑部署思路类似,安装Ubuntu和Docker,运行同一个SRS容器,路由器把1935和8080端口映射到这台电脑。没有固定公网IP就配置DDNS,域名解析到动态IP。家用宽带上传带宽一般30Mbps到50Mbps,推一路3000kbps流没问题,但观看人数变多依旧卡顿。内网穿透方案比如frp,需要一台具备公网IP的中转服务器,带宽依旧受中转服务器限制,没法避开成本。
SRS还支持WebRTC推拉流,延迟可以压缩到500毫秒左右,适合连麦或者远程控制场景,但配置比RTMP麻烦,需要处理HTTPS和证书。个人直播先用RTMP跑通基础流程,后续有低延迟需求再研究。优先把基础服务跑起来,再慢慢调参,比一直看教程不动手要好。