
WebRTC工作原理精讲
文章平均质量分 93
WebRTC作为当下最热门的实时音视频通讯框架,涉及非常多的过程,比如采集、编码、组包、发包、传输、收包、丢包重传、解封装、解码、音视频同步、渲染等,需要一点点深入理解其中的奥秘。
优惠券已抵扣
余额抵扣
还需支付
¥89.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Data-Mining
一枚典型的音视频技术爱好者
展开
-
《WebRTC工作原理精讲》系列-总览
前言欢迎大家订阅Data-Mining 的《WebRTC工作原理精讲》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面让大家对专栏可以有一个整体的认识。正文WebRTC[1]-WebRTC中h264解码过程的源码分析WebRTC[2]-WebRTC丢包重传大解密WebRTC[3]-WebRTC设置simulcast内部逻辑WebRTC[4]-WebRTC中JitterBuffer的运行机制WebRTC[5]-WebRTC拥塞控制之REMB and GCC.原创 2020-12-22 15:37:58 · 4375 阅读 · 2 评论 -
WebRTC[2]-WebRTC丢包重传大解密
概述WebRTC之所以可以优秀的完成音视频通讯,和它本身的丢包重传机制是密不可分的,今天我们就来看看其中的奥秘。本文以M76版本展开,如果你的工程是基于其他版本开发的,也可以参考。NACK说到丢包重传就不得不提到NACK技术,那么NACK是什么呢。它的全称是Negative Acknowledgment Packet,意思是否定确认包,说到这里我们应该可以联想到ACK(Acknowledgment Packet,确认包)。没错,二者的意思是相反的。ACK表示通知对方我收到了你发给我...原创 2020-06-18 22:46:27 · 3350 阅读 · 6 评论 -
WebRTC[54] - WebRTC之RTCP详解
在WebRTC中,流媒体协议使用的RTP/RTCP协议,其中,RTP负责流媒体数据传输,RTCP负责传输的质量控制。RTCP的作用还是非常重要,它可以实现发送数据/接收数据的反馈、丢包重传、关键帧请求、⽹络指标RTT、丢包率、抖动的计算及反馈,拥塞控制相关的带宽反馈,以及⽤户体验相关的⾳视频同步等。文本将重点介绍RTCP相关的内容和基础知识。原创 2023-02-08 10:12:01 · 508 阅读 · 0 评论 -
WebRTC[53] - WebRTC回声问题定位的一般方法
WebRTC在使用过程中经常会遇到回声问题,但是需要说明的是大多都是个例,其实,WebRTC自己是有对应的回声消除模块的,可以处理一般情况下的回声问题。但是,避免不了所有的回声问题。如果还出现类似的问题,那说明你遇到特殊的设备或者使用场景了。原创 2022-12-27 03:30:00 · 1675 阅读 · 0 评论 -
WebRTC[52] - WebRTC 带宽分配逻辑详解
WebRTC 完成带宽探测后,又是如何分配这些带宽的呢?无疑是 WebRTC 众多处理逻辑中一个非常有意思的知识点,今天本来就来为大家揭秘。原创 2022-12-02 20:00:00 · 605 阅读 · 0 评论 -
WebRTC[51] - 如何获取Chrome浏览器底层的WebRTC日志
WebRTC 是一个非常优秀的跨平台的音视频通讯方案,但是,在使用过程中依然无法避免遇到各种各样的问题,因此就需要借助日志分析原因。对于native客户端,不管是桌面端还是移动端都可以很容易地拿到日志,毕竟大不了重新编译一遍。但是 Web 页面的话就有一个问题,比如 Chrome 浏览器,我们都知道在 Chrome 上音视频通讯使用的也是 WebRTC,如果为了拿到日志,重新编译 Chrome 肯定是不可取的,毕竟 Chrome 浏览器是人家谷歌的。原创 2022-10-26 19:55:45 · 1343 阅读 · 8 评论 -
WebRTC[50] - WebRTC支持SVC时SDP信令的协商过程
WebRTC支持SVC需要从信令消息和媒体数据两方面入手,其中,信令消息主要是指SDP信息交换,媒体数据主要是指编码器可以编码出带有分层信息的视频码流,同时,打包出支持流媒体服务器转发的RTP包。今天本文会重点介绍信令消息部分的内容,下一篇文章会介绍媒体数据部分的内容。原创 2022-11-03 19:00:00 · 514 阅读 · 0 评论 -
WebRTC[49] - WebRTC官方windows平台Demo入门教程
开始学习WebRTC时,无论是做移动端开发,还是桌面端开发的小伙伴,使用windows平台的demo上手都是一个非常正确的选择。说到demo,首先就要考虑如何编译并跑起来,才能说后续学习的事情。注意:本文介绍的内容是基于WebRTC版本M94的。原创 2022-10-17 23:09:24 · 441 阅读 · 0 评论 -
WebRTC[48] - WebRTC 屏幕分享深度解析
今天突然发现自己对 WebRTC 的屏幕分享的底层工作原理有一个误解,之前,我一直以为屏幕分享就是简单的采集桌面的画面,然后编码发送就行了。实时上并不是如此简单,本文就来为大家揭秘。原创 2022-10-14 23:14:57 · 901 阅读 · 0 评论 -
WebRTC[47] - WebRTC 保存 YUV 数据的常用方式
目录前言正文1.webrtc::VideoFrame 类型2.webrtc::I420Buffer 类型注意事项 (1)"wb+"模式:(2)"ab+"模式:《WebRTC工作原理精讲》系列-总览_Data-Mining的博客-优快云博客前言欢迎大家订阅Data-Mining 的《WebRTC工作原理精讲》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面让大家对专栏可以有一个整体的认识。正文WebRTC[1]-WebRTC中h264解码过程的源码分析WebRTC[2]-WebRTC丢包原创 2022-06-22 19:30:00 · 542 阅读 · 0 评论 -
WebRTC[46] - WebRTC 之 RTT 深入浅出
目录前言一、RTT 的概念二、RTT 的作用三、RTT 的计算周期1. 客户端 rtcp 包的发送周期(1)音频发送周期(2)视频发送周期2. 服务端 rtcp 包的发送周期(1)音视频的发送周期(2)周期性调用流程四、RTT 工作原理1. 客户端(1)Sender Report(SR)介绍(2)Receiver Report(RR)介绍2. 服务端(1)XR 包简介结尾《WebRTC工作原理精讲》系列-总览_Data-Mining的博客-优快云博客前言欢迎大家订阅Data-Mining 的《WebRTC原创 2022-06-19 01:28:09 · 396 阅读 · 0 评论 -
WebRTC[45] - WebRTC 支持 H265 视频流解码
目录前言正文一、编译支持解码 H265 的 FFmpeg 的动态库1.1 修改代码1.2 常见问题1.2.1报错:lld-link: error: undefined symbol: _ff_hevc_dsp_init_x861.2.2报错:lld-link: error: undefined symbol: _ff_hevc_idct_4x4_dc_8_mmxext1.2.3报错:LLVM ERROR: out of m...原创 2022-03-31 03:00:00 · 3688 阅读 · 8 评论 -
WebRTC[44] - WebRTC 在安卓端的视频硬编硬解策略详解
前言众所周知,视频数据的编码和解码会非常消耗 CPU 资源,特别是移动端设备,非常考验设备的性能和电量。因此,为了减少对系统 CPU 资源的消耗,移动端设备都会根据当前的软件和硬件条件,决定是否采用硬件加速。本文以安卓端设备为例进行介绍,看一看 WebRTC 是如何在安卓手机上启用和关闭设备的硬编和硬解策略的。正文本文介绍和讨论的内容基于 WebRTC m76分支进行展开。一、硬件加速编码首先,我们来看 WebRTC 的硬件加速编码策略。1.1 系统版本限制首先需要明确的...原创 2022-03-18 22:22:58 · 1072 阅读 · 2 评论 -
WebRTC[43] - WebRTC是如何设置视频编码偏好的?
WebRTC作为实时音视频通讯的解决方案,在视频画面编码过程中有非常多的控制机制,有时候,你可能会遇到这样的情况,明明分辨率设置的很高,但是编码出来的视频画面分辨率却非常低。同样,帧率有时候也会面临相同的问题。这其实是WebRTC内部的视频编码偏好机制在起作用,刚刚接触WebRTC的同学遇到这样的问题,很可能会一头雾水,今天我们就揭秘WebRTC在这个过程中的实现逻辑,消除大家在这方面的疑惑。原创 2022-03-08 21:38:56 · 683 阅读 · 0 评论 -
WebRTC[40]- WebRTC 如何在安卓系统上采集音频数据
目录前言正文步骤一、获取麦克风权限步骤二、音频采集模块初始化步骤三、启动音频采集流程步骤四、音频预处理结尾前言WebRTC 作为一个开源的实时音视频通许方案,经过多年的发展基本上已经支持了所有的常用终端,比如 windows、mac、Android、iOS 等。我们都知道音视频通讯的前提是采集本地的音频和视频数据信息。今天,我们就来了解一下 WebRTC 在安卓端是如何采集音频信号的。正文上一篇文章已经介绍了 WebRTC 如何在安卓系统上采集视频数据信号,相信小原创 2022-02-14 23:16:40 · 2442 阅读 · 0 评论 -
WebRTC[41] - WebRTC 传输通道的建立过程解析
目录前言正文一、全局初始化二、PeerConnectionFactory三、PeerConnection四、创建音视频流五、SDP 协商六、传输通道建立结论《WebRTC工作原理精讲》系列-总览_liuzhen007的专栏-优快云博客前言欢迎大家订阅Data-Mining 的《WebRTC工作原理精讲》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面让大家对专栏可以有一个整体的认识。正文WebRTC[1]-WebRTC中h264解码过程的源码分析原创 2022-02-13 21:05:51 · 1309 阅读 · 0 评论 -
WebRTC[39]- WebRTC 如何在安卓系统上采集视频数据
WebRTC 作为一个开源的实时音视频通许方案,经过多年的发展基本上已经支持了所有的常用终端,比如 windows、mac、Android、iOS等。我们都知道音视频通讯的前提是采集本地的音频和视频数据信息。今天,我们就来先了解一下 WebRTC 在安卓端是如何采集视频信号的。正文安卓设备和苹果iOS设备都属于移动端,在音视频处理的很多地方都原创 2022-02-06 22:40:05 · 1870 阅读 · 1 评论 -
WebRTC[42]- WebRTC 常见开源方案综述
近两年,由于新冠疫情的影响,实时音视频通讯相关行业发展迅速,特别是视频会议、在线直播等行业场景。因此,也涌现出了很多关于 WebRTC 优秀的开源项目(不是说才出现,是才被大家注意到)。今天就来聊一聊比较常见的一些 WebRTC 流媒体服务器。常见开源方案一、Kurento原创 2022-01-14 11:05:44 · 1431 阅读 · 2 评论 -
WebRTC[38]- WebRTC 与 WebSocket 的区别
目录WebRTC 简介WebSocket 简介二者的主要区别WEBRTC 的优点WEBRTC 的缺点WEBSOCKET 的优点WEBSOCKET 的缺点《WebRTC工作原理精讲》系列-总览_liuzhen007的专栏-优快云博客_webrtc 原理前言欢迎大家订阅Data-Mining 的《WebRTC工作原理精讲》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面让大家对专栏可以有一个整体的认识。正文WebRTC[1]-WebRTC中h264解码过程.原创 2021-12-20 00:07:30 · 1710 阅读 · 0 评论 -
WebRTC[37]-WebRTC中自定义大小流和 simulcast 流的区别
前言早在 simulcast 机制出现之前,很多人就提了配合使用视频大流和视频小流的方案(下文统一称为自定义大小流),通过在大小流切换满足不同场景的需要。今天本文结合二者的区别,简单做了总结归纳。原创 2021-11-03 23:25:00 · 1169 阅读 · 0 评论 -
WebRTC[36]-WebRTC 之 webrtc-internals 工具详解
目录前言正文一、使用方式二、功能介绍1. GetUserMedia Request 页签2. 媒体流信息页签3. 媒体参数分析4. 参数分析模式《WebRTC工作原理精讲》系列-总览_liuzhen007的专栏-优快云博客_webrtc技术详解前言欢迎大家订阅Data-Mining 的《WebRTC工作原理精讲》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面让大家对专栏可以有一个整体的认识。正文WebRTC[1]-WebRTC中h264解码过.原创 2021-10-28 01:35:34 · 1018 阅读 · 0 评论 -
WebRTC[35]-WebRTC之MediaCodec
目录前言正文C层和Java层的方法映射关系处理 SDP 信息准备视频编码参数开始视频编码结尾PS:《WebRTC工作原理精讲》系列-总览前言WebRTC为了实现在 Android 端的硬编硬解功能,引入了 MediaCodec 模块。对比 iOS 端的VideoToolbox 和 AudioToolsbox,今天,我们先了解一下 Android 端的硬编硬解模块MediaCodec。正文WebRTC 最新的版本默认都是硬编软解,为了保证兼容性,限制了...原创 2021-09-20 11:22:22 · 516 阅读 · 0 评论 -
WebRTC[34]- Simulcast 和 SVC 的区别
前言WebRTC作为音视频通讯的P2P方案,从发布伊始,就限定了使用场景是一对一的音视频通话。连作者自己也没有想到WebRTC会慢慢发展成N2N的使用场景。这得益于流媒体服务架构的演变过程,这其中也涉及到了Simulcast和SVC的概念。今天我们可以简单的就此展开讨论。正文我们都知道,WebRTC是作为P2P方案诞生的,在发展成多人通讯的场景下,如果还要求每个推流端对所有的Peer,的带宽压力引出流媒体我们都知道流媒体服务有三种通用架构mesh、sfu、mcuSimul原创 2021-08-05 08:52:43 · 1424 阅读 · 0 评论 -
WebRTC[30]-WebRTC简介
WebRTC是一个免费的、开放的项目,它通过简单的API为浏览器和移动应用程序提供实时通信(RTC)能力。为了最好地服务于这个目的,WebRTC组件正在被不断的优化。原创 2018-05-16 21:13:34 · 904 阅读 · 0 评论 -
WebRTC[29]-WebRTC如何在网页端添加硬水印【技巧版】
前言做音视频的同学都知道播放器展示的视频水印分为软水印和硬水印两种,水印的作用一方面是用来增加视频画面的展示内容,比如广告效果、特效处理等;另一方面是出于版权保护的目的,防止视频盗录的风险。一般实现视频的软水印是在播放器端进行处理的,安全性会比较差。硬水印则是在视频源上进行处理,将水印打到视频里,成为视频内容的一部分,这样安全性就会非常高。...原创 2021-03-31 08:45:07 · 1176 阅读 · 2 评论 -
WebRTC[28]-一款非常简单的基于WebRTC的视频预览播放器(具有贴图、视频特效)
目录前言正文1. 开启摄像头和麦克风2. 增加播控按钮3. 本地预览拍照4. 保存预览照片5. 显示贴图效果(封面)6. 视频预览特效(多种效果)6.1曝光效果6.2悬浮立体效果6.3磨皮效果6.4 反色效果结论前言今天这篇文章给大家介绍一款非常简单的基于WebRTC采集端的视频预览播放器。正文我们需要做的是本地预览的视频播放器,那么首先肯定是要打开摄像头,然后显示播放器控制按钮,最后再增加一些辅助功能,比如拍照、保存照片、贴图....原创 2020-10-24 00:49:11 · 6574 阅读 · 35 评论 -
WebRTC[31]-WebRTC的FEC类型
WebRTC中的 FEC 实现分为 UlpFEC 和 FlexFEC。主要区别:1.Ulpfec详情可以参考:RFC 5109。FlexFEC还在实现中, 相关标准也还是RFC草案。2.WebRTC对FEC进行恢复处理的动作对RTCP的统计是透明的。3.WebRTC对FEC的冗余度计算是动态的,会根据丢包情况和网络带宽估计(BWE)的结果动态调整冗余度,内部会维护一个静态的冗余度表。冗余度范围: ...原创 2018-04-28 16:21:22 · 3371 阅读 · 1 评论 -
WebRTC[32]-WebRTC之CNG
舒适噪音生成(comfort noise generator,CNG)是一个在通话过程中出现短暂静音时用来为电话通信产生背景噪声的程序。在webrtc中是一个重要的模块,主要的代码并不多,如下图所示:其中,cng编码是一个重点,关键函数及实现:size_t ComfortNoiseEncoder::Encode(rtc::ArrayView<const int16_t> s...原创 2018-05-31 11:54:14 · 2345 阅读 · 2 评论 -
WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
目录问题解决Java:OC:C++:JS:问题WebRTC音视频通道建立的前提是完成SDP信息的交换,前端时间遇到了一个SDP信息交换失败的问题,非常具有代表性,今天周末特意整理了这篇文档。报错信息:Failed to set remote offer sdp: Called with SDP without DTLS fingerprint解决在进行详细介绍前,先把问题解决前后的SDP信息列一下。之前SDP:v=0o=- 9952557.原创 2020-12-13 18:37:02 · 4529 阅读 · 11 评论 -
WebRTC[8]-SCTP协议在WebRTC中的使用浅析
前言大家都知道WebRTC集各种协议于一身,今天就来谈谈SCTP协议在WebRTC中的使用。正文SCTP的全称是Stream Control Transmission Protocol,它是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,同时具备TCP和UDP的特征。通过上图,我们可以知道SCTP协议基本上集成了TCP和UDP的全部优点,属于介于二者之间的产物。在流量控制、拥塞控制、可靠性传输和包的顺序传输方面都和TCP对齐,在传输机制方面和UDP一致。同时,可靠性和原创 2020-12-09 08:47:02 · 1476 阅读 · 0 评论 -
WebRTC[9]-报错:navigator.mediaDevices为undefined
问题基于WebRTC进行JS开发时,有时在浏览器上会遇到navigator.mediaDevices.getUserMedia为undefined的报错。解决报navigator.mediaDevices.getUserMedia为undefined的错误,其实是因为navigator.mediaDevices没有找到。但这也只是表相,其根本原因是浏览器的安全策略,特别是chrome浏览器。一般来说,JS开发有三种访问环境。一、使用file协议打开的本地文件比如,file:///Us原创 2020-12-06 09:36:01 · 2566 阅读 · 0 评论 -
WebRTC[3]-WebRTC设置simulcast内部逻辑
webrtc设置simulcast的内部逻辑webrtc编码时是如何区分屏幕分享流还是实时视频流的?simulcast是否启用是编码器的设置属性之一,在进行视频编码时,是区分普通视频流还是屏幕分享流的。屏幕分享流的标识在编码参数的options中保存,在设置最小传输码率时二者略有不同。具体可以参考如下代码:src/media/engine/webrtc_video_engine.cc bool is_screencast = parameters_.options.is_scre原创 2020-11-19 22:20:21 · 1432 阅读 · 6 评论 -
WebRTC[4]-WebRTC中JitterBuffer的运行机制
前言众多周知,WebRTC凭借自身非常完美的JitterBuffer控制机制能够适应各种网络抖动和异常情况,从而保证声音和画面的流畅播放。今天,我们就从WebRTC对音频的处理逻辑中一窥究竟。正文大家都知道,实际的网络总是非常复杂的,存在各种丢包和抖动等异常情况,视频经常会遇到卡顿、花屏等问题。所以,在接收端对接收的数据做一个缓冲处理是非常有必要的。如果是内部专用网络,一般能够保证非常稳定的网络状态,在一定程度上保证没有丢包,没有抖动和延时,那么接收端不需要做其他的缓存处理逻辑,拿到音频和视频数原创 2020-10-19 21:34:30 · 1710 阅读 · 0 评论 -
WebRTC[10]-WebRTC中的OpenSLESPlayer、AAudioPlayer、AudioTrackJni
目录前言正文OpenSLESPlayerAAudioPlayerAudioTrackJni前言在Android系统中,WebRTC播放音频的方式有三种,分别是OpenSLESPlayer、AAudioPlayer、AudioTrackJni。今天就来简单介绍一下。正文OpenSLESPlayerOpenSLESPlayer 是使用基于C语言的OpenSL ES API实现了对16位单声道PCM音频输出的支持。这个过程与java层的逻辑解耦,没有使用JNI技术。.原创 2020-10-08 18:47:03 · 1010 阅读 · 0 评论 -
WebRTC[11]-WebRTC如何通过SDP信息设置音频码率
前言WebRTC除了通过API接口控制某些参数外,还能通过SDP信息进行音视频参数控制,特别是在进行JS SDK开发时,这种情况是非常普遍的。正文首先来看一段SDP信息(只包含音频信息):v=0o=- 8275923203002055919 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE audio videoa=msid-semantic: WMS 6a6d1509-69e0-4fc2-b447-5b4391f9ad69_STSm=audio原创 2020-09-27 16:06:53 · 2242 阅读 · 0 评论 -
WebRTC[12]-从另一个角度看待安全加密问题
最近一直在做量子加密相关的项目,突然意识到现在很多高大上的技术都已经落地了。几年前还是一个概念,现在已经非常接地气的开始为大众服务了。顿时感叹科学技术发展之快。从另一个角度看待安全加密问题信息的真实性指确保信息的来源可靠、未被伪造与篡改的性质。mac p12windows pfx信息的真实性也是网络与信息安全的主要属性之一。如何鉴别信息的合法性?如何 确认真实的身份信息?如何防止冒充、伪造?这些都是网络与信息安全领域非常重要的 任务,它们直接影响着社会秩序、生产生活秩序的各个方面。.原创 2020-07-21 10:08:09 · 827 阅读 · 0 评论 -
WebRTC[5]-WebRTC拥塞控制之REMB and GCC
前言WebRTC在处理网络拥塞问题时一般有网络拥塞(congestion)是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。当网络发生拥塞时,一般会出现数据丢失,时延增加,吞吐量下降,严重时甚至会导致“拥塞崩溃”(congestion collapse)。......原创 2020-07-10 17:19:04 · 2162 阅读 · 0 评论 -
WebRTC[13]-WebRTC中的常用术语
相信大家在阅读WebRTC源码的过程中,经常会遇到一些专用术语。明知道它们代表了一定的特定意义,但就是不知道,很影响阅读理解和学习体验,自己也有类似经历,平时就稍微记录了一下。其实如果你经常看的话,也不用专门记录,时间久了慢慢就理解了。快来看看都有哪些常用术语吧!1. VAD(Voice Activity Detection)算法的作用是检测语音。2. AGC(Auto Gain Control),自动增益控制。3. ANS(Auto Noise Suppression),自动噪声抑制。原创 2020-06-06 11:20:59 · 990 阅读 · 0 评论 -
WebRTC[6]-WebRTC控制视频编码偏好机制
iOS的OC接口:Android的Java接口:C++接口:这里 media_channel_ 对象会调用哪个SetRtpSendParameters()方法呢?具体要看media_channel_ 是音频Channel还是视频Channel,如果是音频Channel则走如下逻辑:今天讨论视频编码控制,音频方面就不深入了。如果是视频Channel则走如下逻辑:这个方法比较长,后半部分如下:看上面的代码,调用的SetRtpParameters(......原创 2020-05-15 21:49:17 · 938 阅读 · 0 评论 -
WebRTC[14]-WebRTC如何通过参数控制编码模式切换(DIsabled模式)
bool WebRtcVideoChannel::AddSendStream(const StreamParams& sp)调用AddSendStream()方法时,首先检验StreamParams参数是否有效,然后判断SSRC是否可用。创建WebRtcVideoSendStream实例的时候,将参数传递给WebRtcVideoSendStream对象。参数sp经过CreateRtp......原创 2020-04-16 23:09:11 · 2868 阅读 · 2 评论