webrtc 音视频数据流向

本文详细介绍了Webrtc音视频数据的处理流程,包括发送端的采集、编码及网络发送,以及接收端的收流、抖动处理和渲染等关键步骤。通过对核心流程的剖析,帮助读者理解Webrtc的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.分析思路切入点

音视频的处理过程是一个很典型的流水线形式,如下图所示:
在这里插入图片描述
对于一个程序来说,人员应该关注数据结构和数据的流向,这里的数据结构指的是核心的数据模型,是对业务的抽象结构,比如Linux下的进程 task_struct结构体。开发人员要清晰地知道整个程序在生命周期内的数据流向,知道数据在模块之间是怎么流动的,输入前和收入后有什么变化。

基于上面的流程图,本文分析下webrtc中核心的音视频数据流向图,希望可以给读者建立一个webrtc音视频处理过程的初步印象。

2. 音视频处理流程

运行环境是在window下,基于webrtc官方的native demo,只分析视频数据的处理过程,按照webrtc 线程处理数据的功能进行划分。

这张图是来自知乎陈子兴,清晰地概括webrtc中的线程模型,webrtc的各个模块就运行在这些线程中。
在这里插入图片描述

2.1 发送端

2.1.1 采集和前处理

独立的视频采集线程,这个线程操作包括通过libyuv进行的一些前处理过程
在这里插入图片描述

2.1.2 编码和分包

采集线程处理完的数据,投递到视频编码线程,这个线程的操作包括:

  1. 视频编码
  2. 视频帧拆分成RTP包
  3. 把相关的RTP包信息投递到平滑发送控制模块,这个模块决定什么时候发送数据
    在这里插入图片描述

2.1.3 平滑处理

平滑发送线程周期性地检测是否把数据可以投递到网络线程发送
在这里插入图片描述

2.1.4 网络发送

网络线程发送
在这里插入图片描述

2.2 接收端

2.2.1 收流

网络线程接收数据包,投递到 work 线程
在这里插入图片描述

2.2.2 jitterbuffer 处理

work 线程收到RTP包数据,进行组帧和帧参考关系判断,投递一个可解码帧给 FrameBuffer。FrameBuffer 由解码线程线程处理。
在这里插入图片描述

2.2.4 抖动计算和解码

解码线程进行抖动计算和解码,解码成功后,把YUV数据投递到渲染线程
在这里插入图片描述

2.2.5 渲染

渲染线程渲染yuv数据在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值