- 博客(175)
- 资源 (2)
- 收藏
- 关注
原创 WebRTC系列实战-自定义RTP中的extension
Webrt中本身自定义了很多的rtp extension。例如absltime,audioLevel,videoRotaion,等,但是有时候我们希望额外发送一些我们自定义 的信息,比如:说话人的信息等,这里就需要自定义我们自己的rtp extension了,本文将详细介绍如何通过修改源码的方式实现发送自定义的信息;
2024-06-20 18:30:00
428
原创 mediasoupWork中引入本地so库
本篇是一个bug的记录,原自一次需求对mediasoup worker层的修改需要引入一个自己的库,但是只有so库,找不到源码无法使用静态库的方式通过修改.gyp连接到worker中;对于.gyp中so库的引入网上很难找到对应的文档,所以按照ld连接库的方式添加;
2024-04-26 20:30:00
421
原创 flutter笔记-webrtc使用1:依赖本地包socket.io-client
通过本文你将学会如何添加本地的dart包到自己的项目,将了解如何使用socketio;
2024-04-25 16:32:50
1428
2
原创 flutter笔记-万物皆是widget
定义类继承自自己要实现的widget实现必须要实现的方法build方法;例如如下示例:@override其中的build是有flutter自动调用;
2024-04-24 10:01:33
726
4
原创 flutter笔记-hello dart
在AS中启动iOS模拟器要是启动设备,检查下默认xcode,因为我有多个xocde默认没有选择不是系统的所以云信iOS模拟器失败;AS中默认启动的是application下的xcode模拟器;这两个的区别是,const 必须赋值常量值,是要在编译期间确定的值;final可以是运行期间确定的值;打开AS 选择打开已经存在的项目,选择文件,然后就可以在AS种编译了;中配置的内容下载对应的包,并放置在系统缓存中(包括其依赖的所有包);,也就是判断一个对象是否存在,需要明确的bool类型;
2024-04-23 17:03:02
1116
原创 WebRTC系列-H264视频帧组包(视频花屏问题)
WebRTC在弱网环境下传输较大的视频数据,比如:屏幕共享数据;会偶发的出现黑屏的问题;也就是说当视频的码率比较大且视频的分辨率比较高的时候,有一定概率出现黑屏的问题;本文基于M76分支的代码分析其WebRTC组包的两个关键函数;WebRTC的组帧逻辑主要在类中(在modules/video_coding/packet_buffer.cc中),其中的和是组包的两个关键函数;这篇文章会分析其中的主要逻辑及可能导致问题的位置;
2024-01-31 21:45:00
1113
原创 WebRTC系列-自定义媒体数据加密
前面的文章都有提过WebRTC使用的加密方式是SRTP这个库提供的,这个三方库这里就不做介绍,主要是对rtp包进行加密;自然的其调用也是WebRTC的rtp相关模块;同时在WebRTC里也提供一个自定义加密的接口,本文将围绕这个接口做介绍及分析;
2024-01-29 20:30:00
622
原创 WebRTC编译记录
从命令行错误看,出错是因为,好吧,那就试着重新编译安装:安装这个很简单照着执行命令就行:安装完后,执行命令,输出如下图:说明安装成功了;;但是。。。问题还是没解决,接着在https://groups.google.com/g/discuss-webrtc/c/xXkmEzzpG_8/m/d1jiHe9HKwAJ谷歌论坛上找到类似问题:接着尝试:;在执行了brew unlink libtool后,继续尝试编译,,顺利编译完成;不行其实,然后看执行命令中有个错误:也就是说默认使用libtool不对
2023-12-19 10:19:33
545
原创 WebRTC系列--track的set_enabled详解
最近项目中发现远端的视频调用track的set_enabled设置成false后,视频画面是黑屏;通过断点分析,发现gl部分还是有视频帧,并且在渲染;这篇文章就是set_enabled这个接口开始,详细分析其中调用流程;本文会详细的分析这个接口的调用流程;
2023-09-14 20:00:00
557
原创 WebRTC系列--WebRTC音频支持RedFEC的修改
基于rfc2198规定的格式,介绍最新版WebRTC中的音频red及如果添加到老版本支持
2023-07-14 08:57:09
2632
2
原创 WebRTC系列--FEC介绍
RedFEC (Reduced-Complexity Forward Error Correction) 是一种前向纠错协议,定义在RFC2189中,它旨在通过向数据流中添加冗余信息来提高数据传输的可靠性;RedFEC通过在发送端对数据进行冗余编码,并在接收端使用冗余数据进行纠错来抵抗数据包丢失或错误。在规范中即定义了打包的格式,及如何通过RedFEC生成冗余包来对原始数据进行保护;异或的规则:两个值不相等则为 1,相等则为 0;当两个输入位相同时,异或结果为0。
2023-06-20 20:00:00
1237
翻译 WebRTC系列--opus带内FEC和red效果
要使用RED,更改编解码器的顺序,使它在Opus编解码器之前。当你在相对较小的50kbps的Opus流旁边发送几百千比特的视频时,基于拥塞的Opus音频的FEC策略没有太多意义。在重度数据包丢失的情况下,LBRR使用的比特率最高可达10kbps(或数据速率的三分之二)。SILK的LBRR,也就是低比特率冗余,也包含在Opus中(记住Opus是一个混合编解码器,它在比特率谱的低端使用SILK)。然而,Opus中的SILK与Skype早年开源的原始SILK相当不同,用于前向错误纠正模式的LBRR部分也是如此。
2023-05-31 09:46:47
616
原创 WebRTC系列--opus带内FEC
Opus 编码器的 OPUS_SET_COMPLEXITY 参数控制编码器的复杂性,这个参数的范围在 0 到 10 之间,其中 0 是最低复杂性,10 是最高复杂性。调整 OPUS_SET_COMPLEXITY 参数会影响编码器的以下行为:计算复杂性:将 OPUS_SET_COMPLEXITY 参数调高会增加编码过程的计算复杂性。这意味着,更高的复杂性可能会导致更高的 CPU 利用率和更大的延迟。
2023-05-30 20:00:00
1219
2
原创 WebRTC系列-音频优先级(流的优先级控制)
音频对流的实时性要求比较高,对流的连续性要求也有较高要求,本文从带宽分配和发包的优先级两方面,分析WebRTC中的是怎么处理音频的;
2023-05-22 22:00:00
1071
原创 WebRTC系列-适配GPUImage及其他视频处理改造
GPUImage使用OpenGL提供了很多的图像处理算法,包括最常用的美颜处理、水印等功能,这些基本的功能如何添加到WebRTC中,本文以美颜为例子,叙述主要的改造流程;同时也适用于OpenGL等图像处理库;注:以下代码是使用WebRTCm76中的iOS端做分析,其他端处理思路类似。
2023-05-12 20:00:00
983
原创 WebRTC系列-Qos系列之AEC-可配置参数
下图是通过AECDump获取的数据:上图中红框 中input(麦克风采集的数据) 和 reverse(播放的数据)中相似,所以经过算法后被消除;需要注意的是AEC3算法是没有默认起始值,也就是说开始阶段算法处于学习阶段;对于AEC3的原理网上有很多的介绍文章,推荐一篇WEBRTC AEC3算法原理这里大致总结,可以分为以下几个步骤:通过预测算法计算回声信号的延迟和增益,即预测滤波器。预测滤波器使用参考信号(如发话人的声音)与扬声器输出信号的相关性进行计算,并预测出回声信号。
2023-04-19 13:42:29
1536
3
原创 WebRTC系列-Qos系列之NetEQ-NetEqImpl
在文章介绍了抖动消除的基本概念,以及在WebRTC中的实现等;这篇文章降围绕NetEqImpl,展开源码分析,本文不会分析具体算法,主要是看起核心处理逻辑;
2023-03-27 08:00:00
614
原创 WebRTC系列-Qos系列之NetEQ简介
NetEQ是WebRTC音频子系统中的一个重要组件,它的全称是Network-Adaptive Digital Audio Playout Queue(网络自适应数字音频播放队列);在术语表里的解释是:一种动态抖动缓冲区和错误隐藏(丢包补偿)算法,用于去除网络抖动和数据包丢失的负面影响。在保持最高语音质量的同时,保持尽可能低的延迟。在WebRTC应用程序中,音频数据包会被存储在抖动缓冲区中,以平滑处理由于网络延迟和抖动引起的数据包到达时间的变化。
2023-03-22 22:00:00
848
原创 WebRTC系列-Qos系列之接收方NetEQ_DelayManager_DelayPeakDetector(3)
在文章在调用直方图获取到index作为level后,接着会调用去判断有没有峰值,如果有就需要处理;本文是音频延时处理的第三篇,也是对计算音频延时level的最后计算结果;DelayPeakDetector类的主要功能是计算并记录连续延迟值的最大值,并提供方法来重置延迟峰值并查询当前的最大延迟值。该类还提供了一个阈值,用于确定何时应将延迟值归零;
2023-03-21 11:28:25
454
原创 WebRTC系列-Qos系列之接收方NetEQ_DelayManager_Histogram(2)
他们的作用依次介绍如下:buckets_,直方图中桶的概念,也就是直方图中一个一个的条形图;在这个类中每一个桶,表示这一项(x轴)的概率值,使用Q30标识(也就是数组索引对应的个数的延迟的百分比),所有桶元素之和不大于1;例如:buckets_[1]=0.14 也就是14%,表示一个单位延迟的包对应的占比是14%;buckets_[2]=0.82 也就是82%, 表示两个单位延迟的包对应的占比是82%;buckets_[3]=0.04 也就是4%, 表示两个单位延迟的包对应的占比是4%;
2023-03-20 21:00:00
551
原创 WebRTC系列-Qos系列之接收方NetEQ_DelayManager
/ 是不是收到的第一个包 bool first_packet_received_;// 数据包缓冲区的容量 const size_t max_packets_in_buffer_;// histogram 也就是直方图 std :: unique_ptr < Histogram > histogram_;// 直方图分位数 const int histogram_quantile_;// 直方图的模式 const HistogramMode histogram_mode_;
2023-03-17 22:15:00
733
2
原创 WebRTC系列-工具系列之音频混音
在WebRTC中混音一般是主要用在将多个远端的音频流混合成一路用于播放,也就是主要在获取播放数据的时候使用,在WebRTC中最主要的实现是和这两个类,其中AudioMixerImpl用于混音前数据获取和处理,FrameCombiner主要是混音和混音后的数据处理;接下来的源码分析主要基于这两个类及接口函数的调用流程分析其源码实现,本文在牵扯具体算法的地方使用调试等方式进行分析;
2023-03-13 20:00:00
700
原创 WebRTC系列-工具系列之音频相关工具
这篇文章主要介绍WebRTC中一些音频工具这些,大部分都在目录下,这个文件夹下提供音频的大量算法,包括sinc重采样算法,音频数据格式的转换:例如 float转int16_t格式等方法;同时也提供了WavFile类用于实现对wav文件的读写,使用这个类可以便捷的将pcm写入到文件中,同时也能方便读取wav文件;如果篇幅足够这里也会介绍混音的相关实现,这部分在之前的文章其实有介绍,这里将会详细分析其源码实现;
2023-03-02 20:45:00
575
原创 WebRTC系列-工具系列之stun消息处理及相关socket地址的封装类
在前面的一系列文章中介绍了stun协议相关的内容,在介绍获取candidate的文章中都有涉及到对发送stun消息的构造,对服务返回消息的解析等逻辑;本文主要的内容就是介绍WebRTC对stun消息封装,看源码中是如何构建和解析stun的相关消息;这其中也会设计到对于ipv6和ipv4的地址封装类和IPAddress的介绍;
2023-02-27 21:15:00
393
原创 WebRTC系列-工具系列之RTC_DCHECK、RTC_CHECK,字符串操作
分析或阅读过WebRTC源码的都知道,在源码中有很多的类似RTC_CHECK、RTC_CHECK_EQ、RTC_DCHECK_EQ等类似的检测函数,这些检测函数都是在源码的rtc_base目录下的。可以看到这个函数中先使用RTC_DCHECK去检查这时候数据是否合法,如果都是true就继续执行,类似的调用还有RTC_CHECK_LE,也就是检查。这个文件的.h文件中定义有很多的宏,从简介我们也知道主要的参数检查也都是使用宏,这里的源码分析也就从宏展开的过程看源码 ,
2023-02-22 20:30:00
827
原创 WebRTC系列-工具系列之ByteBuffer,BitBuffer及相关类
文章介绍的这两个类都是在rtc_base目录下的,这个目录下的都是一些WebRTC中使用基础类,比如:check.cc使用最多的类似断言检查的工具类,network.cc 也就是管理网络相关的;对于WebRTC提供的这个工具,将其代码分离做了一个mac下的控制台demo,并写了一写测试代码,一节stun消息的模拟解析;地址如下:https://github.com/hosten1/WebRTC_Buffer 欢迎小星星。
2023-02-20 14:51:42
566
原创 WebRTC系列-Qos系列之接收方RTX处理
在上一篇文章中分析了接收到nack后解析的主要流程。在WebRTC里NACKRTXRTX协议是一种针对实时音视频通信的传输协议。RTX协议主要解决了丢包问题,以提高实时音视频通信的质量。RTX协议的详细规定可以在以下的文档中找到,该文档规定了RTX协议的用于视频数据的具体实现方式;需要注意的是,以上文档仅规定了RTX协议在视频数据中的应用,RTX协议在音频数据中的应用并未在此列举。但是,RTX协议的原理与应用是相通的,因此在音频数据中的应用方式与在视频数据中类似。
2023-02-13 21:00:00
788
原创 计算机网络整理-问答
如果包到达中转站,中转站会对包进行解析,通过解析 IP 协议中的源地址(Source IP Address)和目标地址(Destination IP Address)来确定包的最终目的地址。同样,B 发出的包,应该把 C 的 IP 地址放在 IP 协议中的目标地址,即 Destination IP Address。综上所述,IP 层和 MAC 层在三次握手中都起到了保证数据传输正确和有效的作用,而不同的是 IP 层主要负责数据分组和分配地址,而 MAC 层主要负责数据的物理传输。
2023-02-10 08:58:12
456
原创 WebRTC系列-Qos系列之接收NACK
在文章 WebRTC系列-Qos系列之RTP/RTCP源码分析-RTP/RTCP包解析-3的2.3.3章节介绍了NACK包在WebRTC中解析方式及RFC规定协议的定义。这篇文章开始,详细分析其接受RTCP包到解析nack的处理流程;
2023-01-23 08:45:00
1306
1
原创 WebRTC系列-Qos系列之发送NACK
在之前的文章介绍了音频开启对包重传的方式及验证是否开启的成功的方式;在文章的2.3.3章节介绍了NACK包在WebRTC中解析方式及RFC规定协议的定义。在WebRTC中是支持音频和视频的NACK,本文只分析NACK及其重点相关的机制,不分析jitterbuffer或者neteq的相关知识及实现,这些将会有其他的文章重点介绍。
2023-01-18 20:30:00
1363
原创 WebRTC系列-Qos系列之RTP/RTCP源码分析-RTP/RTCP包解析-3
在前面的文章和中分别介绍了RTP及RTCP协议,最后通过抓包的方式直观的了解的包的组成;这一篇文章,根据前面对WebRTC的了解基础上,进行WebRTC源码分析,看WebRTC是怎样实现这些协议及处理流程得;本文的源码分析基于WebRTC m76分支;
2023-01-12 14:57:04
603
原创 WebRTC系列-Qos系列之RTP/RTCP协议分析rtcp-2
本文是接文章继续分析RTCP的SDES、Compound RTCP在WebRTC的使用;
2023-01-10 20:30:00
579
原创 WebRTC系列-Qos系列之RTP/RTCP协议分析rtcp-1
上一篇文章介绍了RTP协议,通常RTP负责传输数据,RTCP一起工作,RTCP负责对RTP的通信和会话进行控制(如流量控制、拥塞控制、会话源管理等);同rtp协议一样,协议由 IETF(http://www.ietf.org/)定义在和3551中;
2023-01-08 11:00:00
671
原创 WebRTC系列-Qos系列之音频设置丢包重传nack
在目前的WebRTC各个版本中音频的重传目前都是默认处于关闭的,也就是音频的sdp里默认是没有NACK;Feedback的subtype是205就是nack的的rtcp包;
2023-01-06 20:00:00
1188
原创 WebRTC系列-Qos系列之RTP/RTCP协议分析
rtp在RFC3550前12个8Byte(96-bit)存在于每个 RTP 数据包中,而CSRC部分只有Mixer发送的报文才会有。这些字段含义如下:版本 (V):2 位version默认都是2,这个字段表示当前使用的 RTP 的版本。(值 1 由 RTP 的第一个草案版本使用,值 0 由最初在“vat”音频工具中实现的协议使用。)填充(P):1位表示当前这个包是不是有RTP填充的数据,如果p=1表示有填充数据,p=0表示没有填充;
2023-01-04 23:45:00
491
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人