WebRTC研究 (二) 实例demo

2,759 阅读2分钟

@[TOC](WebRTC研究 (二) 实例demo)

1. WebRTC 简介

webrtc官网 webrtc对iOS使用的说明

2.WebRTC 获取视频流Demo

2.1 WEBRTC结构

2.1.1 完整的WebRTC框架,分为 Server端、Client端两大部分。

  • Server端: Stun服务器 : 服务器用于获取设备的外部网络地址 Turn服务器 : 服务器是在点对点失败后用于通信中继 信令服务器 : 负责端到端的连接。两端在连接之初,需要交换信令,如sdp、candidate等,都是通过信令服务器 进行转发交换的。
  • Client有四大应用端: Android iOS PC Broswer

2.1.2 介绍下WebRTC三个主要API,以及实现点对点连接的流程。

  1. MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流
  2. RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件
  3. RTCDataChannel:RTCDataChannel使得浏览器之间(点对点)建立一个高吞吐量、低延时的信道,用于传输任意数据。 其中RTCPeerConnection是我们WebRTC的核心组件。

##WEBRTC的建立连接流程图

webrtc流程图.png

2.1.3 整个webrtc连接的流程说明

其主要流程如上图所示, 具体流程说明如下:

  1. 客户端通过socket, 和服务器建立起TCP长链接, 这里我用了CocoaAsyncSocket第三方框架进行socket连接github.com/robbiehanso…
  2. 客户端通过信令服务器, 进行offer SDP 握手

SDP(Session Description Protocol):描述建立音视频连接的一些属性,如音频的编码格式、视频的编码格式、是否接收/发送音视频等等 SDP 是通过webrtc框架里面的PeerConnection所创建, 详细创建请参考我的demo.

3.客户端通过信令服务器, 进行Candidate 握手

Candidate:主要包含了相关方的IP信息,包括自身局域网的ip、公网ip、turn服务器ip、stun服务器ip等 Candidate 是通过webrtc框架里面的PeerConnection所创建, 详细创建请参考我的demo.

  1. 客户端在SDP 和Candidate握手成功后, 就建立起一个P2P端对端的链接, 视频流就能直接传输, 不需要经过服务器啦.

2.1.4 SDP握手流程和Candidate握手流程类似, 但有点繁琐, 下面就SDP握手流程简要说明:

SDP握手流程.png

2.1.5 用一个demo演示能很好的帮助大家对整套webrtc音视频通信的梳理:

综合分析了国内外相对比较好的几个demo, 吸取了各自的优点, 现给大家分享. (*国内的很多demo代码质量相对较差而且很多都运行不起来, 多数用OC开发, 国外的相对较好)