直播推流完整指南:RTMP/SRT/WebRTC三大协议对比与OBS实战配置 想做B站直播,不知道OBS怎么配;企业活动要直播,纠结自建还是用云服务;互动直播延迟太高,被观众吐槽;跨地域直播推流不稳,画面经常卡。直播推流这事,技术栈比想象的复杂。今天就把三大协议、OBS配置、服务器搭建、调优技巧一锅端。
直播推流的核心流程 直播推流本质是 音视频采集 → 编码 → 网络传输 → 服务器分发 → 观众播放 的链路:
采集:摄像头、麦克风、屏幕、视频文件等编码:H.264/H.265视频 + AAC音频封装:FLV(RTMP)、TS(SRT)、MP4(WebRTC)等推流:通过RTMP/SRT/WebRTC协议发送到流媒体服务器服务器处理:转码(可选)、录制、转协议(如RTMP转HLS)分发:CDN或自建节点播放:观众通过HLS、FLV、WebRTC等协议拉流播放关键瓶颈在两个地方: 推流端的网络上行带宽 + 服务器的处理能力。前者影响画面质量,后者影响观众数量。
三大推流协议横向对比 协议推出年份典型延迟抗丢包编码格式服务端复杂度适用场景RTMP20022-5秒一般H.264/AAC低平台推流标准SRT20170.5-2秒强任意中跨地域传输WebRTC20110.1-0.5秒强VP8/VP9/H.264高互动直播、连麦RTMP:老牌但仍是主流 RTMP(Real-Time Messaging Protocol)是Adobe为Flash开发的协议,Flash已死但RTMP还活着。原因:
生态成熟:B站、斗鱼、虎牙、YouTube、Twitch等几乎所有直播平台都支持RTMP推流实现简单:FFmpeg、OBS、XSplit等推流软件默认支持延迟可接受:2-5秒对大部分直播够用缺点:
基于TCP:抗丢包差,弱网环境下卡顿明显Adobe已停止维护:协议本身不再演进生态逐渐老化:新协议(SRT、WebRTC)正在替代结论: 推流到第三方平台,RTMP还是首选。自己做直播系统,可以考虑SRT。
SRT:抗丢包的低延迟选择 SRT(Secure Reliable Transport)是Haivision 2017年开源的传输协议,专为视频流设计:
基于UDP:抗丢包强,弱网表现好低延迟:0.5-2秒,比RTMP低加密传输:内置AES-128/256加密跨地域友好:长距离传输延迟稳定缺点:
生态不如RTMP:第三方平台支持有限需要专门服务器:SRT服务器软件(如SRT Live Server)结论: 适合企业直播、跨地域制作、不稳定网络环境。日常推B站还是用RTMP。
WebRTC:超低延迟的实时通信 WebRTC(Web Real-Time Communication)是Google主导的浏览器实时通信协议:
极低延迟:0.1-0.5秒,唯一能做互动直播的协议浏览器原生支持:Chrome、Firefox、Safari、Edge无需插件P2P能力:小规模直播可以点对点传输,省服务器缺点:
服务端复杂:需要SFU(Selective Forwarding Unit)服务器,如Janus、mediasoup协议生态碎片化:各家实现略有差异不适合大规模分发:万级观众需要专门CDN支持结论: 互动直播、连麦、视频会议首选。万人观看的直播还是HLS/FLV分发更稳。
OBS推流配置详解 OBS Studio 是最流行的开源直播软件,免费、跨平台、功能强大。
基础设置 设置 → 流:
服务:选"自定义"服务器:填平台RTMP地址(如B站:rtmp://live-push.bilivideo.com/live-bmc/)串流密钥:填平台提供的密钥设置 → 输出:
输出模式:选"高级"编码器:NVIDIA NVENC H.264(如有N卡)> AMD HW H.264(如有A卡)> x264(CPU编码)速率控制:CBR(恒定码率,平台推荐)比特率:1080p 30fps → 4000 kbps(参考下面的码率表)关键帧间隔:2(平台要求2秒一个I帧)预设:P4(NVENC)或 veryfast(x264)Profile:highB帧:2(NVENC)或 0(x264,部分平台要求)设置 → 视频:
基础分辨率:1920x1080(采集分辨率)输出分辨率:1920x1080 或 1280x720缩减过滤:Lanczos(高质量)FPS:30 或 60设置 → 音频:
采样率:48 kHz编码器:AAC比特率:128 或 160推流码率推荐表 分辨率/帧率推荐码率(CBR)最低上行带宽720p 30fps1800-2500 kbps4 Mbps720p 60fps2500-3500 kbps5 Mbps1080p 30fps3500-5000 kbps7 Mbps1080p 60fps4500-6000 kbps9 Mbps4K 30fps8000-15000 kbps20 Mbps4K 60fps12000-20000 kbps28 Mbps注意: 推流码率不能超过上行带宽的70%,否则会卡顿。先用 Speedtest 测上行带宽。
FFmpeg命令行推流 不想用OBS,可以用FFmpeg命令行推流:
bash# 推流MP4文件到RTMP服务器
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4000k -bufsize 8000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -ar 48000 -f flv "rtmp://live-push.example.com/live/streamkey"
# 推流屏幕采集到RTMP(Linux)
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 -f alsa -i default -c:v libx264 -preset veryfast -b:v 4000k -g 60 -c:a aac -b:a 128k -f flv "rtmp://live-push.example.com/live/streamkey"
# 推流到SRT服务器
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4000k -c:a aac -b:a 128k -f mpegts "srt://server.example.com:10080?streamid=live/streamkey"参数解释:
-re:按真实时间速度读取(直播必须)-g 60:关键帧间隔60帧(30fps对应2秒)-pix_fmt yuv420p:兼容性最好的色彩空间-f flv:RTMP用FLV封装-f mpegts:SRT用MPEG-TS封装更多FFmpeg用法可以看本站 FFmpeg入门实战教程。
流媒体服务器选择 方案一:Nginx-RTMP(轻量级) Nginx + RTMP模块,适合小规模直播和测试:
nginx# nginx.conf
worker_processes auto;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
# 开启HLS
hls on;
hls_path /var/www/hls;
hls_fragment 2s;
hls_playlist_length 10s;
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/www;
add_header Access-Control-Allow-Origin *;
}
}
}推流到 rtmp://your-server/live/test,观众通过 http://your-server/hls/test.m3u8 拉流播放。
详细搭建教程见本站 Nginx-RTMP流媒体服务器搭建教程。
方案二:SRS(生产级) SRS 是国产开源流媒体服务器,支持RTMP、HLS、HTTP-FLV、WebRTC等多种协议:
bash# Docker一键部署
docker run --rm -p 1935:1935 -p 8080:8080 ossrs/srs:5
# 推流
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost:1935/live/test
# 播放
# RTMP: rtmp://localhost:1935/live/test
# HLS: http://localhost:8080/live/test.m3u8
# HTTP-FLV: http://localhost:8080/live/test.flv
# WebRTC: http://localhost:8080/players/whep.html?app=live&stream=testSRS的优势是配置简单、性能优秀、协议全面,适合中大型直播业务。
方案三:云服务(最省心) 不想自己维护服务器,用云直播服务:
国内:腾讯云直播、阿里云直播、网宿直播国外:AWS IVS、Mux、Vimeo Live Streaming优势是一站式服务(推流→转码→分发→播放器),缺点是按流量收费,大规模使用成本高。
直播分发协议对比 观众端拉流的协议选择也很重要:
协议延迟兼容性适用场景HLS5-30秒全部默认兜底方案LL-HLS1-2秒iOS 15+、Chrome低延迟直播HTTP-FLV2-5秒Chrome、Firefox国内B站等平台主流WebRTC0.1-0.5秒现代浏览器互动直播国内平台(B站、斗鱼、虎牙)普遍用HTTP-FLV分发,延迟比HLS低、兼容性比WebRTC好。国外平台(YouTube、Twitch)以HLS和LL-HLS为主。
如果你想了解HLS原理,可以看本站 M3U8文件完整指南。
推流调优技巧 1. 编码器选择 NVIDIA显卡用户:NVENC H.264(GPU编码,CPU占用低)AMD显卡用户:AMD AMF H.264Intel核显用户:Intel QuickSync H.264无硬件加速:x264编码器,preset用 veryfast 平衡速度和质量2. 关键参数 关键帧间隔(gop size):2秒(30fps对应60帧,60fps对应120帧)B帧:NVENC用2,x264用0(部分平台要求)Profile:high(兼容性好)或 main(更低延迟)Rate control:CBR(直播推荐)或 VBR(点播可用)3. 网络优化 用有线网络,避免WiFi上行带宽至少是推流码率的1.5倍路由器开启QoS,优先直播流量关闭后台下载、网盘同步等占用带宽的应用4. 画质提升 码率不要给太低,参考上面的码率表用 yuv420p 而非 yuv444p(兼容性)关闭OBS的"延迟"选项(除非有特殊需求)用 Lanczos 缩减过滤,比Bilinear清晰常见问题速查 问题原因解决推流卡顿上行带宽不足测速,降码率到带宽的70%以内画面发灰编码器色彩空间错加 -pix_fmt yuv420p延迟太高平台默认HLS分发改用HTTP-FLV或LL-HLS推流掉线网络不稳定启用OBS"自动重连"画面卡顿但码率正常CPU占用过高换NVENC,降preset音画不同步编码缓冲不一致检查音频采样率(48kHz)关键帧警告关键帧间隔错设为2秒总结 直播推流三大协议各有定位:RTMP平台推流标准,SRT跨地域专业传输,WebRTC超低延迟互动。日常推B站、YouTube用RTMP即可,专业制作跨地域传输考虑SRT,互动连麦必须WebRTC。
OBS配置记住几个关键参数:硬件编码器、CBR码率控制、关键帧间隔2秒、yuv420p色彩空间、码率参考推荐表。流媒体服务器小规模用Nginx-RTMP,生产环境用SRS或云服务。
快速回顾:
协议选择:RTMP(推平台)、SRT(跨地域)、WebRTC(互动)码率参考:1080p 30fps → 4000 kbps关键参数:硬件编码器 + CBR + 关键帧2秒 + yuv420p服务器选择:测试用Nginx-RTMP,生产用SRS参考资料 RTMP — WikipediaSRT 协议官网WebRTC — WikipediaOBS Studio 官网SRS GitHub