标签 WebRTC 下的文章

一、通过浏览器访问摄像头
1、流程:
两端一样:WebRTC终端(音视频采集、录制、检测)->signal(信令服务器,如加入房间、离开房间等消息传递)->创建连接
连接方式:优先P2P,NAT穿越失败时使用STUN/TURN,负责获取公网IP、消息转发。
2、概念:

  • 帧率:摄像头一秒钟采集图像的次数称为帧率。越高视频越平滑流畅,占用带宽越多。
  • 分辨率:摄像可设分辨率。越高图像越清晰,占用带宽越多。
  • 宽高比。分辨率的宽高比,常见16:9、4:3
  • 采样率:音频和视频一样可指定一秒的采样次数。
  • 采样位深:即采样大小,每个采样用几bit表示。
  • 轨(Track):WebRTC借鉴了多媒体概念,像火车轨道永不会相交。如MP4中的音频轨、视频轨被分别存储。
  • 流(Stream):即容器。分为媒体流(MediaStream)和数据流(DataStream)。媒体流可存0个或多个音频轨或视频轨,数据流可以存0个或多个数据轨。
    3、编码:
  • 使用getUserMedia对象获取设备,MediaStreamConstraints参数设置使用音频轨还是视频轨并配置。

二、设备检测
1、原理:

1)音频:需要采集、量化、编码三步,最终形成数字信号。
  • 采集的模拟信号转为数字信号。使用奈奎斯特定理(转换时采样率大于信号中最高频率2倍时会完整地保留了原始信息。即人类听觉范围20Hz~20kHz,日常8kHz即可。为了高保真需设置采样在40kHz以上,所以我们听歌会见到 44.1k、48k等。
  • 量化和编码时,采样大小决定了每个采样最大可以表示的范围。如采样8位则最大255,16位最大数值是 65535。

    2)视频:
  • 光通过镜头到摄像机后通过视频设备的模数转换,即光学传感器。数字信号就是RGB。
  • RGB通过DSP进行优化处理,如自动增强、白平衡、色彩饱和等,就得到24位真彩色图片(每种颜色8位)。
  • RGB进行压缩、传输,生成YUV格式图像。编码器输入格式为YUV I420,所以摄像头内有一个模块将RGB转为YUV。YUV是一种色彩编码方法,用于电视系统和模拟视频领域。将亮度Y与色彩UV分离,解决了彩色电视机与黑白电视的兼容。
    2、检测:

先排查视频设备,再排查音频设备,需要调用两次getUserMedia。
3、编码:

  • MediaDevices接口提供了访问设备的方法。部分字段(如label)需要HTTPS

三、浏览器拍照
1、概念:

  • 非编码帧:摄像头采集的帧或通过解码后的帧。一般是YUV或RGB。播放器需要的也是非编码帧。
  • 编码帧:通过编码器(如 H264/H265、VP8/VP9)压缩后的帧。如H264编码后包括:

    • I帧:关键帧,压缩率低,可单独解码成完整图像。
    • P帧:参考帧,压缩率较高,解码时依赖于前面已解码的数据。
    • B 帧:前后参考帧,压缩率最高,解码时依赖前面已经解码的帧,还依赖它后面的P帧。
      2、编码:
  • 依赖Canvas对象

四、录制
1、录制后的格式:

  • FLV是流式的,可在任何位置进行读写操作都可以正常处理。缺点是必须按顺序播放,但UDP这种不可靠传输是不保证顺序的。
  • 原始数据:FLV不支持多路数据。
    2、录制后如何播放:

多人互动且回放要和直播时一样,就必须使用私有播放器,普通播放器不支持同时播放多路视频的。
3、录制后多久播放:

  • 边录边看:将视频按N分钟为单位录制成一段一段的,然后录完一段播一段。
  • 录完后看。
  • 录完过会看:录制后做编码处理。
    4、编码:
  • MediaRecorder对象。
  • WebRTC用Blob类型存储录制的流。

五、抓取桌面
1、编码:getDisplayMedia对象。

六、原理
1、RTP和RTCP:TCP性能低,七次重试共耗时2分07秒,所以实时音视频必须使用UDP。

  • 为了解决UDP无序问题,给每个分片(一个大数据会切为多个分片)加上RTP头(序号、起始帧结束帧的标记),这样就可以对数据包排序组装。
  • RTP包传输会遇到丢包、抖动、乱序的问题,引入RTCP协议,包含RR和SR两个报文,用来描述网络质量。
    2、SDP:WebRTC驱动核心,描述各端的处理能力,包括音视频、传输协议、支持的码率、采样率(32000、48000)、编码器名称(VP8、VP9)等。

3、媒体协商:依靠RTCPeerConnection对象,各端通过信令服务器发送SDP,协商最终使用的编解码器、传输协议等参数。
4、建立连接:

  • 两端在内网:走内网或公网绕一圈。
  • 两端在异地:优先P2P,不通时使用中继服务器(也称relay服务器或TURN 服务器)
  • 两端收集Candidate,包括内网IP端口、NAT映射后内网IP端口(STUN协议)、中继服务器IP端口。WebRTC根据优先级排序,选择最佳的方式。
  • NAT的作用:多台主机公用一个外网IP,内部使用内网IP通信,一是节省IPv4,二是有NAT挡住更安全。缺点是复杂度更高,主机直接通信需要NAT穿越。
    5、NAT穿越原理:
  • 完全锥型:在NAT上打个洞(NAT对内网主机做了映射),使用UDP协议。
  • IP 限制锥型:只有主机访问过的外网IP,才可以打洞成功。
  • 端口限制锥型:只有主机访问过的外网IP和端口,才可以打洞成功。
  • 对称型:只有主机访问过的外网IP和端口,才可以打洞成功,并且主机访问外网的洞,和外网访问主机的洞,不是同一个洞。因此如果两端都是对称型或对称型+端口限制型,基本穿越失败。
    通过发UDP包的方式,判断哪条路可以通,就是哪种类型。