直播术语说明
不要背定义。点开一个名词,看它在画面里“动起来”,再用生活中的东西把它记住。
遇到陌生格式,先问三句话:它是在压缩数据、组织数据,还是传输数据?这能解决大多数“它们有什么区别”的困惑。
这一阶段只解决四件事:直播术语怎么分、直播链路怎么走、码率为什么影响清晰度,以及 GOP 为什么决定卡顿恢复速度。
不要背定义。点开一个名词,看它在画面里“动起来”,再用生活中的东西把它记住。
遇到陌生格式,先问三句话:它是在压缩数据、组织数据,还是传输数据?这能解决大多数“它们有什么区别”的困惑。
主播的声音和画面不会“直接传给观众”。它们要先变成可传输的数据,再由服务器分发。
依次点击下方模块,把它们放进正确的信号链。想一想:是先编码,还是先推流?
把原始画面变小,并装进便于连续传输的数据结构。
接住流,按需转码、录制,再送往离观众更近的节点。
把网络数据还原成屏幕上的像素和扬声器里的声音。
记住一句话:编码负责压小,封装负责装好,协议负责送到。

H.264 / H.265 / AAC / Opus

FLV / MPEG-TS / MP4

RTMP / HLS / WebRTC / SRT
先点一个名词,再点它所属的分类。
码率是“每秒能用多少数据描述画面”。同样 1080P,演唱会比静态访谈需要更高码率,因为每一帧变化更多。

1080P 是 1920×1080 个像素。格子越多,能表现的细节上限越高,每帧要处理的数据也越多。

30 FPS 就是每秒 30 帧。帧率主要影响运动流畅度,不会直接让一张静止画面变得更精细。

码率是编码后的数据预算。画面越复杂、分辨率和帧率越高,通常越需要更大的预算。
一秒未压缩的 1080P、30 FPS、RGB 视频大约是:
1920 × 1080 × 24 bit × 30 ≈ 1.49 Gbps普通网络几乎扛不住。H.264 会利用“画面内部相似”和“相邻帧相似”把它压到几 Mbps。
1080P 访谈画面变化不大,4 Mbps 左右通常是合理起点。
高分辨率 + 低码率 ≠ 高清。像素格子更多,但每个格子分到的信息更少,运动时反而更容易出现马赛克。
I 帧是一张完整图片;P/B 帧只记录“和前后帧的差异”。播放器丢失关键参考后,往往要等下一个 I 帧才能完全恢复。
I 帧像完整底图,P/B 帧像一叠“修改说明”;下面的动画继续演示丢失参考帧后会发生什么。
自己就能解码,不依赖前面的画面。播放器通常从它开始起播和恢复。
参考之前的 I/P 帧,只保存“哪里变了”,体积明显更小。
可同时参考前后画面,压缩效率高,但会让解码顺序与展示顺序不同。
如果 30 FPS 下每 60 帧放一个 I 帧,关键帧间隔就是 60 ÷ 30 = 2 秒。丢失重要参考后,最坏可能要接近 2 秒才遇到下一张完整底图。
GOP 越短,恢复越快、起播更容易,但 I 帧多会增加码率。
15 题全对即可点亮阶段徽章。
你是主播。按下开播后,一个由画面和声音组成的“小流”从桌前出发:领路线票、进 FFmpeg 工厂、装进 FLV 货柜、穿过 RTMP 隧道,最后抵达 SRS 中央站。

上传文件是“货物准备完再发车”;直播则是镜头还在拍,前面的画面已经离开桌面。我们不从协议定义开始,而是跟着这一帧画面一路往下走。
FFmpeg 是加工厂,RTMP 是连续运输规则,SRS 是中央车站。记住角色关系,后面的命令和术语自然会找到位置。
这段短片只负责建立整条链路的空间感。看完后,再逐站进入真实参数、协议步骤和故障证据。
工具、协议和服务器各司其职,别把它们混成一个“推流软件”。
读输入、调参数、编码、封装,并把连续数据送往输出地址。
规定客户端如何连接、发布,以及音视频消息如何在长连接里传输。
监听端口、接入直播流、鉴权、录制,并向下游做一对多分发。
主播通常先从直播后台拿到推流地址和密钥,再填进工具。它同时回答五个问题:走什么规则、去哪里、进哪个应用、发布哪一路、带什么通行证。

