📌 核心组件和流程
1、云澜主机: 你的服务器,负责接收推流、处理(可选转码/切片)、分发流。
2、推流软件: 在你的本地电脑或采集设备上运行(如OBS Studio, Streamlabs OBS, FFmpeg),将视频/音频推送到云主机。
3、播放端: 观众使用的设备,通过播放器(如VLC, 网页播放器)从云主机拉取流进行观看。
4、流程:推流软件 -> (网络) -> 云澜主机 (RTMP接收 + HLS/DASH切片/分发) -> (网络) -> 观众播放器
📍 详细步骤
购买与配置
* 登录云澜平台,购买一台云服务器(ECS)。
操作系统 推荐选择Ubuntu 20.04/22.04 LTS 或CentOS 7/8 Stream,本文以Ubuntu为例。
配置选择 这是关键!单机处理所有任务,配置要足够。
CPU至少4核vCPU(推荐8核或更高,尤其需要转码时),直播对CPU要求较高,特别是转码。
内存至少4GB(推荐8GB或更高),处理流和切片需要内存。
带宽这是瓶颈! 确保你的公网出带宽足够。
计算方式单个观众的码率 (kbps) * 最大并发观众数 / 1000 * 1.2 (冗余) = 所需最小带宽 (Mbps)
例如1Mbps码率给100个观众,需要约1 * 100 / 1000 * 1.2 = 0.12 Gbps = 120 Mbps
的出带宽。务必选择足够带宽的套餐或按量付费带宽。
磁盘 至少40GB系统盘(推荐SSD),如果做HLS切片且保留时间长或观众多,可能需要更大的数据盘挂载到切片目录,SSD能显著提升切片和分发速度。
安全组配置 (防火墙)
* 在云澜控制台找到该ECS实例的安全组。
放行入方向规则
TCP: 1935 (RTMP协议默认端口,用于接收推流)
TCP: 80 (HTTP,用于HLS .m3u8/.ts文件分发) 或TCP: 443 (HTTPS,更安全)
* (可选)TCP: 8080 (或其他端口,用于HTTP状态查看或备用)
放行出方向规则 通常默认全放行即可。
连接主机 使用SSH客户端(如PuTTY, Terminal, Xshell)通过公网IP和密钥/密码登录到你的云主机。
🛠 2. 在云澜主机上安装和配置流媒体服务器 (Nginx + RTMP Module)
这是最核心的部分,我们将使用高性能的Nginx Web服务器,并为其添加RTMP模块来处理直播流。
安装依赖
sudo apt update sudo apt upgrade -y sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y
下载源码
mkdir nginx-build && cd nginx-build wget http://nginx.org/download/nginx-1.24.0.tar.gz # 检查官网获取最新稳定版 wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz # 检查GitHub获取最新版 tar -zxvf nginx-1.24.0.tar.gz tar -zxvf v1.2.2.tar.gz # 解压后目录名通常是 nginx-rtmp-module-1.2.2
编译安装Nginx with RTMP Module
cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module-1.2.2 make -j $(nproc) # 使用所有CPU核心加速编译 sudo make install
配置Nginx (RTMP & HTTP(S) for HLS)
编辑主配置文件sudo nano /usr/local/nginx/conf/nginx.conf
在http { ... }
块之前,添加RTMP配置块
# RTMP 配置 rtmp { server { listen 1935; # 监听RTMP端口 chunk_size 4096; application live { # 定义一个应用叫 'live' live on; # 启用直播 record off; # 关闭录制,按需开启 # HLS 设置 - 关键!用于将RTMP流切片成HLS hls on; # 开启HLS hls_path /var/www/html/hls; # HLS切片文件(.ts)和索引(.m3u8)的存储目录 hls_fragment 5s; # 每个.ts切片时长(秒) hls_playlist_length 30s; # HLS播放列表保留时长(秒) # hls_cleanup on; # 自动清理旧切片 (默认开启) # hls_continuous on; # 确保播放列表连续性 (可选) # hls_nested on; # 为每个流创建子目录 (推荐) # 访问控制 (可选但强烈推荐!) # allow publish 192.168.1.0/24; # 允许推流的IP段 # deny publish all; # 拒绝其他所有IP推流 # allow play all; # 允许所有IP播放 (HLS通常走HTTP) } } }
在http { ... }
块内的server { ... }
配置中,添加一个location
块来提供HLS文件
http { server { listen 80; # 监听HTTP端口 (如果要用HTTPS,需配置SSL证书并监听443) # listen 443 ssl; # 启用HTTPS示例 # ssl_certificate /path/to/your_domain.crt; # ssl_certificate_key /path/to/your_domain.key; server_name your_server_ip; # 替换为你的云主机公网IP或绑定的域名 location /hls { # 匹配指向 /hls 的请求 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /var/www/html; # 指向 hls_path 的上一级目录 add_header Cache-Control no-cache; # 避免播放器缓存旧切片 add_header Access-Control-Allow-Origin *; # 允许跨域播放 (重要!) } # (可选) 状态页面 location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /path/to/nginx-rtmp-module; # 指向你下载解压的nginx-rtmp-module目录 } # 其他配置... } }
重要配置项说明
hls_path
确保该目录存在且有写入权限sudo mkdir -p /var/www/html/hls && sudo chmod -R 755 /var/www/html
hls_nested on
推荐启用,这样会在hls_path
下为每个流创建单独的子目录,避免冲突。
访问控制 (allow publish
/deny publish
)强烈建议配置!只允许你信任的IP地址(你的推流电脑的公网IP)进行推流,否则任何人都能推流到你的服务器,占用资源甚至推送非法内容。allow play all
通常没问题,因为播放走的是HTTP(S)。
HTTPS如果对外公开服务,强烈建议配置SSL证书(使用Let's Encrypt免费证书工具如certbot)并监听443端口,以加密播放流量。
server_name
如果购买了域名并解析到云主机IP,这里填域名;否则填IP地址。
创建HLS存储目录并设置权限
sudo mkdir -p /var/www/html/hls sudo chown -R www-data:www-data /var/www/html/hls # 根据Nginx运行用户调整 (通常是 www-data 或 nobody) sudo chmod -R 755 /var/www/html
启动Nginx并设置开机自启
sudo /usr/local/nginx/sbin/nginx # 启动 # 检查是否运行: ps aux | grep nginx # 测试配置文件: sudo /usr/local/nginx/sbin/nginx -t
设置开机启动 (Systemd)
创建服务文件sudo nano /etc/systemd/system/nginx.service
粘贴以下内容
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
启用并启动服务
sudo systemctl daemon-reload sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx # 检查状态
📡 3. 使用推流软件 (OBS Studio) 推送直播流
下载安装 在你的本地电脑(主播端)下载并安装 [OBS Studio](https://obsproject.com/)。
配置OBS
* 打开OBS。
* 在"来源"框中添加你的视频源(如显示器采集、摄像头、视频文件等)和音频源。
* 进入设置 -> 推流。
服务 选择自定义...
。
服务器 填写你的云澜主机RTMP地址:rtmp://你的云主机公网IP:1935/live
(这里的/live
对应Nginx配置中的application live
)
串流密钥这是关键且需要保密! 填写一个唯一且不易猜测的字符串。mysecretstream123
,这个密钥将作为流标识符。
最终推流地址是rtmp://你的云主机公网IP:1935/live/串流密钥
开始推流 点击OBS主界面的"开始推流",OBS状态栏应显示绿色的推流速度。
HLS播放地址 这是最通用、穿越防火墙能力最强的播放方式。
地址格式http://你的云主机公网IP/hls/串流密钥.m3u8
(如果启用了hls_nested on
,通常是http://你的云主机公网IP/hls/串流密钥/stream.m3u8
或类似,具体看Nginx配置和生成的路径)。
示例http://123.45.67.89/hls/mysecretstream123.m3u8
播放方式
网页播放器 在你的网页中嵌入支持HLS的播放器(如video.js, hls.js, JW Player, Clappr),这是最常见的观众访问方式。
简单HTML5示例 (需要浏览器支持HLS或使用hls.js库)
<video id="myVideo" controls width="640" height="360"></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> if (Hls.isSupported()) { var video = document.getElementById('myVideo'); var hls = new Hls(); hls.loadSource('http://你的云主机公网IP/hls/串流密钥.m3u8'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src = 'http://你的云主机公网IP/hls/串流密钥.m3u8'; video.addEventListener('loadedmetadata', function() { video.play(); }); } </script>
VLC 播放器 打开VLC -> 媒体 -> 打开网络串流 -> 粘贴上面的HLS地址。
其他支持HLS的播放器 如手机上的VLC、MX Player,或智能电视/盒子上的支持HLS的App。
📌 重要注意事项和优化建议
1、带宽瓶颈: 这是单机方案最大的限制,所有观众的流量都从这台云主机出。**务必确保购买的云主机出带宽 > (观众峰值数 * 单个观众所需码率)**,超售会导致所有观众卡顿。
2、CPU瓶颈:
不转码 如果OBS推流的编码格式(如H.264)和分辨率/码率就是最终观众需要的格式,Nginx只是接收RTMP并切片HLS,CPU消耗较低。
需要转码 如果你需要在服务器上将推流转码成不同的分辨率/码率(如生成720p, 480p等多路流),或者改变编码格式,CPU消耗会急剧上升!单机转码能力有限,通常只能处理少量并发转码任务,考虑:
在OBS端输出最终需要的格式/码率,避免服务器转码。
* 如果必须服务器转码,选择非常强大的CPU实例。
* 使用更高效的编码器(如libx264
vssoftware
编码器)或硬件加速(如果云主机支持GPU或Intel QSV/AMD AMF)。
3、延迟: HLS为了兼容性和流畅性,默认有较长的延迟(通常在hls_playlist_length
+ 几个切片时长,比如30s+),如果需要低延迟(<10s),需:
* 调小hls_fragment
(如2s) 和hls_playlist_length
(如6s)。
* 使用低延迟HLS配置 (LL-HLS),但这需要播放器和CDN支持。
* 考虑使用WebRTC(延迟最低,但搭建更复杂)或RTMP/FLV播放(延迟较低,但浏览器支持差)。
4、安全:
RTMP推流鉴权 务必在Nginx RTMP配置中使用allow publish/deny publish
限制推流IP
文章摘自:https://idc.huochengrm.cn/zj/12459.html
评论
明逸思
回复云澜主机单机直播开启方法如下:首先确保你的主机系统支持直播功能,然后在控制面板中找到直播选项,按照提示安装直播软件,设置直播参数,连接摄像头和麦克风,最后点击开始直播即可。