- wireshark 抓包查看H264分辨率过滤器 (h264.nal_unit_hdr == 7))vp8(vp8.hdr.frametype==0)。
- chrome jpeg lib库设之图片质量 jpeg_set_quality() ,quality值越大图片质量越好,图片本身很也会变大,但不是线性关系。jpeg 压缩原理: 将图像先分成8X8的小块->将图像从RGB转换为YCbCr->进行离散傅里叶变换(DTC)->数据量化便采用下图将二维矩阵转为一维数组,为了更好的进行哈夫曼压缩->进行哈夫曼编码得到压缩后的数据。2.
- webRTC 视频接收端从Call 到PacketBuffer packet传递调用堆栈;
-
WebRTC 之时间戳 音频:以采样点为单位,时间戳的精度为每采一个音频点的时间,每个RTP包一半包20ms的数据,假如采样率为48K,则相邻两个包的时间戳差为20/1000/(1/48000)=960; 视频的时间戳精度一般为:1/90000; rtp包和ntp时间戳的对应关系是由SR RTCP包来实现的:每隔一段时间视频音频都会发送SR包,SR中包含RTP时间戳和NTP时间戳;线性拟合即可求出rtp时间戳和NTP时间戳之间的线性关系。
5.
GCC { 为防止网络拥塞,控制发送端速率; GCC核心思想是预测发送端带宽和接收端带宽预测来控制发送速率,主要根据丢包率、网络延时、抖动来预测; 发送端带宽估计流程:调用SendSideBandwidthEstimation::UpdateEstimate 1. 收到RR包之后调用,受限于RR的发送频率,大概一秒一次; 2. 定时更新,默认25ms,防止RR包丢失或不及时; 丢包率计算:RR报文携带三个字段,两个RR间隔内的丢包率乘255;目前时刻的累计丢包数24位;目前时段收到的最大序列号,前16位,后16位为循环数; RTT计算,发送端SR携带发送时间戳(RTP时间戳)t_sr,RR回馈SR携带的时间戳,接收端处理延时t_dlrr,这样发送端就可以计算出RTT=recivedtime-t_sr-t_dlrr; 估出发送端总的码率怎么分配到每一个流中:(观察者模式) 几个主要的类:BitrateAllocatorInterface BitrateAllocator BitrateAllocatorInterface VideoSendStreamImpl BitrateAllocatorInterface中有OnBitrateUpdated函数 其中VideoSendStreamImpl继承BitrateAllocatorInterface并实现OnBitrateUpdated函数; VideoSendStreamImpl在VideoSendStreamImpl::StartupVideoSendStream()中调用bitrate_allocator_->AddObserver(this, GetAllocationConfig())将自己注册进BitrateAllocator,当发烧端带宽估计变化时调用VideoSendStreamImpl的OnBitrateUpdated函数,最终作用在编码器上改变码率控制发送端速率。 }
6.
RTP/RTCP 协议:
-
TODO
-
TCP/IP协议组归纳
-
SIP协议
-
SDP协议
-
Socket编程
-
webRTC平台开启日志说明
-
map.emplace().first 原来返回的是迭代器 .second返回插入结果。
-
Keyframequest调用堆栈