H.264 长期参考帧
H.264 长期参考帧1. 参考帧管理概述1.1 为什么需要参考帧管理在视频编码中,P 帧和 B 帧需要参考其他已解码帧进行预测。解码器必须维护一个参考帧列表,存储可用于预测的已解码帧。
参考帧的作用:
┌─────────────────────────────────────────────────────┐
│ 当前帧 P 需要预测时: │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 参考帧 0 │ │ 参考帧 1 │ │ 参考帧 2 │ │
│ │ (I 帧) │ │ (P 帧) │ │ (P 帧) │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ ...
H.264/AVC 编码原理详解
H.264/AVC 编码原理详解H.264 是目前应用最广泛的视频编码标准,理解其编码原理对优化 RTC 视频质量至关重要。本章将深入介绍 H.264 的核心技术。
1. H.264 概述1.1 发展历史
时间
事件
2003 年
H.264 标准正式发布
2004 年
保真范围扩展(FRExt)
2007 年
可伸缩视频编码(SVC)扩展
2010 年
多视点视频编码(MVC)扩展
1.2 H.264 的设计目标
目标
说明
高压缩效率
比 H.263 提升约 50%
网络友好
适应各种网络环境
低延迟
支持实时通信场景
容错能力
内置错误恢复机制
1.3 与前代标准的对比
特性
H.263
MPEG-4
H.264
帧内预测
无
DC/AC
9 种方向
帧间预测
16×16
16×16
可变块大小
变换
8×8 DCT
8×8 DCT
4×4/8×8 整数变换
熵编码
VLC
VLC
CAVLC/CABAC
环路滤波
可选
可选
强制
2. NAL 层结构2.1 双层结构H.264 采用双层结构:VC ...
SVC 可伸缩视频编码
SVC 可伸缩视频编码SVC(Scalable Video Coding)是一种将视频编码为多层结构的技术,允许接收端根据网络条件和终端能力选择解码不同的层。本章将详细介绍 SVC 的三种可伸缩模式及其在 WebRTC 中的应用。
1. SVC 概述1.1 什么是 SVC传统视频编码产生单层码流,要么完整解码要么无法解码。SVC 将视频编码为分层结构:
flowchart TB
subgraph SVC 码流
A[基础层 BL<br>必须解码]
B[增强层 1 EL1<br>可选]
C[增强层 2 EL2<br>可选]
end
A --> D[最低质量]
A --> B --> E[中等质量]
A --> B --> C --> F[最高质量]
G[带宽不足时] --> |只接收基础层| A
H[带宽充足时] --> |接收所有层| C
1.2 SVC 的核心价值
场景
传统编码的问题
SV ...
采集:摄像头/麦克风与屏幕共享
采集:摄像头/麦克风与屏幕共享采集是 RTC 流水线的起点,负责从硬件设备获取原始音视频数据。本章将从原理层面介绍采集机制、数据格式、内存模型和平台差异。
1. 采集概述1.1 采集的本质采集是将物理世界的模拟信号转换为数字信号的过程:
物理信号 → 传感器 → ADC(模数转换)→ 数字数据
↓
摄像头:光线 → CMOS/CCD → ADC → YUV/RGB
↓
麦克风:声波 → 振膜 → ADC → PCM
1.2 采集流水线flowchart LR
subgraph 物理层
A[光线/声波]
end
subgraph 硬件层
B[传感器]
C[ADC]
end
subgraph 驱动层
D[设备驱动]
end
subgraph 系统层
E[系统采集API]
end
subgraph 应用层
F[MediaStream]
end
A --> B --> C -- ...
信令机制与房间概念
信令机制与房间概念信令是 WebRTC 中交换会话控制信息的机制,用于建立连接前的协商。房间是多人通信中组织用户的逻辑概念。本章将详细介绍信令的工作原理、SDP 的组成结构以及房间管理。
1. 信令概述1.1 为什么需要信令WebRTC 本身只处理媒体传输,不定义信令协议。这是因为信令涉及:
会话协商:交换双方支持的媒体能力(编码格式、分辨率等)
网络信息:交换网络可达地址(ICE Candidate)
控制消息:加入/离开房间、静音通知、状态同步
信令的核心目的是让两个或多个端点在建立 P2P 连接之前,能够互相了解对方的能力和网络位置。
sequenceDiagram
participant A as 用户A
participant S as 信令服务器
participant B as 用户B
A->>S: 加入房间
B->>S: 加入房间
S->>A: 通知:B加入
S->>B: 通知:A已在线
A->>S: Offer SDP
S-> ...
WebRTC 协议簇:ICE、STUN/TURN、DTLS、SRTP
WebRTC 协议簇:ICE、STUN/TURN、DTLS、SRTPWebRTC 建立在多个协议之上,这些协议共同完成了网络穿透、安全传输等功能。本章将详细介绍这些核心协议的工作原理和报文结构。
1. 协议栈概览1.1 协议层次关系flowchart TB
subgraph 应用层
A[WebRTC API]
end
subgraph 会话层
C[ICE - 连接建立]
end
subgraph 安全层
D[DTLS - 密钥交换]
end
subgraph 传输层
E[SRTP - 媒体传输]
F[SCTP - 数据通道]
end
subgraph 网络层
G[UDP]
end
A --> C
C --> D
D --> E
D --> F
E --> G
F --> G
1.2 各协议职责
协议
所在层次
主要 ...
视频编码:H.264、H.265、SVC 与 AV1
视频编码:H.264、H.265、SVC 与 AV1视频编码是 RTC 中的核心环节,决定了视频的压缩效率、延迟和画质。本章将介绍主流视频编码标准的工作原理及其在 WebRTC 中的应用。
1. 视频编码基础1.1 为什么需要视频编码视频数据存在大量的冗余信息,编码的目的是去除这些冗余。
1.1.1 空间冗余(Spatial Redundancy)定义:同一帧图像内,相邻像素之间的值往往非常接近。
原因:
自然图像中,相邻区域通常属于同一物体或背景
物体表面的颜色、亮度变化是渐进的,而非突变的
图像中存在大量平坦区域或纹理相似区域
示例:
一块蓝色天空区域的像素值:
┌─────┬─────┬─────┬─────┐
│ 120 │ 121 │ 120 │ 122 │ ← 相邻像素值非常接近
├─────┼─────┼─────┼─────┤
│ 119 │ 120 │ 121 │ 120 │
├─────┼─────┼─────┼─────┤
│ 121 │ 120 │ 119 │ 121 │
└─────┴─────┴─────┴─────┘
原始存储: 需要存储每个像素值 ...
视频打包:RTP、RTCP、MTU 与分片
视频打包:RTP、RTCP、MTU 与分片视频打包是将编码后的视频帧封装为网络传输数据包的过程。正确的打包策略对实时性和质量至关重要。
1. 打包概述1.1 为什么需要打包编码后的视频帧通常较大,不能直接在网络上传输:
flowchart LR
A[编码帧<br>100KB+] --> B[打包器]
B --> C[RTP 包 1<br>1200字节]
B --> D[RTP 包 2<br>1200字节]
B --> E[RTP 包 N<br>...]
1.2 打包流程flowchart TB
A[编码视频帧] --> B{帧大小 > MTU?}
B -->|是| C[分片]
B -->|否| D[单包封装]
C --> E[添加 RTP 头]
D --> E
E --> F[发送]
2. RTP(Real-time Transport Protocol)2.1 RTP ...
RTCP 报文详解
RTCP 报文详解RTCP(RTP Control Protocol)是 RTP 的控制协议,用于传输质量反馈、会话控制和身份标识。本文详细介绍各种 RTCP 报文的格式和机制。
1. RTCP 概述1.1 RTCP 的作用flowchart LR
subgraph 发送端
A[RTP 数据] --> B[SR]
end
subgraph 接收端
C[RR] --> D[质量统计]
E[NACK] --> F[丢包重传]
G[PLI] --> H[请求关键帧]
I[RPSI] --> J[选择参考帧]
K[TMMBR] --> L[码率请求]
end
B <--> C
B <--> E
B <--> G
B <--> I
B <--> K
RTCP 主要功能:
质量监控:SR/RR 报告传输质量
丢包恢复:NACK 请 ...
H.264 句法分析
H.264 句法分析1. 什么是句法元素1.1 句法的概念句法(Syntax) 是 H.264 标准定义的码流组织规则,规定了编码数据如何被序列化为二进制比特流,以及解码器如何从比特流中还原出编码数据。
可以把句法理解为一种”协议”或”格式约定”:
编码端:按照句法规则将图像信息(预测模式、运动矢量、残差等)打包成二进制流
解码端:按照相同的句法规则从二进制流中解析出图像信息
1.2 为什么需要句法视频编码涉及大量信息需要传输:
编码一帧图像需要表达的信息:
┌─────────────────────────────────────────────────────┐
│ 1. 这是什么帧?(I/P/B 帧) │
│ 2. 用了什么预测方式?(帧内/帧间) │
│ 3. 参考了哪一帧?(参考帧索引) │
│ 4. 物体移动了多少?(运动矢量) │
│ 5. 预测误差是多少?(残差系数) ...