先确认交通规则和服务器入口,再进入业务楼层,最后凭流名与 token 到达具体房间。
rtmp://live.example.com:1935/live/room-001?token=••••
推流和播放协议可以不同,但 live / demo 这对业务坐标保持一致。
HTTP-FLV 示例
HLS 示例
这里只演示地址映射;相应播放地址是否可用,取决于 SRS 是否启用了对应输出能力。
站在主播侧看,FFmpeg 就是接受摄像头、麦克风、屏幕或文件的加工厂。命令是工厂订单:从左向右规定原料、加工规格、装箱方式和出口。

视频被调整尺寸、帧率和码率,音频被采样与压缩;工厂必须始终跟上直播的实时节奏。
-re -i demo.mp4-re 让文件按原始速度读取;没有它,文件可能被尽快推完,不再像直播。
-c:v libx264 -b:v 2500k选择 H.264 编码器并设置视频码率目标。画质和上行压力都从这里开始变化。
-c:a aac -b:a 128k把音频编码成兼容性较好的 AAC,并给它每秒 128 kb 的信息预算。
-f flv rtmp://…将音视频组织成 FLV,再通过 RTMP 地址持续送往服务器。

橙色视频块和蓝色音频块不会随便混在一起。封装器依据 PTS/DTS 把它们交错放进 FLV Tag;它不再次提高画质,也不负责网络运输。
命令能运行,不代表参数合理。稳定推流要同时满足:编码速度 ≥ 实时速度、输出码率低于稳定上行、服务器接受地址与鉴权。
小流离开工厂后,并不能直接冲进服务器。“连接成功”和“推流成功”不是同一刻:TCP、握手、connect、createStream、publish 必须按顺序放行。

第一关都进不去就查网络;最后 publish 才被拦下,则应查流名、鉴权或重复发布。
小流完成 publish 后,终于成为服务器中的直播源。SRS 校验发布者、维护这一路输入,再按配置送去播放、录制或 CDN;主播不用给每位观众各上传一份。

左边只有主播的一路上行;右边的播放、转协议、录制和分发出口都由服务端承担。
点击配置行查看作用。这里讲的是配置语义,不会连接或修改任何生产环境。
确认 1935 监听、vhost、app 与 stream 路径匹配。
校验 token、过期时间,并阻止同一流名被意外重复发布。
观察输入帧率、客户端数、队列、带宽和录制错误。
旅行途中真的出故障,不要把每个参数都拧一遍。错误日志是小流留下的路标:先判断它停在采集、加工、装箱、运输还是中央站,再做最小范围验证。

连接拒绝、publish 被拒、发送队列溢出、时间戳倒退,分别来自不同站点,不能用同一个办法修。
通用排障顺序:先验证“输入有没有”,再看“编码跟不跟得上”,然后检查“地址能不能连、publish 是否通过”,最后观察长时间发送是否稳定。
15 题全对,证明你能从主播桌前一路解释到 SRS 中央站。
能说清每一段,才知道连接和发布分别查哪里。
能解释参数作用,比背下一整行命令更重要。
TCP、publish、发送队列和时间戳对应不同方向。
你是观众。按下播放后,小流通常不会从遥远源站直接赶来:它先经过 CDN 边缘节点,也可能由附近观众通过 P2P 协助分发,再进入缓冲、解封装、解码和同步放映厅。

播放器不是一块被动显示器。它同时是路线查找员、网络接收员、缓冲管理员、拆箱师傅、解码机器和音画指挥家。

路线可以不同,但最终都要经过缓冲、拆轨、解码和渲染。
离直播边缘越近,可用来抵抗网络抖动的数据越少。真正的低延迟,不是简单把缓冲改成 0。
这段短片先建立空间感:拿到入口、选择路线、穿过缓冲与解码,最后由播放器把音画同步呈现。
延迟数字不是固定承诺,会受配置、网络和播放器策略影响;先抓住它们的传输模型。
服务器把连续直播切成短媒体片段,并维护一份滚动清单。播放器反复刷新清单、下载新片、放进缓冲,再按顺序播放。

