AV1 hardware decode

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


主要逻辑:

📊 时序图说明

关键流程阶段:

  1. 🔵 初始化阶段(蓝色)
  • Create创建解码器实例
  • Configure配置参数
  • RegisterDecodeCompleteCallback注册回调
  1. 🟠 首帧解码阶段(橙色)
  • 解析AV1 Sequence Header
  • 创建CMVideoFormatDescription(av1C box)
  • 创建VTDecompressionSession(硬件解码器)
  • 提交首帧到VideoToolbox
  • Lazy Initialization:只在首次解码时创建session
  1. 🟢 异步回调阶段(绿色)
  • VideoToolbox在decode_queue线程异步回调
  • 转换NV12 → I420格式
  • 保留timestamp信息
  • 回调应用层DecodedImageCallback
  • 首帧特殊处理:只打印一次日志
  1. 🟡 P帧解码阶段(黄色)
  • 复用已有的session和format_description
  • 直接提交到VideoToolbox
  • 流程更快(无需解析、创建)
  1. 🟣 分辨率改变(紫色)
  • 销毁旧session
  • 重置first_frame_decoded标志
  • 重新创建session和format
  • 重新打印首帧日志
  1. ⚫ 释放资源(灰色)
  • 清理所有VideoToolbox资源
  • 重置所有状态标志

关键设计点:

  • ✅ Lazy Initialization:首次Decode时才创建session
  • ✅ 异步解码:VTDecompressionSessionDecodeFrame异步提交
  • ✅ Fallback机制:多处检查返回FALLBACK_SOFTWARE
  • ✅ 线程安全:first_frame_decoded使用atomic保证
  • ✅ 资源管理:使用CFRelease正确释放CF对象

 

 

 

 

 

6

7

8

 

 

 

4

 

3

 

2

 

1

 

 

posted @ 2025-12-23 18:04  AndyHu518  阅读(34)  评论(0)    收藏  举报