tutorabc 李炼-WebRTC媒体服务—TMS的演进
2020-02-27 573浏览
- 1.WebRTC媒体服务—TMS的演进 李炼 架构师 tutorabc(原vipabc) 2017年10月21日
- 2.主要内容 I. Why WebRTC? II. How WebRTC works. III. Open source WebRTC servers. IV. TMS(Tutormeet Media Server).
- 3.Tutormeet+ • 低延时 • 流畅清晰 • Web端“无缝”支持
- 4.How WebRTC works?
- 5.WebRTC • Signaling negotiate • Media transport
- 6.SDP negotiate
- 7.v=0 o=- 20518 0 IN IP4 0.0.0.0 s=t=0 0 a=ice-options:tricklea=group:BUNDLEaudio video [RFC4566] - Session Origin Information [I-D.ietf-mmusic-trickle-ice] [I-D.ietf-mmusic-sdp-bundle-negotiation] m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 a=mid:audioa=sendrecv a=rtpmap:109opus/48000/2 a=rtpmap:0PCMU/8000 a=rtpmap:8PCMA/8000 a=maxptime:120a=ice-ufrag:074c6550a=ice-pwd:a28a397a4c3f31747d1ee34a=fingerprint:sha-25619:E2:1C:3B:4B:9F:81:E6:B8:5C:F4… a=rtcp-mux a=rtcp-fb:109nack a=ssrc:12345a=candidate:01 UDP 2122194687 192.168.1.4 61665 typ host a=candidate:11 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 (略) [RFC4566] [RFC3264]can send and recv audio [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels [RFC5245] - ICE user fragment [RFC5245] - ICE password [RFC5245] - DTLS Fingerprint [RFC5761] - can perform RTP/RTCP Mux [RFC5104] - support NACK [RFC5245] - ICE Host Candidate [RFC5245] - ICE Server Reflexive Candidate
- 8.User behind NAT
- 9.STUN
- 10.TURN
- 11.v=0 o=- 20518 0 IN IP4 0.0.0.0 s=t=0 0 a=ice-options:tricklea=group:BUNDLEaudio video [RFC4566] - Session Origin Information [I-D.ietf-mmusic-trickle-ice] [I-D.ietf-mmusic-sdp-bundle-negotiation] m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 a=mid:audioa=sendrecv a=rtpmap:109opus/48000/2 a=rtpmap:0PCMU/8000 a=rtpmap:8PCMA/8000 a=maxptime:120a=ice-ufrag:074c6550a=ice-pwd:a28a397a4c3f31747d1ee34a=fingerprint:sha-25619:E2:1C:3B:4B:9F:81:E6:B8:5C:F4… a=rtcp-mux a=rtcp-fb:109nack a=ssrc:12345a=candidate:01 UDP 2122194687 192.168.1.4 61665 typ host a=candidate:11 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 (略) [RFC4566] [RFC3264]can send and recv audio [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels [RFC5245] - ICE user fragment [RFC5245] - ICE password [RFC5245] - DTLS Fingerprint [RFC5761] - can perform RTP/RTCP Mux [RFC5104] - support NACK [RFC5245] - ICE Host Candidate [RFC5245] - ICE Server Reflexive Candidate
- 12.Default ICE TURN STUN req NAT addr req relay addr STUN TURN SDP offer req NAT addr req relay addr SDP answer Connectivity checks Too slow!
- 13.Trickle ICE TURN STUN STUN TURN req NAT addr req relay addr SDP offer SDP answer Connectivity checks req NAT addr req relay addr Trickle ICE collects candidates and executes negotiation in parallel.
- 14.v=0 o=- 20518 0 IN IP4 0.0.0.0 s=t=0 0 a=ice-options:tricklea=group:BUNDLEaudio video [RFC4566] - Session Origin Information [I-D.ietf-mmusic-trickle-ice] [I-D.ietf-mmusic-sdp-bundle-negotiation] m=audio 54609 UDP/TLS/RTP/SAVPF 109 0 8 a=mid:audioa=sendrecv a=rtpmap:109opus/48000/2 a=rtpmap:0PCMU/8000 a=rtpmap:8PCMA/8000 a=maxptime:120a=ice-ufrag:074c6550a=ice-pwd:a28a397a4c3f31747d1ee34a=fingerprint:sha-25619:E2:1C:3B:4B:9F:81:E6:B8:5C:F4… a=rtcp-mux a=rtcp-fb:109nack a=ssrc:12345a=candidate:01 UDP 2122194687 192.168.1.4 61665 typ host a=candidate:11 UDP 1685987071 24.23.204.141 54609 typ srflx raddr 192.168.1.4 rport 61665 (略) [RFC4566] [RFC3264]can send and recv audio [I-D.ietf-payload-rtp-opus] - Opus Codec 48khz, 2 channels [RFC5245] - ICE user fragment [RFC5245] - ICE password [RFC5245] - DTLS Fingerprint [RFC5761] - can perform RTP/RTCP Mux [RFC5104] - support NACK [RFC5245] - ICE Host Candidate [RFC5245] - ICE Server Reflexive Candidate
- 15.Bundle & rtcp-mux • Reduce ICE setup time • Optimize resources
- 16.P2P •Pros:• 节省服务端流量 •Cons:• 用户连接数过多,带宽压力大 • 数据不经过server • NAT可能失败
- 17.Peer-Server-Peer
- 18.P2P vs P-Server-P P2P P-Server-P
- 19.Peer-Server-Peer
- 20.MCU vs SFU MCU (Multipoint Conferencing Unit) • 性能消耗大 • 实现复杂度高 • 视频布局不灵活 • 增加延时 SFU (Selective Forwarding Unit) • 需接收多路媒体流 • 但真实场景: AUDIO • 很少多人同时说话 • VAD&DTX VIDEO • “接收N路小分辨率的流” 与“接收1路大分辨率的 流”的流量与CPU消耗并 不是N倍
- 21.SFU challenges • RTCP termination • Adaptive bitrate • Transport robustness • Various networks
- 22.RTCP termination • SR/RR (Sender Report/Receiver Report) [RFC3550] • NACK (Negative Acknowledgments) [RFC4585] • FIR(Full Intra Request) [RFC5104] • PLI(Picture Loss Indication) [RFC4585] • REMB(Receiver Estimated Maximum Bitrate) [draft- alvestrand-rmcat-remb-03] • TMMBR(Temporary Maximum Media Stream Bit Rate Request) [RFC5104]
- 23.RTCP termination SR/RR NACK SR RR NACK RTX FIR Refresh frame REMB ? SR RR NACK RTX FIR REMB
- 24.simulcast … a=rid:1send pt=98;max-width=1280;max-height=720; a=rid:2send pt=100;max-width=640;max-height=360; a=simulcast:send 1;2 …
- 25.SVC … a=rtpmap:96H264/90000 a=fmtp:96profile-level-id=4d0028; packetization-mode=1;max-fr=30;max-fs=8040 a=rtpmap:97H264/90000 a=fmtp:97profile-level-id=4d0028;packetization-mode=1; max-fr=15;max-fs=1200 a=rtpmap:100H264-SVC/90000 a=fmtp:100profile-level-id=4d0028;packetization-mode=1; max-fr=30;maxfs=8040 a=depend:100laym1:96,97;…
- 26.Transport Robustness •Retransmission (NACK) suitable if RTT low •Forward Error Correction (FEC) payload-format specific FEC (suitable for audio) Block-based FEC
- 27.Open source WebRTC servers
- 28.Open source • Kurento •https://www.kurento.org/• Janus •https://janus.conf.meetecho.com/• Licode •http://lynckia.com/licode/• Jitsi •https://jitsi.org/
- 29.Kurento Media Server
- 30.Kurento Media Server
- 31.Kurento Media Server • Pros • 功能强大 • 模块清晰、文档丰富 • Cons • 性能较低(GStreamer) • 不够稳定、内存较高 • 团队转向收费版,开源版本更新不再活跃
- 32.Janus
- 33.Janus • Pros • core与plugins分离,结构清晰 • 基于plugin可定制化开发 • Cons • core/plugins之间的交互较为晦涩 • 弱网处理能力有待优化 • 细节坑较多,例如WS断开后,立即free所有media resources
- 34.LicodeNuve:Manages services, rooms, users, tokens and balances.MongoDB:Stores rooms and tokens. ErizoControler:Manages Control, signalling and data streams.MCU:Erizo Agent+ErizoJSRabbitMQ:Handles all the messages among the components of Licode.
- 35.Licode • Pros • 项目功能较全面,考虑了鉴权、扩展等 • Cons • 文档不全、且更新不及时,缺少示例 • 模块拆分较多,且命名不易理解 • 不支持Data Channel
- 36.TMS
- 37.TMS
- 38.TMS • OVERVIEW • Golang & C++ • Docker • Consul & registrator • KERNEL MODULES • WebRTC protocol • SFU = tsfu + tgates • WebRTC->RTMP
- 39.Various networks 如何覆盖不同用户的各种网络类型?
- 40.TURN as edge
- 41.Cons MediaServer->TURN的流量冗余 房间人数受限(单台机器支持的WebRTC连接有限) 网络连接、业务逻辑、媒体转码都集中在一台服务上
- 42.WebRTC-Gateway
- 43.WebRTC->RTMP Jitterbuffer:reorder, jitter Timestamp:lip-sync
- 44.Dashboard
- 45.TMS features • Distributed SFU • High performance (CPU reduced up to 60-70% compared to KMS) • Supports deployment under public cloud, private cloud or hybrid cloud. • Covering varying networks of users. • Supports bypass live using RTMP/HLS. • P2P for 1v1/small class, SFU for middle/big class, RTMP/HLS for super big class.
- 46.
- 47.聚 音 视 研修不止于形 关注LiveVideoStack公众号 回复 李炼 为讲师评分