播放器先拿 m3u8,再按里面的地址请求 TS 或 fMP4 切片。
播放器只发起一次 HTTP 请求,服务器保持响应不断开,并持续送来一个个带类型和时间戳的 FLV Tag。网页端通常由 flv.js 拆 Tag、转成 fMP4,再通过 MSE 交给浏览器播放。

HTTP 负责运输,FLV Tag 负责给数据分组贴标签;flv.js 转换包装后,MSE 才把媒体接进浏览器播放管线。
把整个 HTTP 响应想成一条不停前进的货运带:FLV Tag 是带标签的包裹,MSE 是 JavaScript 把媒体持续交给浏览器的标准装货口。
一个 FLV 流先出现一次 FLV Header,后面紧跟许多个 Tag。每个 Tag 都用头部说明“我是什么、数据有多大、应该在什么时间播放”,再携带真正的数据。
别混淆:Tag 是 FLV 封装里的记录单元,不等于 TCP 数据包,也不一定等于一张完整视频画面。
MSE 是一组浏览器 API。JavaScript 可以创建 MediaSource 和 SourceBuffer,再用 appendBuffer() 连续追加浏览器能够消费的媒体片段。
别混淆:MSE 不是解码器,也通常不直接认识 FLV;它管理追加的数据和播放缓冲,后面的浏览器媒体管线才负责解码、同步与渲染。
HTTP-FLV 不是所有浏览器都原生支持。桌面网页常借助 MSE;Safari/iOS 等环境的支持边界要用真实设备验证。
WebRTC 不是拿一个 URL 就开始下载。双方要先交换能力,收集候选地址,进行连通性检查和安全握手,才能传输实时媒体。

ICE 的目标是找到可用路径;TURN 是可靠兜底,也是需要计算带宽成本的中继。
CDN 把内容提前送到离观众更近的边缘节点;P2P 再让部分观众贡献上传带宽,互相传递已经拿到的数据。它们解决的是“怎样把同一份直播大规模送出去”。
直播的原始出口。它负责向分发网络供给内容,不应该直接承受所有观众连接。
部署在不同地域和运营商附近,接住观众请求,减少跨地域距离并分散源站压力。
边缘已有数据叫命中;没有时才向上游取。回源过多会把压力重新推回源站。
调度器让观众之间交换已获得的数据。它通常补充 CDN,不是完全替代 CDN。
CDN、P2P 是分发方式;HLS、HTTP-FLV、WebRTC 是播放器取得媒体的方式,两者不是同一层概念。
P2P 不是免费 CDN。它受 NAT、终端上传能力、运营商网络、隐私与内容保护影响,必须有 CDN 兜底、调度控制和真实播放质量监控。
先问是否双向互动,再看目标延迟、终端兼容、观看规模、CDN 和回看需求。不要因为“延迟低”就让所有场景都上 WebRTC。
需要:优先评估 WebRTC。
需要:优先评估 HLS。
可以评估 HTTP-FLV。
把浏览器网络请求、控制台、缓冲长度和 WebRTC 状态放在一起,先判断“数据有没有到”,再追封装、解码和渲染。
15 题全对,证明你能把协议、CDN / P2P 分发、缓冲和排障串起来。
规模与兼容优先,延迟来自切片和缓冲的累积。
桌面网页较低延迟,重点管住连续缓冲。
互动优先,难点在选路、中继和网络质量。
CDN 承担稳定与兜底,P2P 在合适环境中分担部分流量。
“卡”不是病名。跟着媒体旅行者进入直播急诊室:先把症状翻译清楚,再确认影响范围、找到第一条异常证据,最后用最小实验完成会诊。

优秀的排障不是记住更多命令,而是用最少证据缩小范围。先问“谁、何时、哪种症状”,再决定看哪一层。

黑屏、首开慢、卡顿、高延迟和音画不同步,会走向不同的证据链。
先确认影响范围,再看第一条异常证据;不要看到 CPU 高就立刻宣布它是根因。
媒体旅行者会经过症状挂号、延迟检查、缓冲监护、指标读片和音画校准,最后锁定真正的断点。
从主播采集画面到观众看到直播,采集、编码、网络传输、播放缓冲和解码渲染都会消耗时间。把这些耗时加起来,就是最终的端到端延迟。

