1、引言
在一个典型的IM应用里,使用实时音视频聊天功能时,视频首帧的显示,是一项很重要的用户体验指标。
本文主要通过对WebRTC接收端的音视频处理过程分析,来了解和优化视频首帧的显示时间,并进行了总结和分享。
文章内容不太适合新手,有点晦涩,请初学者慎读!
2、什么是WebRTC?
对于没接触过实时音视频技术的人来说,总是看到别人在提WebRTC,那WebRTC是什么?我们有必要简单介绍一下。
![](https://i-blog.csdnimg.cn/blog_migrate/87152c330bfdfd0b2875f617412839c2.png)
说到 WebRTC,我们不得不提到 Gobal IP Solutions,简称 GIPS。这是一家 1990 年成立于瑞典斯德哥尔摩的 VoIP 软件开发商,提供了可以说是世界上最好的语音引擎。
Skype、腾讯 QQ、WebEx、Vidyo 等都使用了它的音频处理引擎,包含了受专利保护的回声消除算法,适应网络抖动和丢包的低延迟算法,以及先进的音频编解码器。
Google 在 Gtalk 中也使用了 GIPS 的授权。Google 在 2011 年以6820万美元收购了 GIPS,并将其源代码开源,加上在 2010 年收购的 On2 获取到的 VPx 系列视频编解码器,WebRTC 开源项目应运而生,即 GIPS 音视频引擎 + 替换掉 H.264 的 VPx 视频编解码器。
在此之后,Google 又将在 Gtalk 中用于 P2P 打洞的开源项目 libjingle 融合进了 WebRTC。目前 WebRTC 提供了包括 Web、iOS、Android、Mac、Windows、Linux 在内的所有平台支持。
虽然WebRTC的目标是实现跨平台的Web端实时音视频通讯,但因为核心层代码的Native、高品质和内聚性,开发者很容易进行除Web平台外的移殖和应用。目前为止,WebRTC几乎是是业界能免费得到的唯一高品质实时音视频通讯技术。
3、流程介绍
一个典型的实时音视频处理流程大概是这样:
-
1)发送端采集音视频数据,通过编码器生成帧数据;
-
2)这数据被打包成 RTP 包,通过 ICE 通道发送到接收端;
-
3)接收端接收 RTP 包,取出 RTP payload,完成组帧的操作;
-
4)之后音视频解码器解码帧数据,生成视频图像或音频 PCM 数据。
如下图所示:
本文所涉及的参数调整,谈论的部分位于上图中的第 4 步。
因为是接收端,所以会收到对方的 Offer 请求。先设置 SetRemoteDescription 再 SetLocalDescription。
如下图蓝色部分:
![](https://i-blog.csdnimg.cn/blog_migrate/35b1e440d86d8cd26ab0511824d51c6b.png)
私信扣1,资料免费分享,资料内容包括《Andoird音视频开发必备手册+音视频最新学习视频+大厂面试真题+2022最新学习路线图》(C/C++,Linux,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)等等
4、参数调整
4.1视频参数调整
当收到 Signal 线程 SetRe