• Signaling:协商Peer之间的地址
  • STUN:获得本地的一个NAT地址
  • TURN: 用来在STUN方式不可用的情况下,代理媒体数据

  • SFU 避免了用户同时推流给多个同会用户

chrome://webrtc-internals/
http://ossrs.net/webrtc-web/

  • webrtc在chrome上服务端必须有https的域名,不然只能本地

抗弱网

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 a make clean before recompiling Janus after the change
  • Proxy+Janus可以解决随机端口的问题,janus本身集成的网络库没法支持PortRange, 所以通过一个代理,然后用ICE-ufrag参数来控制端口的映射关系https://www.livevideostack.cn/news/35316/

NACK

NACK:Negative Acknowledgement,则是一种负向反馈,接收方只有在没有收到数据的时候才通知发送方
image.png

音视频同步

音频和视频的rtp报通过 rtcp SR请求完成,SR可以给出ntp和音频或者视频时间戳的差
https://developer.aliyun.com/article/782460?spm=a2c6h.12873581.0.0.461013dchX0vzn&groupCode=videocloudtech