- Signaling:协商Peer之间的地址
- STUN:获得本地的一个NAT地址
TURN: 用来在STUN方式不可用的情况下,代理媒体数据
SFU 避免了用户同时推流给多个同会用户
chrome://webrtc-internals/
http://ossrs.net/webrtc-web/
- webrtc在chrome上服务端必须有https的域名,不然只能本地
抗弱网
- LTP<RP 长参考帧 https://zhuanlan.zhihu.com/p/103542912
- 视频 SVC
- 大小流 simulcast
- audio ranking 只传输主要人声
- RFC 2198 - RTP Payload for Redundant Audio Data
QOS
- BBR算法
- GCC算法
- 策略控制: FEC、ARQ、SVC
TCP or UDP
从视频流来讲,很显然UDP是比TCP更合适的。第一,UDP比TCP更灵活,丢数据更好丢,用TCP的话在底层丢数据是非常不容易的;第二,UDP可以用FEC,但是TCP用不了;第三,如果我们是推流,那手机端内核我们是改不了的,内核改不了用传统TCP效果肯定是不好的;第四,是内核代码不好改,相比应用层代码,Linux内核的学习成本确实不低。但是,从我们的数据来看,在高码率情况下UDP的丢包率是要高于TCP,而且码率越高丢包率越高。
Janus
- ECS 要设置1:1 nat
- libsrtp 会报create失败 应该是GCM的问题 所以关闭它 重新编译,记得要先make clean: since they’re needed to support AES-GCM in our SRTP streams. If you don’t want AES-GCM support, pass the
--disable-aes-gcm
option when configuring Janus instead: remember to do amake clean
before recompiling Janus after the change - Proxy+Janus可以解决随机端口的问题,janus本身集成的网络库没法支持PortRange, 所以通过一个代理,然后用ICE-ufrag参数来控制端口的映射关系https://www.livevideostack.cn/news/35316/
NACK
NACK:Negative Acknowledgement,则是一种负向反馈,接收方只有在没有收到数据的时候才通知发送方
音视频同步
音频和视频的rtp报通过 rtcp SR请求完成,SR可以给出ntp和音频或者视频时间戳的差
https://developer.aliyun.com/article/782460?spm=a2c6h.12873581.0.0.461013dchX0vzn&groupCode=videocloudtech