端到端延迟要按链路拆预算,再优先处理最大且可控的部分。
网络送货忽快忽慢、连续丢包和设备解码过载都能让画面卡,但它们留下的指标形状不一样。

缓冲见底更像供给问题;数据充足但掉帧上涨,更像解码和渲染压力。
包裹均匀送到,缓冲仓库保持水位,解码工位也能及时处理。
把输入 FPS、队列、丢包、缓冲、掉帧和音画差放到同一时间轴,才能看出故障从哪里开始传播。

阈值会因业务而变;持续上涨、同步突变和范围差异通常比孤立数字更有意义。
相关不等于因果。CPU 和卡顿同时升高,只说明值得进一步验证;还需要找到处理速度、队列或掉帧等中间证据。
播放器按时间戳安排音视频登场。固定偏差可以补偿验证,持续漂移则要回到 PTS 和时钟源。

网络到达时间、解码完成时间和最终播放时间是三件不同的事。
每份病历都有很多数字,但只有少数能解释症状。先用影响范围缩小链路,再选择第一检查动作。

修复动作必须能解释症状、范围和证据,而不是碰巧让红灯熄灭。
15 题全对,证明你能把症状、指标和第一检查动作连成一条证据链。
先把“卡”翻译成可验证的诊断输入。
对齐时间线,寻找第一处异常和传播顺序。
恢复不等于根因,复盘要留下长期修复。
这一次你不再只盯一帧画面,而是担任直播架构师:决定怎样接入、转码、封装、分发、容灾和观测,并亲手把主播登录、OBS 推流一路接到观众屏幕。
生产架构不是把热门组件堆在一起。每一层都要回答:输入是什么、输出是什么、容量边界在哪里、失败后由谁接替。
采集、编码、封装、源站、CDN、P2P 和播放器。
鉴权、调度、配置、流量切换和发布管理。
指标、日志、追踪、QoE、告警和成本。
观众的屏幕和网络不同。转码梯子把同一内容生产成多种分辨率和码率,播放器才能根据实时带宽切换,而不是让所有人硬扛最高档。
保留一份高质量主源。
每档都要消耗计算资源。
目标是少卡顿,不是永远最高画质。
多一档不是免费。它会增加转码计算、存储/封装对象、CDN 流量组合和监控维度;档位要由真实终端与网络分布决定。
单一出口简单,但故障面大。生产系统会在 CDN A、CDN B 和 P2P 之间调度流量,并为节点故障、区域异常和 P2P 不可用准备回退路径。
并发人数只是起点。平均码率、峰值系数、观看时长、CDN 命中率和 P2P 分担共同决定出口带宽、每小时数据量和回源压力。
冗余必须和故障检测、自动切换、验证与回滚成套出现。没有观测的双机,可能只是两台同时出问题却没人知道的机器。
证明主播是否真正进入系统。
证明媒体核心是否跟得上。
证明内容是否稳定送到各地。
证明观众是否真的看得好。
前面学的是零件,这里要把零件按真实先后接起来。每一站都要说清输入、动作、输出和验证证据;选对后才能接通下一段。
OBS 自己就能完成采集、合成、编码、封装和推流,并会使用 FFmpeg 相关组件;复杂业务也可能额外接独立 FFmpeg 进程做滤镜、转码或中继。教学链路会经过“媒体加工”这一站,但不把外部 FFmpeg 说成所有直播的强制步骤。
先确认谁在开播,以及这条流属于哪一场直播。
把摄像头和声音变成带时间戳的可传输码流。
把一路上行生产成可供十万观众获取的播放产品。
把媒体还原成按正确时间出现的画面和声音,并回传 QoE。
没有一套架构同时做到最低延迟、最低成本、最大规模和最简单运维。先抓业务硬约束,再为失败路径付必要的复杂度。
15 题全对,证明你能从一条源流推导出转码、分发、容量、容灾和观测方案。
让源流变成不同终端可以消费的产品。
让规模增长时源站仍保持可控。
让故障可发现、可绕行、可验证。
用业务约束选择复杂度,而不是堆组件。