WebRTC 整体架构图:
WebRTC通话流程基本步骤:
SDP是一个描述多媒体连接内容的协议,例如分辨率、格式、编码、加密算法等,示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
//版本 v=0 //<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address> o=- 3089712662142082488 2 IN IP4 127.0.0.1 //会话名 s=- //会话的起始时间和结束时间,0代表没有限制 t=0 0 //表示音频传输和data channel传输共用一个传输通道,通过id区分不同的流 a=group:BUNDLE audio data //WebRTC Media Stream a=msid-semantic: WMS //m=audio说明本会话包含音频,9代表音频使用端口9来传输,但是在WebRTC中现在一般不使用,如果设置 为0,代表不传输音频 //使用UDP来传输RTP包,并使用TLS加密。SAVPF代表使用srtcp的反馈机制来控制通信过程 //111 103 104 9 0 8 106 105 13 110 112 113 126表示支持的编码,和后面的a=rtpmap对应 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126 //表示你要用来接收或者发送音频时使用的IP地址,WebRTC使用ICE传输,不使用这个地址 c=IN IP4 0.0.0.0 //用来传输rtcp的地址和端口,WebRTC中不使用 a=rtcp:9 IN IP4 0.0.0.0 //ICE协商过程中的安全验证信息 a=ice-ufrag:ubhd a=ice-pwd:l82NnsGm5i7pucQRchNdjA6B //支持trickle,即SDP里面只描述媒体信息,ICE候选项的信息另行通知 a=ice-options:trickle //DTLS协商过程中需要的认证信息 a=fingerprint:sha-256 CA:83:D0:0F:3B:27:4C:8F:F4:DB:34:58:AC:A6:5D:36:01:07:9F: 2B:1D:95:29:AD:0C:F8:08:68:34:D8:62:A7 a=setup:active //前面BUNDLE行中用到的媒体标识 a=mid:audio //指出要在rtp头部中加入音量信息 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level //当前客户端只接收数据,不发送数据,如recvonly、sendonly、inactive、sendrecv a=recvonly //rtp、rtcp包使用同一个端口来传输 a=rtcp-mux //下面都是对m=audio这一行媒体编码的补充说明,指出了编码采用的编号、采样率、声道等 a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc //对opus编码可选的补充说明,minptime代表最小打包时长是10ms,useinbandfec=1代表使用opus编码内置fec特性 a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:110 telephone-event/48000 a=rtpmap:112 telephone-event/32000 a=rtpmap:113 telephone-event/16000 a=rtpmap:126 telephone-event/8000 //下面是对Data Channel的描述,基本和上面的audio描述类似,使用DTLS加密,使用SCTP传输 m=application 9 DTLS/SCTP 5000 c=IN IP4 0.0.0.0 //可以是CT或AS,CT方式是设置整个会议的带宽,AS是设置单个会话的带宽。默认带宽是kbps级别 b=AS:30 a=ice-ufrag:ubhd a=ice-pwd:l82NnsGm5i7pucQRchNdjA6B a=ice-options:trickle a=fingerprint:sha-256 CA:83:D0:0F:3B:27:4C:8F:F4:DB:34:58:AC:A6:5D:36:01:07:9F: 2B:1D:95:29:AD:0C:F8:08:68:34:D8:62:A7 a=setup:active //前面BUNDLE行中用到的媒体标识 a=mid:data //使用端口5000,一个消息的大小是1024b a=sctpmap:5000 webrtc-datachannel 1024 |
访问设备相关API
音视频设置相关API
Flutter-WebRTC相关API
Dart 中常见的异常类型
Flutter 常用 Widget
名词解释
NAT
网络地址转换(Network Address Translation),示意图
ICE
ICE(Interactive Connectivity Establishment,互动式连接建立是一种框架,使各种NAT穿透技术(如STUN、TURN等)可以实现统一,该技术可以让客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。
STUN
STUN是指简单UDP穿透NAT(Simple Traversal of UDP Through NAT)
搭建方式:
https://github.com/coturn/coturn
https://github.com/pion/turn (Golang)
信令服务器
信令服务器工作原理
分辨率
VGA:640×480
QVGA:320×240
高清720P:1280×720
超清1080P:1920×1080
蓝光并非清晰度,而是存储技术
2K:主流的2K分辨率有2560×1440以及2048×1080
4K:4096×2160,衍生的4K:FullAperture 4K的4096×3112、Academy 4K的3656×2664,以及UHDTV标准的3840×2160;4K视频每一帧的数据量都达到了50MB
8K:7680×4320
常见问题
1、flutter_webrtc fatal error: ‘WebRTC/WebRTC.h’ file not found
flutter_webrtc当前的版本(0.7.1)及0.6.10+hotfix.1在模拟上均无法运行,根据网上显示需要使用0.6.7,但实测并未成功,而在真机上最新版本是可以正常运行的。另最新版本的flutter_webrtc要求配置为minSdkVersion 21。