webrtc
ashleycoder
音视频、流媒体开发
展开
-
WebRTC的RTP扩展头、RTCP包
MSW+LSW=NTP timestamp,各4字节,Most significant word,Least,音频5000ms:media_config.audio.rtcp_report_interval_ms。One-Byte Header:0xbede 2字节、length 2字节—扩展头的个数、Sender ssrc:ssrc of sender:自己那端rtp流ssrc。packet count:4字节,octet count:4字节。sender ssrc:是自己那端rtp流的ssrc。原创 2023-06-03 00:31:49 · 35 阅读 · 0 评论 -
WebRTC的Pacing
作用:匀速发送数据,主要是视频。I帧和P帧的大小不一样,I帧拆分的RTP包多些,匀速发送。原创 2023-05-02 18:51:51 · 234 阅读 · 1 评论 -
WebRTC拥塞控制:发送端基于延时----学习记录
基于延时得出的码率:SendSideBandwidthEstimation::UpdateDelayBasedEstimate(的delay_based_limit_。原创 2023-02-06 21:05:47 · 354 阅读 · 0 评论 -
WebRTC SDP协议--新属性
6 payload 96的重传流是97,96的ssrc是3793049148,97是2533540925。level-asymmetry-allowed=1—允许h264 level等级不同,指main、high那些。比如:有2路视频,有2个m=video。描述不了的情况:ssrc对应的编码格式不同,一个H264、一个H265,放到一个m描述就有问题。非交错:Type是[1-23, 24, 28]、STAPA是24,FU-A是28。2 a=rtcp-mux //端口复用,rtp和rtcp是同一个。原创 2023-02-03 21:01:53 · 854 阅读 · 0 评论 -
RSFEC RFC
比FlexFEC header头多了三个字段:序列号(为什么三字节?一帧视频分成几个RTP包。原创 2022-12-02 19:26:17 · 240 阅读 · 0 评论 -
WebRTC的ProcessThread
方便统一实现定时任务(周期性任务)原创 2022-11-27 20:51:10 · 9 阅读 · 0 评论 -
WebRTC--三大线程
【代码】WebRTC--三大线程。原创 2022-11-24 00:13:07 · 13 阅读 · 0 评论 -
WebRTC代理类作用--切到原本的线程执行
工作线程:VideoReceiveStream、BaseChannel等有判断。网络线程:WebRtcSession等有判断。信令线程用在:发送信令。原创 2022-11-23 19:07:22 · 13 阅读 · 0 评论 -
WebRTC入门系列
一 Windows端编译、使用H264、只使用opus。实际中根本不会用这个,可以不看。原创 2022-10-13 19:45:26 · 526 阅读 · 0 评论 -
抓包分析下微信视频会议--用上Quic
音视频传输用上了quic,音视频都是一个端口发送的。另一个IP向本地发RTCP包,用了webrtc的transport-cc。本地向那个ip回了udp消息,二进制的。只看得出来这些,网上没有分析的文章。...原创 2022-02-10 17:19:34 · 2168 阅读 · 0 评论 -
Janus之自问自答
结构体janus_transport_session、janus_ice_peerconnection、janus_ice_handle、janus_videoroom、janus_videoroom_session、janus_videoroom_publisher等都有janus_mutex。1 client向janus发送json消息,2 janus向远端发送event的事件通知。janus在客户端开始的时候,发4次REMB包,确定带宽。enable video,发送请求PLI包。原创 2022-09-07 15:02:36 · 592 阅读 · 0 评论 -
Janus库简介
比如:{"janus":"message","body":{"audio":true,"video":true,"videocodec":"h264"},"transaction":"f4p3bK72QD3e","jsep":{"type":"offer","sdp":"v=..."}插件接口如下:初始化、销毁、创建会话、处理消息--跟client通信、开始媒体、处理rtp包、rtcp包、结束媒体、销毁会话等。参会人员A,ICE后,获取了端口,接收流,记住ssrc。创建会话,获得session_id,原创 2022-09-05 18:53:28 · 528 阅读 · 0 评论 -
WebRTC的source、sink、track关系
Source代表源,比如摄像头、桌面,sink是消费。一个source可以对应多个sink。比如摄像头需要显示,编码。一个track包括了Source和sink。VideoSourceInterface有AddOrUpdateSink,建立了source和sink的关系,类似filter的连接。VideoSinkInterface有OnFrame,视频就回调到这个函数。红色方框是peerconnection_client用到的类。...原创 2022-05-07 14:24:28 · 618 阅读 · 0 评论 -
WebRTC桌面共享--画面嵌套啊
原创 2022-04-28 17:17:07 · 762 阅读 · 0 评论 -
WebRTC的RTCStats
一 peerconnection_client.exe新增RTCStats功能1 class RtcStatsObserver : public virtual webrtc::RTCStatsCollectorCallback{public: virtual void OnStatsDelivered(const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report); //信息回调到这个函数};2 rt原创 2022-04-24 17:46:46 · 513 阅读 · 0 评论 -
WebRTC的DataChannel功能
一 DataChannel可以发送聊天的文本信息,可以走RTP和DTLS。新版本用RTP不行,sdp协商时,RtpDataChannel的state_变成kClose。sdp新增了application字段,协议走UDP/DTLS/SCTP。m=application 9 UDP/DTLS/SCTP webrtc-datachannelc=IN IP4 0.0.0.0a=ice-ufrag:qZdIa=ice-pwd:l2lrs5FGHFlox6XZ6rIiKSdTa=ice-opti原创 2022-04-22 19:17:03 · 1164 阅读 · 0 评论 -
WebRTC音频知识
一 采集间隔是10ms,windows平台的采样频率默认是16000。播放频率是48000,也判断支不支持,双通道。RTP打包间隔是20ms,所以时间戳以960递增。一秒发50个包,48000/50=960。opus编码器是48000,编码前经过了重采样。二 opus编码器设置:config.dtx_enabled=false,config.complexity=9,config.cbr_enabled=false,voip即语音主要使用SILK编码,音乐是CELT。三原创 2022-04-21 17:44:11 · 618 阅读 · 0 评论 -
WebRTC的Jitter计算
WebRtcVoiceMediaChannel::GetStats--| AudioReceiveStream::GetStats --| ChannelReceive::GetRTCPStatistics() --| StreamStatisticianImpl::GetStats() stats.jitter = jitter_q4_ >> 4;StreamStatisticianImpl::UpdateJitter{if (time_dif.原创 2022-04-19 19:33:02 · 499 阅读 · 0 评论 -
WebRTC Audio NetEQ学习笔记
DelayManager有一个直方图Histogram,统计延迟信息(具体怎么算的没懂),获得延时的值。即TargetDelayMs(),target_level_ms_。double quantile = 0.97;double forget_factor = 0.9993;1DelayManager:计算接收音频包的延时。最大个数max_packets_in_buffer_ = 200。DelayManager::Update{...UpdateDelayHistory(i.原创 2022-04-16 18:07:25 · 416 阅读 · 0 评论 -
简述音频3A算法概念
回声:远端的扬声器声音被麦克风采集到,然后传输给你,你听到自己的声音。先AEC,再NS,最后AGC。一 AEC:acoustic echo cancellation,回声消除。经过三个步骤:1 远端和近端的延时预估,即麦克风和扬声器的延时。(声音的采集线程和播放线程启动时间不同。)2 自适应线性滤波器:把麦克风的线性回声减去--从扬声器中获得的。用NLMS(normalized least mean square)。参数:滤波器长度,步长因子。3 非线性滤波:把残留的底噪回声原创 2022-04-15 18:24:43 · 4738 阅读 · 0 评论 -
WebRTC音频--类和函数调用图
原创 2022-04-05 20:06:07 · 250 阅读 · 0 评论 -
PeerConnection_Client信令交互
接收STUN包,bind success request,带ip:port。这就是Candidate。WebRTC的p2p文件夹就是NAT实现,没用第三方开源库。Client主动发送STUN request包,从。原创 2022-03-26 20:38:29 · 611 阅读 · 0 评论 -
WebRTC的RTT计算及作用
rtcp::Rrtr在rrtr.cc。1 VCMNackFecMethod::ProtectionFactor(...),根据rtt,丢包率,判断是用nack还是fec。RTCP SR、RR包的发送间隔大概是1秒1个,间隔不能改成很大,影响RTT更新。如果在发送端计算,RTT = 接收RR包时间-发送SR包时间-DLSR(接收端发送RR包-接收SR包时间)将64位的NTP时间,整数取低16位,分数取高16位,变成了32位,即4字节。即T-rr - T-sr -(T1-rr - T1-sr)。原创 2022-03-23 16:27:13 · 1093 阅读 · 3 评论 -
WebRTC的JitterBuffer笔记
接收类图不全。原创 2022-03-22 17:29:50 · 592 阅读 · 0 评论 -
简述WebRTC的UlpFEC实现
1 启用UlpFEC因为WebRTC不让UlpFEC不能和nack同时用,只能将nack去掉。AddDefaultFeedbackParams(VideoCodec* codec,中,把下面两行注掉。//codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); //codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtc...原创 2022-03-17 19:10:08 · 433 阅读 · 1 评论 -
简述WebRTC的FlexFEC实现
一帧视频可以分成几个media包,(num_media_packets * protection_factor + (1 > 8,算出fec包个数。7个media包,4个fec包,是kMaskBursty7_4。0x38二进制是0x0011 1000,从左边数,从第一个包开始,第一个fec包是第3、4、5包异或。k=1,表示后面还有mask,即FEC包,k=0表示最后一个。抓包可以看到:H264 media包,Flexfec包,不同ssrc发送的。1个fec包恢复1个丢包。原创 2022-03-09 18:47:09 · 2009 阅读 · 0 评论 -
简述WebRTC中的丢包重传Nack的实现
RTCP FB Nack包如上图所示:pt=205,fmt=1,PID是丢包的起始序列号-2字节,BLP表示起始序列号后面16位丢包情况,1是丢包,0是没丢包。这是WebRTC中的SDP,原视频流PT是96,重传RTX PT是97, ssrc-group是原视频流ssrc和RTX ssrc。sender ssrc是发送RTCP NACK包这端发送视频rtp包的ssrc,media ssrc是随机生成的。接收端发现序列号不连续,发送RTCP FB Nack包,发送端从历史队列中查找该包,再发送RTP包,原创 2022-03-04 21:00:55 · 723 阅读 · 0 评论 -
WebRTC拥塞控制综述--简约版--新版本的
记录下我学习WebRTC拥塞控制,那些我懂了,那些我没懂。原创 2022-02-12 20:46:40 · 1824 阅读 · 1 评论 -
用OpenFEC实现RSFEC
FEC原理可以参考这篇文章:谈谈网络通信中的 FEC 基础 - 知乎主要讲讲怎么实现的。OpenFEC支持4种FEC,我用的是OF_CODEC_REED_SOLOMON_GF_2_8_STABLE。编码:假设5个media包(视频数据,一个H264帧分成5个RTP包),2个fec包。1 调用of_rs_new,生成7行5列的编码矩阵。前5行是单位矩阵。如下:(54*M1) ^(74*M2) ^(e7*M3)^(d8*M4) ^(1e*M5) = R1。R2一样的。用o...原创 2021-10-21 18:21:54 · 1230 阅读 · 0 评论 -
webrtc h264 nack和ulpfec不能同时使用
(video_send_stream.cc:1105): Transmitting payload type without picture ID using NACK+ULPFEC is a waste of bandwidth since ULPFEC packets also have to be retransmitted. Disabling ULPFEC.webrtc源代码中,H264,NACK和FEC不能共存,实际商用中如何处理的?...原创 2021-09-26 15:23:30 · 517 阅读 · 1 评论