
WebRTC
文章平均质量分 52
StoneLiu999
音视频开发
展开
-
webrtc ios build signing
报错,这个错误是因为存在多个签名的问题,通过错误信息知道其中有一个是无效的(被吊销),移除之后重新执行构建命令就好了。原创 2023-10-25 10:32:37 · 797 阅读 · 0 评论 -
WebRTC通话的同时播放本地音乐
方案一(模拟一路接收流)把本地音乐当做一路对端过来的流来处理,这个方案的好处是不需要修改WebRTC的代码,调用WebRtcVoiceMediaChannel对象的AddRecvStream方法来添加一路流即可。通过WebRtcVoiceMediaChannel对象的OnPacketReceived方法传递数据数据需要打包为RTP格式方案二(播放混音)把数据结构webrtc::AudioState的webrtc::AudioMixer对象导出来通过webrtc::AudioMixer对象的原创 2022-01-11 14:12:53 · 3545 阅读 · 8 评论 -
WebRTC Win10平台编译下载错误
使用fetch下载Windows平台WebRTC代码的时候遇到了如下错误The system cannot find the file C:\Users\stoneliu\Desktop\depot_tools\python3_bin_reldir.txt.[E2021-12-30T11:28:59.735399+08:00 11572 0 annotate.go:273] goroutine 1:#0 go.chromium.org/luci/vpython/venv/config.go:309 -原创 2021-12-30 14:17:34 · 3355 阅读 · 0 评论 -
WebRTC rtc_base简介
rtc_base属于WebRTC的基础模块,属于最基础的模块,它里面大部分的封装主要解决平台差异(不同的平台间相同的功能系统函数会存在差异以及平台间提供的功能会有差异或者缺失),它封装了各种使用功能以及对第三库进一步封装让其更加好用,它封装了各种通用数据结构与算法。字符处理相关的封装:封装了兼容Win32的wchar_t和char类型的各种字符串处理函数,封装了各种类型的编码转换文件(夹)相关的封装:路径管理Pathname、文件操作File、文件件迭代器DirectoryIterator、文件系统操原创 2021-12-22 17:22:51 · 1398 阅读 · 0 评论 -
WebRTC hostname解析
ResolveHostname是对getaddrinfo的封装,hints.ai_flags = AI_ADDRCONFIG表示当系统支持IPv4时返回IPv4地址,支持IPv6时返回IPv6地址,如果同时支持则同时返回IPv4和IPv6地址。如果family等于AF_UNSPEC时返回支持的所有地址,如果指定了特定的类型则只返回特定类型的地址再调用IPFromAddrInfo把struct addrinfo转换为IPAddress(WebRTC封装的一个IP地址类,比较使用)类型bool IPFr.原创 2021-12-06 16:06:31 · 2595 阅读 · 0 评论 -
WebRTC获取本机默认网卡的IP地址
当我们创建一个socket并且不绑定一个特定网络设备的时候(bind),我们通过getsockname接口总是会返回一个INADDR_ANY地址当我们不指定一个网络设备的时,我们要send时系统会给我们指定一个默认的设备如何获取系统的默认设备的地址呢?通过connect一个DNS地址再通过getsockname获取就可以了,以下是WebRTC的实现,P2P就是这样拿到本机地址的。// These addresses are used as the targets to find out the d.原创 2021-11-19 18:33:11 · 3651 阅读 · 0 评论 -
WebRTC多平台编译
WebRTC本身是支持多平台,不过它在下载的时候是区分平台的,本身也不支持一个项目多平台编译(Linux、Windows和MacOS),稍微改动一下编译脚本就可以支持了,我们还需要把用到的所有第三方库都一起下载下来放到一个项目中。build 修改修改build/config/clang/clang.gni文件,根据不同的平台选择不同的llvm,我们需要分别下载不同的平台的llvm,然后放到指定的位置。也可以自行升级对应的clang。也可以使用我的配置,我放在github上了WebRTC-llvm-bu原创 2021-07-20 11:23:44 · 1491 阅读 · 9 评论 -
WebRTC视频接收JitterBuffer
文章目录视频接收JitterBuffer网络接收组帧(以H.264为例)解码流程(以H.264为例)请求丢失的包 - NackModule收到一个包 - OnReceivedPacket找到满足条件缺失的包列表 - GetNackBatch隔一段时间检查一次是否发送丢包请求 - Process组帧 - PacketBuffer新包插入 - InsertPacket更新丢失的包 - UpdateMissingPackets判断包的连续性 - PotentialNewFrame找到完整的帧 - FindFram原创 2021-07-06 17:35:19 · 1259 阅读 · 0 评论 -
MediaSoup媒体处理分析
文章目录MediaSoupRTP处理MediaSoup2019年3月写的文章了,后续也没有再跟进这个项目有没有新变化。MediaSoup是一个开源的SFU库,分为客户端和服务端。服务端分为JS层和C++层,C++层用于处理媒体和SDP等数据。我个人主要关注媒体相关的处理,也就是RTP和RTCP相关的处理。我们的项目不会用到这个项目,看它的代码主要是解决我的两个疑问:多人会议,它是如何能保证每一个接收端都能流畅?它是如何处理各个发送端以及接收端的RTCP包?第一个问题,它不做任何处理,接收原创 2021-06-15 10:23:59 · 956 阅读 · 0 评论 -
webrtc服务器搭建
两年前写的笔记,可能有些链接和方式已经不对了,自己评估!文章目录名词解释概要房间服务、信令服务、ICE(STUN、TURN)服务、Web服务的安装与配置房间服务 安装与配置安装信令服务turn服务参考扩展阅读other名词解释realm: 用于描述服务器或服务器中的上下文的字符串。realm告诉客户端使用哪个用户名和密码组合来认证请求用于描述服务器或服务器内的上下文的字符串。alloca...原创 2018-12-21 10:21:33 · 15257 阅读 · 2 评论 -
WebRTC之P2P
文章目录SDP/STUN/TURN/ICESDPSTUN服务端实现客户端实现NAT类型判断TURNTurnServer(TURN服务端)TurnPort(TURN客户端)ICENAT类型完全圆锥形NAT(Full cone NAT)受限圆锥形NAT(Address-Restricted cone NAT)端口受限圆锥形NAT(Port-Restricted cone NAT)对称NAT(Symmetric NAT)SDP/STUN/TURN/ICE对这几种名称进行简单介绍如下:SDP是一种用于描述媒原创 2020-11-19 11:35:39 · 3798 阅读 · 1 评论 -
升级MacOS导致WebRTC无法编译
MacOS升级以后需要重新生成gn文件,遇到如下问题。经过排除是因为find_sdk.py这个文件只会找10的系统。通过命令xcrun --show-sdk-path可以知道当前SDK的版本(查看SDKSettings文件)修改.gn文件的mac_sdk_min选项为当前系统版本:11.0打开find_sdk.py阅读代码发现了只支持10.xx的系统,修改11即可scripts/gen_mac.shERROR at //build/config/mac/mac_sdk.gni:55:5: Sc原创 2020-11-16 16:17:10 · 3886 阅读 · 17 评论 -
为WebRTC添加amr支持
业务需要支持amr编解码,由于我本身是基于WebRTC和FFmpeg开发的,所以就给WebRTC添加一下对amr的支持,直接看BUILD.gn文件吧。opencore-amr的版本是0.1.5,项目地址opencore-amr。具体怎么使用看各自业务需求,可以直接在FFmpeg中使用,稍微修改一下WebRTC中的FFmpeg即可对amr的支持了BUILD.gn通用的配置amr_con...原创 2018-06-14 10:44:58 · 4342 阅读 · 0 评论 -
WebRTC之RateStatistics
RateStatistics就是一个用于计算最近一段时间内(max_window_size_ms)的带宽,scale是对带宽进行缩放,目的是为了得到bits/s为单位的带宽。例如max_window_size_ms是1000,那么scale就是8000|bucket1|bucket2|bucket3|bucket4...Update更新数据,数据第一次进来(大小和时间戳),那么记录此时的时...原创 2019-02-25 12:06:58 · 737 阅读 · 0 评论 -
WebRTC之RTP包
RTP固定头部RTP的固定头部,详情可以阅读rfc文档5.1 RTP Fixed Header Fields 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-...原创 2019-02-25 12:08:06 · 2386 阅读 · 0 评论 -
WebRTC之RTT计算
关于Report Block详情可以阅读6.4.1 SR: Sender Report RTCP Packet 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ...原创 2019-02-25 12:08:13 · 1341 阅读 · 0 评论 -
WebRTC之Module
WebRTC中存在一些需要定时且重复的任务,所以就抽象出了Module这个任务类和ProcessThread这个定时执行任务的线程封装类。用到定时任务的模块有(不完全列举)NackModule 视频nack处理模块Pacer 平滑发送模块RtpRtcp rtprtcp模块BitrateController 码率控制模块VideoSender 视频发送模块VideoReceiver 视...原创 2019-02-25 12:08:27 · 1112 阅读 · 1 评论 -
WebRTC之RTCP
文章目录RTCPSR(Sender Report RTCP Packet)RR(Receiver Report RTCP Packet)SDES(Source Description RTCP Packet)BYE(Goodbye RTCP Packet)APP(Application-Defined RTCP Packet)RTPFB(Transport layer FB messages)[N...原创 2019-03-01 10:59:33 · 3296 阅读 · 3 评论 -
为WebRTC引入libuv-编译
我目前仅仅在Mac上测试过而已(编译了它所有的测试Demo),需要编译的文件是参考它里面其他的编译脚本写的,所以就是以gn格式抄一遍而已。编译静态库libuv,并public了它的头文件目录写了一个可执行程序的模板,可以编译所有的测试Demo目前仅仅在Mac平台测试了一下可行而已,其他平台参考改一下就好了#----------------------------------------...原创 2019-03-12 19:21:13 · 395 阅读 · 0 评论 -
RemoteBitrateEstimatorAbsSendTime起始阶段探测带宽失败
使用RemoteBitrateEstimatorAbsSendTime的时候发现刚刚开始会出现大量的Probe failed, sent at这样的打印,然后打印等级是Info(这个等级的打印说明问题不大),但是还是看了一下代码了解一下是什么原因导致的。这个是因为收到的包过于密集导致的,出现大量的接收或者发送的包间隔不到1毫秒(ComputeClusters函数)。当且仅当发送间隔和接收间隔都...原创 2019-03-26 18:44:23 · 704 阅读 · 0 评论 -
WebRTC之H.264打包RtpPacketizerH264
文章目录RFC6184协议协议中的缩写打包模式和负载结构介绍NALU HDR(NAL单元头部)STAPMTAPFURtpPacketizerH264代码分析WebRTC中的打包模式和包结构代码分析要读懂这部分代码需要知道RTP打包协议相关的知识,具体可以阅读相关RFC文档-RFC6184 RTP Payload Format for H.264 VideoRFC6184协议由于受到MTU限制...原创 2019-03-28 16:56:54 · 2515 阅读 · 0 评论 -
WebRTC之视频NackModule
NackModule一个包的最大请求次数是10次,最大请求时间是10*rtt,在这个时间内还没有获取到丢失的包则不再请求对外提供的接口如下,源码int OnReceivedPacket(const VCMPacket& packet);void ClearUpTo(uint16_t seq_num);void UpdateRtt(int64_t rtt_ms);void Cle...原创 2019-02-25 12:08:20 · 912 阅读 · 0 评论