webrtc代码走读
文章平均质量分 75
总结webrtc信令协商,ICE探测等流程代码
CrystalShaw
向下扎根,向上结果,只要一步一个脚印的走,所经历的日子都不会白白度过的。
展开
-
webrtc代码走读二十六(rtcp打包模式及流程)
Compound mode 遵循 RFC 4585ReducedSize mode遵循 RFC 5506两种模式的差别:1、Compound模式RTCP报文里面必须包含RR or SR and CNAME SDES才能发送报文。这样会导致RTCP报文size比较大,另外对于feedback反馈报文的响应速度也比较慢。原创 2023-07-13 15:06:03 · 520 阅读 · 2 评论 -
webrtc代码走读二十一(RtpPacketToSend数据buffer的申请和释放)
至此数据buffer申请完毕,可以看出这里的数据buffer是一个std::unique_ptr data_类型。原创 2023-06-28 16:07:09 · 482 阅读 · 1 评论 -
webrtc代码走读:发送端NACK和FEC的packet压到队列走读
一、NACK发送端packet data和FEC的packet data push到packet队列函数调用栈PacingController::ProcessPackets()->PacketRouter::SendPacket(std::unique_ptr<RtpPacketToSend>,const PacedPacketInfo&)->ModuleRtpRtcpImpl2::TrySendPacket(RtpPacketToSend*, const Pac原创 2022-02-24 16:17:52 · 1477 阅读 · 0 评论 -
webrtc代码走读一(视频参数配置汇总)
一、视频编码格式初始配置webrtc\media\engine\internalencoderfactory.cc1、按照Push顺序,优先选取第一个编解码格式。2、屏蔽kUlpfecCodecName、kRedCodecName的codec,可以关闭FEC冗余。3、开启FlexFEC功能。二、视频分辨率初始配置webrtc\pc\videocapturert......原创 2018-05-24 09:56:09 · 11728 阅读 · 3 评论 -
webrtc代码走读二(信令交互流程_信令服务器侧)
一、整体流程图二、全流程抓包webrtc的server仅处理三种method的http报文:GET、POST、OPTIONS。GET承载的是Client发送给Server的sign in out信令。POST承载的是Client通过Server转发给另外一个Client的信令。OPTIONS暂时没接触到,未知。1、Client->Server:GET/s...原创 2018-06-20 15:09:49 · 5131 阅读 · 0 评论 -
webrtc代码走读三(视频数据处理流程汇总)
一、概述二、视频采集到发包 创建RTP发送视频流 创建编码器 VideoStreamEncoder::EncodeTask::RunVideoStreamEncoder::EncodeVideoFrameVideoStreamEncoder::ReconfigureEncoderVideoSender::RegisterSendCodecVCMCode...原创 2019-06-21 16:54:04 · 5699 阅读 · 0 评论 -
webrtc代码走读四(音频数据处理流程汇总)
一、概述二、音频收包到渲染NetEqImpl::InsertPacketInternal函数与NetEqImpl::GetAudioInternal函数之间通过packet_buffer_共享队列传输音频报文数据。在NetEqImpl::InsertPacketInternal函数中入队音频报文、在NetEqImpl::ExtractPackets函数中出队报文。NetEq...原创 2019-07-01 14:11:00 · 3246 阅读 · 0 评论 -
webrtc代码走读五(视频端到端时延分析)
一、延时对主观质量的影响(T-REC-G.114)图中横轴坐标是毫秒,代表时延。纵轴坐标是用户的体验度。由上图,时延达到150毫秒的时候,用户体验度开始下降,当达到400毫秒的时候,用户的感受是无法容忍。由此,ITU-T G.114国际标准规定,延时超过150毫秒表示已经开始影响用户体验,用户可以容忍的最高延时是400毫秒。二、测试组网模型三、视频处理流水视频端到端时...原创 2019-03-13 13:45:12 · 6208 阅读 · 3 评论 -
webrtc代码走读六(srtp配置)
使能SRTPwebrtc\src\webrtc\api\peerconnectioninterface.hdisable_encryption = true 取消SRTPdisable_encryption = false 开启SRTP生成密钥bool Conductor::CreatePeerConnection(bool dtls)配置是否生成密钥。取消SRTP,发...原创 2019-02-28 10:12:30 · 2688 阅读 · 0 评论 -
webrtc代码走读七(rtp包格式)
一、rtp包头格式V:版本号,必须为2P:填充位X:扩展位,标志是否存在扩展CC:CSRC个数M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于1,视频包因为一帧比较大,会被分为几个包发送,最后一个包标志需要Mark一下。PT:负载类型,不同的负载类型对应不同的编解码类型(音频根据采样率和通道不同都要对应不同的负载类型),FEC类型等...原创 2019-05-27 17:33:06 · 2555 阅读 · 0 评论 -
webrtc代码走读八(h264 rtp打包笔记)
一、Payload Structuresh264rtp打包载荷结构有三种:单一NAL单元模式、组合封包模式、分片封包模式。1、单一NAL单元模式即一个RTP包仅由一个完整的NALU组成。这种情况下RTP NAL头类型字段和原始的H.264的NALU头类型字段是一样的。对于NALU的长度小于MTU大小的包,一般采用单一NAL单元模式。对于一个原始的H.264NALU单元常由[StartC...原创 2018-08-09 17:46:23 · 4828 阅读 · 1 评论 -
webrtc代码走读九(vp8 rtp 报文解析)
一、wireshark解析VP8报文方法首先webrtc里面默认开启了FEC和SRTP功能,导致wireshark无法正常解析VP8的报文。所以若想了解VP8的RTP报文格式,还需要先关闭FEC、SRTP。1、关闭FEC。internalencoderfactory.cc文件屏蔽kRedCodecName、kUlpfecCodecName2、关闭SRTPwebrtc\src...原创 2018-10-29 14:28:02 · 5731 阅读 · 0 评论 -
webrtc代码走读十(Client调用栈)
PASCAL wWinMain->MainWnd::PreTranslateMessage->MainWnd::OnDefaultAction一、login流程Conductor::StartLogin->PeerConnectionClient::Connect->PeerConnectionClient::DoConnect二、发...原创 2019-01-02 13:37:15 · 1364 阅读 · 1 评论 -
webrtc代码走读十一(RTCP丢包率、环路延时计算)
以PeerA端为例,PeerA想要知道:1、PeerA发送给PeerB的RTP报文的丢包率和环路延时2、PeerB发送给PeerA的RTP报文的丢包率。一、丢包率计算原理1、peerA统计PeerB发送给PeerA的丢包率PeerA接收报文的丢包率,可以通过判断收到报文的RTP序列号的连续性计算。在webrtc里面函数实现如下:->RTCPSender::Se...原创 2018-11-06 10:45:02 · 6102 阅读 · 1 评论 -
webrtc代码走读十二(启动camera)
一、init camera1)调用栈wWinMain->MainWnd::WndProc->MainWnd::OnMessage->MainWnd::OnDefaultAction ->Conductor::ConnectToPeer->Conductor::InitializePeerConnection->Conductor::Ad...原创 2018-11-28 17:02:50 · 1305 阅读 · 0 评论 -
webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)
一、编码到发包函数调用图二、编码函数代码走读encoded_image_缓存的是编码后的数据。frag_header是NALS组信息。encoded_image_缓存数据格式为:4个字节起始码+NALHead+date+4个字节起始码+NALHead+date.......RTPFragmentationHeader* frag_header参数fragmentati...原创 2019-05-24 17:41:48 · 2418 阅读 · 0 评论 -
webrtc代码走读十四(ice rfc5245 实现)
一、架构图webrtc的ICE符合rfc5245标准协议。该协议的链接为:https://tools.ietf.org/html/rfc5245每个终端都有一系列传输地址(包括传输协议、IP地址和端口)的候选,可以用来和其他端点进行通信。其中可能包括:1、直接和网络接口联系的传输地址(host address)2、经过NAT转换的传输地址,即反射地址(server reflecti...原创 2018-06-27 16:01:37 · 6340 阅读 · 0 评论 -
webrtc代码走读十五(X264编码FEC弱网效果差问题解析)
一、问题描述1)预置条件1、配置webrtc抗丢包方法为FEC Only。 启动配置的时候,可以选NACK Only 或FEC Only 或HARQ混合模式。 为了测试webrtc的X264 FEC抗丢包性能,在启动配置的时候,选择FEC Only模式。 配置方法请参考:VCMLossProtectionLogic::SetMethod2、使用Net...原创 2019-08-01 17:37:10 · 6928 阅读 · 19 评论 -
webrtc代码走读十七(视频编码PT值计算函数)
1、PT值分配函数:AssignPayloadTypesAndAddAssociatedRtxCodecsVideoCodec::CreateRtxCodec函数配置分配的PT值原创 2019-12-19 17:53:26 · 800 阅读 · 0 评论 -
webrtc代码走读十八(webrtc线程汇总)
一、webrtc线程汇总在windows环境下,导出demo的dump文件,分析webrtc创建的线程若是使用h264编解码,webrtc的demo运行中,还有ffmpeg的解码多线程和264编码多线程。这里仅记录了webrtc创建的线程。线程类型 线程名称 全局变量 功能 所属模块 Thread signaling_thread signaling_thread_ 信令线程,主要负责事件和状态 消息处理 Thread worke原创 2020-06-19 14:15:06 · 2729 阅读 · 1 评论 -
webrtc代码走读十九(接收测远端SSRC配置)
一、函数调用关系RtpVideoStreamReceiver2::RtpVideoStreamReceiver2internal::VideoReceiveStream2::VideoReceiveStream2internal::Call::CreateVideoReceiveStreamWebRtcVideoChannel::WebRtcVideoReceiveStream::RecreateWebRtcVideoStreamWebRtcVideoChannel::WebRtcVideoRe原创 2021-07-27 23:25:01 · 1010 阅读 · 0 评论 -
webrtc代码走读二十:extension扩展头协商及初始化流程
wWinMain->MainWnd::PreTranslateMessage->MainWnd::OnDefaultAction->Conductor::ConnectToPeer->Conductor::InitializePeerConnection->Conductor::AddTracks->PeerConnection::AddTrack->RtpTransmissionManager::AddTrack->RtpTransmissi原创 2021-09-08 17:22:42 · 952 阅读 · 0 评论 -
webrtc代码走读二十一(采集视频旋转功能)
一、简介VideoCaptureImpl::SetApplyRotation/VideoCaptureImpl::SetCaptureRotation可以动态配置采集到的视频数据旋转角度。然后通过RTP扩展头的kRtpExtensionVideoRotation字段发送给接受端。让接收端做自适应调整。二、发送端实现1、get camera data调用栈videocapturemodule::CaptureInputPin::Receive()->videocapturemodule原创 2021-11-29 11:50:12 · 1295 阅读 · 0 评论 -
webrtc代码走读二十二(RtpPacketSender函数钩子注册)
一、视频RtpPacketSender函数钩子注册1)函数调用栈Thread::PreRun->Thread::ProcessMessages->Thread::Dispatch->Thread::QueuedTaskHandler::OnMessage->SdpOfferAnswerHandler::PushdownMediaDescription->BaseChannel::SetRemoteContent->VideoChannel::SetR原创 2021-11-02 15:04:13 · 639 阅读 · 0 评论 -
webrtc代码走读二十一(InterArrival::ComputeDeltas)
一、函数调用栈internal::Call::DeliverRtcp->RtpVideoSender::DeliverRtcp->ModuleRtpRtcpImpl2::IncomingRtcpPacket->RTCPReceiver::IncomingPacket->RTCPReceiver::IncomingPacket->RTCPReceiver::TriggerCallbacksFromRtcpPacket(const webrtc::RTCPRecei原创 2021-10-30 00:24:37 · 495 阅读 · 0 评论 -
webrtc代码走读二十四(RTT延时计算)
WebRTC中有两种方式计算RTT基于媒体流发送端的计算。通过SenderReport(SR)和ReceiverReport(RR)携带的信息计算。基于媒体流接收端的计算。通过RTCPExtendedReportsRTCP(XR)携带ReceiverReferenceTimeReportBlock和DLRRReportBlock的信息。两种方式计算RTT的原理一样。......原创 2022-07-22 20:08:16 · 2225 阅读 · 0 评论