WebRTC视频数据流程分析

大家好,非常高兴能有机会和大家进行分享。我叫许建林,英文名Piasy,目前在PowerInfo从事高稳定、低延迟的音视频实时传输技术的研发工作。到目前为止已经有五年的工作经验,前两年主要是做视频直播的安卓APP开发,之后的三年在PowerInfo一直在做RTC SDK的开发。我是一个开源爱好者,在GitHub也有发过许多的开源项目,非常欢迎大家关注一起交流。

本次分享的主题是WebRTC视频流数据流程分析,主要内容可以分为以下几个部分:

  • WebRTC 代码库简介
  • 分析方法
  • 视频流程介绍
  • 实战:客户端视频录制

WebRTC 代码库简介

1.1 WebRTC简单介绍

关于什么是WebRTC,如何用一两句话简单说明?

WebRTC是一个Web端 RTC的互联网标准,同时我们也会用WebRTC来指代一个开源项目,是目前完成度最高、最流行的RTC框架,是由Google开源的项目。

1.2 WebRTC版本说明

上图展示的是Chromium项目网站上公开的版本发布规划表,图中Milestone 81是Milestone的编号,简写为M81。表中其它列如Chromium、Skia以及WebRTC等都是其对应的版本分支,例如Skia有同名的m81分支,之前WebRTC也是有同名的m75、m76分支,只不过后来改变了分支的命名方式。

在《WebRTC Native开发实战》中有提到过书中对于WebRTC的代码分析是基于某次提交版本,例如“#30432提交”。如图所示为WebRTC的Git提交记录图,蓝色箭头所指位置:Cr-Commit-Position:refs/head/master@{#30432},“#30432”的含义是指该项目从开始到现在第几次提交。WebRTC的代码库有一个特点,其主干分支是一条直线,无其它分支(当然在发布新版本时,会开出发布分支,可能会同步一些需要带上去的提交,但是这个分支上的提交都不会再合并回来),这也就使得WebRTC的版本历史非常清晰,开发者在查询提交记录或变更历史时会非常简单方便。

上图是我在之前参与过的一个项目中截取的,是在Sourcetree中截取的。我们可以看到其分支非常复杂,但其实这是遵循GitFlow的版本控制模式运行所导致的结果,Gitflow被很多人诟病的地方就是提交的版本记录分支结构非常复杂,难以追溯历史。

1.3 WebRTC代码目录

图为MacOS中WebRTC iOS的代码库目录

首先是“api”,主要是C++代码的公开api,开发者在使用C++开发时就会用到其预先定义的接口程序,例如pPear_cConnection类。同时,在安卓或iOS上使用Java或者ObjectiveC接口的话,其实也都是对C++接口的bouninding。

“call、pc、media”:这三个目录在我理解,是WebRTC主要流程和业务逻辑的实现代码。

“audio、common_aduio、video、common_video”:这四个目录主要是音频和视频类相关的代码。

“modules”:很多公司可能不会直接使用整个WebRTC的代码库,而只是使用其中的一些常用模块,这些模块大都包含在“modules”中,例如回声抑制、噪音抑制等处理,视频编码、Jitterbuffer等。

“p2p”:与p2p连接相关的代码。

“sdk”:Androi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值