webRTC运行机制
轨和流
- Track
- MediaStream
重要的类
- MediaStream
- RTCPeerConnection(媒体流传输)
- RTCDataChannel(文本,文件等非视频文件流传输,通过 RTCPeerConnection 获取)






webRTC使用
获取设备


音视频采集Api
navigator.mediaDevices.getUserMedia

getUserMedia适配

桌面数据采集
navigator.mediaDevices.getDisplayMedia(constraints)

约束
视频约束
- width 宽
- height 高
- aspectRatio 宽高比例
- frameRate 帧率
- facingMode
- user : 前置摄像头
- environment : 后置摄像头
- left : 前置左摄像头
- right : 前置右摄像头
- resizeMode 裁剪
音频约束
- volume 音量
- sampleRate 采集率(16000, 8000)
- sampleSize 采集大小 (每个采集率右多大表示 16位 8位)
- echoCancellation 是否消除回音
- autoGainControl 是否增加基础音量
- noiseSuppression 是否降噪
- latency 延迟大小(控制在500ms之内)
- channelCount 单双通道
- deviceID 可以切换设备
- groupID 物理设备
特效

MediaStream
- MediaStream.addTrack() 添加媒体轨
- MediaStream.removeTrack() 移除媒体轨
- MediaStream.getVideoTracks() 拿到视频媒体轨
- MediaStream.getAudioTracks() 拿到音频媒体轨
- MediaStream.stop() 结束媒体流
事件
- MediaStream.onaddtrack 添加轨 触发的事件
- MediaStream.onremovetrack 移除轨 出发的事件
- MediaStream.onended 结束 触发的事件
MediaRecoder
基本格式
var mideaRecorder = new MediaReacoder(stream [, option]);
参数说明
- stream 媒体流, 可以从
getUserMedia、 <video>、 <audio> 、 <canvas>获取 - options 限制选项
- mediatype 媒体流格式
- video/webm
- audio/webm
- video/webm;codecs=vp8
- video/webm;codecs=h264
- audio/webm;codecs=opus
- audioBitsPerSecond 音频码率
- videoBitsPerSecond 视频码率
- bitsPerSecond 整体码率
- mediatype 媒体流格式
API
- MediaRecorder.start(timeslice) 开始录制媒体, timeslice可选, 如果设置了会按照时间切片存储数据, 否则存储在一个buffer里
- MediaRecorder.stop() 停止录制,会触发最终 Blob 数据的 dataavailable 事件
- MediaRecorder.pause() 暂停录制
- MediaRecorder.resume() 恢复录制
- MediaRecorder.isTypeSupported( arg ) 是否支持参数里的格式
事件
- MediaRecorder.ondataavailable 每次记录一定时间(与时间切片有关)的数据
- MediaRecorder.onerror 当发生错误时,录制会停止
信令服务器
信令服务器的作用

WebRTC传输基本知识
- NAT (Network Address Translator) 各个设备组成的net
- STUN (Simple Traversal of UDP Through NAT) 给要P2P连接的设备介绍的服务
- TURN (Traversal Using Relays around NAT) 两台设备不能P2P连接,就是用服务器连接
- ICE (Interactive Connectivity Establishment) 找到两台设备传输流的最佳连接
STUN
RFC STUN 规范
- RFC3489/STUN Simple Traversal of UDP Through NAT
- RFC5389/STUN Session Traversal Utilities for NAT (包含3489规范)
STUN 协议
-
包括 20 字节的STUN header(下面时 3489 规范的组成)
-
其中 2 个字节 (16 bit)类型
-
2 个字节 (16 bit)消息长度, 不包括消息头
-
16 个字节 (128bit) 事务ID, 请求与响应事务ID相同
-
5389 规范 协议头组成
- Magic Cookie 4 字节, 32 位, 固定值 0x2112A442

-
-
Body 中可以有 0 个或者多个 Attribute
-
每个属性进行 TLV 编码: Type,Length, Value

