1. webrtc中AV1的真实数据流(接收端)
RTP packet→ depacketize→ OBU (fragment / aggregate)→ Temporal Unit (TU)→ Encoded Frame→ Decoder
2.
🔹 ① RTP → OBU(AV1Depacketizer)
-
处理:
-
OBU aggregation
-
OBU fragmentation(Z / Y bits)
-
-
保证:
-
OBU 按 bitstream 顺序恢复
-
-
不关心 decoder
👉 这一层只负责:
“把 RTP payload 还原成合法的 OBU 序列”
🔹 ② OBU → Temporal Unit(FrameAssembler)
-
以 marker bit / TU boundary 作为结束条件
-
收集:
-
OBU_FRAME_HEADER -
OBU_TILE_GROUP -
OBU_METADATA
-
-
直到:
-
当前 TU 完整
-
👉 这里已经形成了 “一个可 decode 的单位”
🔹 ③ Temporal Unit → EncodedImage(Frame)
在 WebRTC 里:
-
EncodedImage:-
是 decoder 的输入单位
-
≈ 1 TU
-
-
字段包括:
-
timestamp
-
frame type (key / delta)
-
data buffer(OBU bitstream)
-
👉 这一步你口中的 “组成 frame”
在代码里其实是:组成一个 EncodedImage
🔹 ④ EncodedImage → Decoder(VideoToolbox / libaom)
-
WebRTC 把完整 TU 的 OBU:
-
按 AV1 Annex B / length-prefixed
-
喂给 decoder
-
-
Decoder:
-
可能 decode 新 frame
-
也可能 SEF(show existing frame)
-
👉 decoder 不认识 RTP / OBU
👉 它只吃:完整 frame bitstream