- 博客(386)
- 资源 (29)
- 收藏
- 关注
原创 webrtc 测试video_loopback
先解决没有声音的问题,查看代码是使用了新的音频采集模块,不知道为什么没有声音,等有时间先去看看为什么要替换原来的coreaudio,莫非真的要刷kpi么。通过修改参数配置 我们可以跟踪调试,接下来跟踪webrtc::test::RunTest(webrtc::Loopback);调用webrtc::adm_helpers::Init(audio_device.get());跟踪试试,运行就崩溃,和之前版本一样的问题,解决方法参考之前的文章。到此,demo的音视频都能够测试通过了,接下来开始代码流程。
2023-05-15 15:47:15
650
1
转载 Linux中buff-cache占用过高解决方案
Linux中buff-cache占用过高解决方案我们在使用free -h查看系统内存的时候,有时间会发现buff/cache很高free -havailable 表示应用程序可以申请到的内存什么是buffbuff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。什么是cachecache(Page Cache)是一种高速缓存,用于CPU和内存之间的缓冲 ,
2022-04-27 10:39:04
3665
原创 AddressSanitizer 查找内存问题
服务器开发,有些时候遇到很奇怪的问题,可能运行几个周会出现一次异常,有些内存问题可以借助AddressSanitizer 定位centos g++版本切换https://blog.csdn.net/liuhongxiangm/article/details/124129742这个方法只是临时生效我是在.bashrc里加了source /opt/rh/devtoolset-10/enableAddressSanitizerAddressSanitizer 是一个性能非常好的C/C++ 内存错误
2022-04-26 14:19:04
302
原创 centos 切换g++
添加源sudo add-apt-repository ppa:ubuntu-toolchain-r/test 安装工具集 gdb等sudo yum install devtoolset-7.x86_64sudo yum install devtoolset-8.x86_64sudo yum install devtoolset-9.x86_64sudo yum install devtoolset-10.x86_64sudo yum install devtoolset-11.x86_64
2022-04-12 17:35:57
435
原创 opensips配置
opensips 代理 freeswitch####### Global Parameters #########log_level=3log_stderror=nolog_facility=LOG_LOCAL0children=4/* uncomment the following lines to enable debugging */#debug_mode=yes/* uncomment the next line to enable the auto temporary
2022-03-25 13:34:19
585
原创 centos7 虚拟机中,网卡不启动的解决方式
使用NAT模式的虚拟centos, 只显示两个网卡,无法连接外网,输入systemctl start network后报错信息"Restarting network (via systemctl): Job for network.service failed because the control process exited with error code.See “systemctl status network.service” and “journalctl -xe” for detail
2022-03-23 11:25:44
2069
2
原创 webrtc源码分析 视频采集发送流程
1、简述video_loopback demo演示了怎么从call这一层创建流,接下来看一下视频的采集,编码,发送流程,本文只是粗略的跟踪流程,具体细节知识点后续分析。webrtc的更新太快,模块有些调整,也加了些处理流程,所以得重复的去看流程,也是因为脑子不好使,看完接着忘。2、跟踪代码...
2022-03-01 14:38:23
913
原创 webrtc源码分析 vieo_loopback分析
1 介绍video_loopback demo包含了webrtc 上层网络协议的剩余部分,没有sdp协商,p2p,srtp,实现了从call实现音视频互通的例子。对于动手能力比较强的公司,适合从这层开发,搭建自己的架构模型,实现自由调度,大并发等2 分析源码2.1 demo入口启动入口:src/video/video_loopback_main.cc配置参数:src/video/video_loopback.cc这个文件主要是配置demo的参数,也是我们参考配置的方法简单看几个配置项:AB
2022-02-23 17:03:39
1722
转载 WebRTC源码分析——引用计数系统
引言WebRTC中自己实现了一套引用计数系统,在其基础库模块rtc_base/refcount中提供了相关实现,如下图所示:主要由四个类RefCountInterface、RefCounter、RefCountedObject、scoped_refptr一起构建起WebRTC中的引用计数系统。2. RefCountInterface——引用计数抽象接口RefCountInterface是一个抽象接口类,位于rtc_base/ref_count.h目录下。源码如下:enum class RefCo
2022-02-18 11:33:28
199
原创 webrtc 状态获取
webrtc状态获取简单调用回调类 class NRPlayerStatsObserver : virtual public webrtc::RTCStatsCollectorCallback { public: NRPlayerStatsObserver(); virtual ~NRPlayerStatsObserver(); virtual void OnStatsDelivered(const rtc::scoped_refptr<const RTCStatsReport&
2022-02-18 11:08:28
748
转载 webrtc源码分析 拥塞控制下-码率分配
1、前言本文是webrtc拥塞控制的下文,主要介绍的是从cc-controller获取码率之后,如何将码率设置到PacingController控制发送速率,同时如何将码率分配调整到各个stream,各个stream的layer, simulcast,fec中2、正文2.1 整体码率控制结构webrtc中是会同时存在多个stream,但所有的stream都会共用一个码率预估和平滑发送,这很符合逻辑(虽然gcc保障带宽公平性),发送数据的流程如上图数字所标,不同的stream最终发包的时候都是发送到
2022-02-15 15:55:33
950
转载 webrtc源码分析 拥塞控制上-码率预估
1 前言本文是webrtc中拥塞控制的上文,主要是分析webrtc中的拥塞控制的码率探测,预估和调整的部分,介绍了整体框架和原理以及相关的类;webrtc版本:M912 正文2.1 整体框架webrtc中的部分码控结构如下图所示,从socket层接收到数据后,到transport解析rtcp包处理得到feedback,通过call将feedback转发到对应sendstream上的rtcp处理模块,最终通过RtpTransportControllerSend将feedback转发到GoogCcNe
2022-02-15 11:36:30
1294
1
转载 WebRTC的拥塞控制和带宽策略
介绍在视频通信的技术领域WebRTC已成为主流的技术标准,WebRTC包涵了诸多优秀的技术,譬如:音频数字信号处理技术(AEC, NS, AGC)、编解码技术、实时传输技术、P2P技术等,这些技术目的都是为了实现更好实时音视频方案。但是在高分辨率视频通信过程中,通信时延、图像质量下降和丢包卡顿是经常发生的事,甚至在WiFi环境下,一次视频重发的网络风暴可以引起WiFi网络间歇性中断,通信延迟和图像质量之间存在的排斥关系是实时视频过程中的主要矛盾。分析WebRTC是如何解决这个矛盾之前,先来看看我们在在线
2022-01-19 14:59:52
737
转载 webrtc源码分析 pacer一
背景介绍若仅仅发送音频数据,不需要PACER模块:1)一帧音频数据本身不大,不会超过以太网的最大报文长度。一个RTP报文可以搞定,按照打包时长的节奏发送就可以。但视频数据不能按照音频数据的思路发送,一帧视频可能很大,远大于以太网的1500byte,需要分别封装在几个RTP报文中,若这些视频帧RTP报文一起发送到网络上,必然会导致网络瞬间拥塞。产生丢包抖动等异常。2)大多数编解码格式下,一帧音频数据长度固定,音频码率持续平稳。码率不会出现忽高忽低现象。但是一帧视频数据长度受内容影响严重。I、P、B帧间的
2022-01-18 10:26:42
390
原创 威海皇冠学校及房地产关联分析
#威海皇冠房地产分析小学排名皇冠小学经区实验小学(杨家滩小学)青岛路小学新都小学长峰小学最好的当然是皇冠小学,各种好不用多说,其次是经区实验小学皇冠小学学区划分目前来说,皇冠小学的学区范围涵盖了皇冠中区和皇冠北区(海峰路以北,海滨路以东整个区域),但是随着悦海小学的建设与投入使用(预计在2019年底),皇冠北区将划归到悦海小学学区。注:海瞳路社区、海上明珠、建东悦海湾、山水文园、清华园、悦海华府、悦海花园、祥泰紫宸、悦海名居、悦海世家等小区不在属于皇冠中小学学区。所以,今天我们
2021-12-14 18:03:03
1347
转载 浅谈WebRTC NetEQ
浅谈WebRTC NetEQWebRTC Native 代码里面有很多值得学习的宝藏,其中一个就是 WebRTC 的 NetEQ 模块。根据 WebRTC 术语表 对 NetEQ 的解释:A dynamic jitter buffer and error concealment algorithm used for concealing the negative effects of network jitter and packet loss. Keeps latency as low as pos
2021-12-06 14:00:03
434
转载 webrtc音视频同步详解
https://blog.csdn.net/sonysuqin/article/details/1072971571、webrtc 版本 202108202、时间戳音视频采样后会给每个音频采样、视频帧打一个时间戳,打包成RTP后放在RTP头中,称为RTP时间戳,RTP时间戳的单位依赖于音视频流各自的采样率。RTP Header格式如下:2.1 视频时间戳视频时间戳的单位为1/90000秒,但是90000并不是视频的采样率,而只是一个单位,帧率才是视频的采样率。不同打包方式下的时间戳:
2021-12-02 17:29:28
817
原创 webrtc源码分析 渲染延时
1.为了平滑渲染,造成延时FrameBuffer::StartWaitForNextFrameOnQueue() |FrameBuffer::FindNextFrame在FindNextFrame里面有计算渲染时间 if (frame->RenderTime() == -1) { frame->SetRenderTime(timing_->RenderTimeMs(frame->Timestamp(), now_ms)); }
2021-11-29 17:09:04
1803
原创 webrtc 视频解码及渲染过程
1 解码解码调用RepeatingTaskHandle::DelayedStartFrameBuffer::StartWaitForNextFrameOnQueue() |VideoReceiveStream2::StartNextDecode |VideoReceiveStream2::HandleEncodedFrame |VideoReceiveStream2::DecodeAndMaybeDispatchEncodedFra
2021-11-26 17:12:01
2865
转载 webrtc视频接收过程二
webrtc JitterBuffer1、webrtc版本2021.8.202、概要旧版的视频JitterBuffer实现在VCMJitterBuffer类中,目前已经不用,新版的JitterBuffer的功能被分散到多个模块中,主要包括:PacketBuffer:负责帧的完整性,保证组成帧的每个包序列号连续,并且有一个包标识帧的开始,有一个包标识帧的结束;RtpFrameReferenceFinder:负责给每个帧设置好参考帧,同时兼顾GOP内各帧的连续性;FrameBuffer:负责帧
2021-11-26 14:43:45
1228
原创 webrtc 视频接收过程一
视频接收调用1、网络接收线程PhysicalSocketServer::Wait |AsyncUDPSocket::OnReadEvent //windows 通过信号槽的方式发送 |AllocationSequence::OnReadPacket //win 接收槽 |UDPPort::HandleIncomingPacket |UDPPort::OnRead
2021-11-23 13:52:32
1645
原创 webrtc替换ffmpeg
webrtc替换ffmpeg,解决微软编译器开启h264编译不过问题win10+vs2019webrtc 默认是clang编译器,编译出来的库,在vs下不能用,出现各种各样的错误。如果设置了use_lld=false is_clang=false,开启h264,ffmpeg又编译不过。尝试替换掉ffmpeg,解决问题下载编译好的ffmpeg下载好ffmpeg,并且放在third_party下编辑\src\modules\video_coding下的BUILD.gn修改rtc_library
2021-07-29 15:50:49
978
5
原创 webrt分析六(nack)
nack是什么丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。nack流程发送端发送rtp,到达接收端时,发现丢包,接收端发送nack请求,发送端会从历史队列中取出数据重发。nack协议在rfc4585协议中定义可重传未到达数据的类型有二种:1 RTPFB:rtp报文丢失重传(丢包重传)。2 PSFB:指定净荷重传,
2021-07-07 15:08:32
685
原创 webrtc分析五(rtt计算)
rtt是什么rtt:往返时延(round-trip time,RTT) 是网络请求从起点到目的地然后再回到起点所花费的时长(不包括接收端的处理时间)。RTT是分析网络性能的一个重要指标,我们通常使用RTT来诊断网络连接的速度,可靠性以及拥塞程度。rtt计算webrtc的rtt计算分两种情况存在发送流,发送端估计。通过Sender Report(SR) 和Receiver Report(RR)计算只存在接收流,接收端估计。通过RTCP Extended ReportRTCP(XR)计算发送端RTT
2021-07-06 11:42:49
2028
原创 webrtc分析四(关键帧请求,FIR /PLI区别)
webrtc 关键帧请求分PLI,SLI,FIR。但是有何区别?PLI 是Picture Loss Indication图片丢失提示消息表明突发性的丢包影响到了一个或多个帧中的多个包。发送方可以通过重传这些包或者生成一个新的I帧以作出回应。但一般来说,PLI同时表现得像一个NACK和一个FIR,因此,通过使用PLI,接收端为发送端如何对该请求作出响应提供了更大的灵活度SLI 是Slice Loss Indication。切片丢失提示消息表明该包丢失影响到单个帧的部分(即,多个macroblock)。
2021-07-05 17:45:04
2999
原创 webrtc分析三(关键帧请求)
webrtc 采用rtp/rtcp传送音视频,网络存在丢包。采用fec和nack对抗丢包。但是并不是所有情况都能通过丢包重传解决。有些情况是在规定的时间内没有补上,再等就延时过大,失去补报的意义了。所以会采用请求关键帧的方式快速刷新。请求关键帧的场景1、新加入请求播放,无法初始化解码器2、丢包过多,jitterbuffer过大3、nack list过大4、获取帧数据超时5、解码出错需要初始化解码器,sps,ppsH264SpsPpsTracker::FixedBitstream H264Sp
2021-07-05 16:47:23
1344
原创 H.264中I帧和IDR帧的区别
IDR(Instantaneous Decoding Refresh)–即时解码刷新。转自:https://www.cnblogs.com/yinxiangpei/articles/3889865.html I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由I
2021-07-05 13:38:43
128
原创 webrtc分析二(video loopback)
webrtc 自带了好多测试用例看整体流程的有:peerconnection_client 和 peerconnection_server如果只看音视频互通流程的还是:video_llopback但是不巧的是,这个demo跑不起来,一跑就崩溃,分析一下原因,改造一下。原因:原因是 底层的消息循环接收到了不应该出现的消息,崩溃了为什么呢?原因是 demo把render的创建放到了task_queue里面了,而render是win32创建的窗口,这个窗口的消息循环就跟着在线程里面了,窗口
2021-07-01 10:14:08
360
3
原创 webrtc 分析一(windows编译)
webrtc 更新速度太快了,再一次分析一下源码吧。基于4484版本环境:windows10vs2019环境配置如官网变量设置set DEPOT_TOOLS_UPDATE=0set DEPOT_TOOLS_WIN_TOOLCHAIN=0set GYP_MSVS_VERSION=2019set GYP_MSVS_OVERRIDE_PATH =C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterpriseset GYP_GEN
2021-07-01 09:48:23
193
原创 sudo apt-get update 出现InRelease问题
sudo apt-get update 出现InRelease问题ubuntu@ubuntu:~$ sudo apt-get update[sudo] ubuntu 的密码:命中:1 http://repo.zabbix.com/zabbix/3.2/ubuntu xenial InRelease命中:2 http://security.ubuntu.com/ubuntu xenial-security InRelease命中:3 http://cn.archive.ubuntu.com/ubun
2021-06-02 16:14:13
976
原创 webrtc的音视频同步处理二
webrtc音视频同步处理二主要代码在src/webrtc/video下video_receive_stream.ccrtp_streams_synchronizer.ccstream_synchronization.ccsyncable_video_ 同步的视频syncable_audio_ 同步的音频audio_measurement_ 存放音频timestamp和ntp对应关系video_measurement_ 存放视频timestamp和ntp对应关系sync_ 处理计算相对
2021-03-30 10:55:47
174
原创 webrtc的音视频同步处理一
webrtc的音视频同步处理一webrtc内部的音视频同步是怎么处理的?几个主要词:capture time,render time,rtp的 timestamp,sr,计算ntp先看视频的采集过程1、调用堆栈2、采集video_capture_impl.cc的 VideoCaptureImpl::IncomingFrame中调用set_timestamp_ms() 设置时间rtc::TimeMillis() 这个时间获取CLOCK_MONOTONIC:从系统启动这一刻起开始计
2021-03-29 16:14:26
483
原创 QtCreator无法调试终端程序,启动报错SIGSTOP
现象qt调试终端程序,当有创建线程的时候,收到信号SIGSTOP 而退出,无法调试程序。解决解决方式是,设置GDB不处理SIGSTOP ,在QtCreator中进入GDB命令设置窗口:Tools -> Options -> Debugger -> GDB -> Additional Startup Command在 Additional Startup Command 中添加如下内容:handle SIGSTOP nostop pass...
2021-03-16 17:19:02
1684
3
原创 海思hisi 使用std::thread崩溃问题解决
平台:海思3516dsdk:hisi-v600在使用c++11 线程std::thread时,创建线程会崩溃cflag增加 -mcpu=cortex-a9
2021-01-20 17:50:04
563
原创 linux下so包含函数名冲突解决
一个项目可能包含多个so,但是不同的so中可能包含相同的函数名。在编译和连接的时候不会报错,但是在执行的时候可能会出现莫名其妙的错误,多是段错误。解决办法1、修改函数名(费时费力)2、隐藏so中的函数最稳妥的办法:cflag 加上 -fvisibility=hidden要导出的函数加上 attribute ((visibility(“default”)))举例:int RtpRtcpInit() attribute((visibility(“default”)));class
2021-01-20 16:01:19
1130
原创 vmware 桥接模式无法联网
vmware15 ubuntu18.04 无法联网试过手动配置和自动获取都没法联网,这种问题也挺烦人,怀疑是电脑多个网卡导致解决办法:1、网络适配器共享设置网络连接属性,共享设置2、vmware编辑 虚拟网络编辑器vmware->编辑->虚拟网络编辑桥接到,选择自己的物理网卡。感觉应该是这里的问题,多个网卡系统默认出错了...
2020-12-14 10:53:56
323
inotify 文件监视
2013-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人