-
RFC3489 定义的属性

-
TURN
- 目的是解决对称 NAT 无法穿越的问题
- 建立在 STUN 之上, 消息格式使用 STUN 格式消息
- TURN Client 要求服务器端分配一个公共的 IP 和 Port 用于接受数据
- TURN 使用的传输协议
- TURN Client to TURN server (UDP、 TCP、 TLS over TCP)
- TURN server to peer (UDP)

webRTC端对端实现互动

RTCReerConnection类
格式
pc = new RTCPeerConnection([configuration]);
configuration 参数
- iceServers stun/turn 服务(可多个)
- credential: 凭证, 只有 TURN 服务使用
- credentialType: 凭证类型可以 password 或 oauth
- urls: 用于连接服务中的 url 数组
- username: 用户名, 只有 TURN 服务使用
- iceTransportPolicy 指定 ICE 传输策略
- relay: 只使用中继候选者
- all: 可以使用任何类型的候选者
- bundlePolicy
- Balanced: 音频与视频轨使用各自的传输通道
- max-compat: 每个轨使用自己的传输通道
- max-bundle: 都绑定到一个传输通道
- rtcpMuxPolicy 在收集 ICE 候选者时使用
- negotiate: 收集 RTCP 与 RTP 复用的 ICE 候选者, 如果 RTCP 能复用就与 RTP 复用, 如果不能复用,就讲它们音独使用
- require: 只收集 RTCP 与 RTP 复用的 ICE 候选者, 如果 RTCP 不能复用, 则失败
- peerIdentity 表示字符串
- certificates 授权可以使用连接的一组证书
- iceCandidatePoolSize 16 位的整数值, 用于指定预取的 ICE 候选者的个数。如果该值发生变化,它会触发重新收集候选者
方法分类
- 媒体协商
- createOffer
- 基本格式: aPeomise = myPeerCOnnection.createOffer([options]);
- Options 参数
- iceRestart: 该选项会重启ICE, 重新进行 Candidate 收集
- voiceActivityDetection: 是否开启静音检测, 默认开启
- createAnswer
- 基本格式: aPeomise = myPeerCOnnection.createAnswer([options]);
- setLocalDescription
- 基本格式: aPeomise = myPeerCOnnection.setLocalDescription(sessionDesscription);
- setRemoteDescription
- 基本格式: aPeomise = myPeerCOnnection.setRemoteDescription(sessionDesscription);
- createOffer

- Stream/Track
- addTrack
- 基本格式: rtpSender = myPeerCOnnection.addTrack(track, stream…);
- 参数:
- track 添加到 RTCPeerConnection 中的媒体轨
- stream 指定 track 所在的 stream
- removeTrack
- 基本格式: rtpSender = myPeerCOnnection.removeTrack(rtpSender);
- addTrack
- 重要事件
- onnegotiationneeded 协商事件 (需要协商时触发的事件)
- onicecandidate 收到候选者事件
- 传输相关方法
- 统计相关方法
SDP
定义
SDP (Session Description Protocol) 它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息
规范
- 会话层(全局)
- 会话的名称与目的
- 会话的存活时间
- 会话中包括多个媒体层
- 媒体层(局部)
- 媒体格式
- 传输协议
- 传输IP和端口
- 媒体负载类型

coTurn服务器配置
- listening-port=3478 # 指定侦听端口
- external-ip = xx.xx.xx.xx # 指定云主机的公网 IP 地址
- user=aaaaa:bbbbb # 访问 stun/turn 服务器的用户名密码
- realm = stun.xxx.cn # 域名
RTP Media
Receiver
- getReceivers 获得一组 RTCRtpReceiver 对象, 用于接收数据
Sender
- getSenders 获得一组RTCRtpSender 对象, 用于发送数据, 每个对下个对应一个媒体轨

785

被折叠的 条评论
为什么被折叠?



