2308

直播推流完整指南:RTMP/SRT/WebRTC三大协议对比与OBS实战配置

直播推流完整指南: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