在iOS下做IM功能时,难免都会涉及到音频通话和视频通话。QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果。
但是利用WebRTC技术,即使一个人也能够实现效果不错的音视频通话。本篇介绍WebRTC的基础概念。

WebRTC介绍

WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。
WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox…)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现。但是经过多年的打磨,WebRTC现在已经可以在windows,linux,mac,android,iOS等过个平台中使用。
WebRTC可以除了可以用来做音频通话、视频通话,还可以用来做视频会议。
其他关于WebRTC的介绍可以参考:百度百科-WebRTC 以及 WebRTC官网

WebRTC 过程

WebRTC 利用RTCPeerConnection可以建立点对点高效、稳定的音频、视频流传输。但是在进行点对点的流传输之前,它依然还需要利用服务器来做一些准备工作。而准备工作需要用到的东西就比较多了,比如STUN服务器、TURN服务器、ICE(NAT和防火墙穿透)、信令传输,相互之间的信令交换完毕,就会发送实时音视频留给对方。
进行音视频通话的完整过程:
1、首先设置好STUN服务器、和TURN服务器,然后将STUN服务器和TURN服务器包装成RTCICEServer对象,保存进数组备用。
2、利用上一步的数组创建RTCPeerConnection连接。
3、为RTCPeerConnection添加RTCMediaStream,而RTCMediaStream内包含视频和音频轨迹,只是做一些配置,然后WebRTC内部按照你的配置做音频、视频的采集。如果你只为RTCMediaStream添加音轨,就是做音频通话;同时添加音轨和视频轨迹,则是做视频通话;只添加视频轨迹,则只能看到视频画面,没有声音。(这些都是在采集端设置)
4、为视频轨迹设置渲染的容器,便于开始音视频通话后,将实时视频画面渲染到视图上。(如果是音频通话则没有视频轨迹,就不需要渲染)
5、发起方创建Offer,创建完成后会返回一个本地SessisonDescription(简称sdp,其实就是一些媒体和网络相关的元数据信息),然后为RTCPeerConnection设置本地sdp(RTCPeerConnection需要设置远程sdp和本地sdp完成后才能进行点对点的流传输)。
6、将本地sdp信息设置完成后,将本地sdp发送给对方(这个过程就是讲本地offer信令发送给对方)。
7、接收方收到offer信令之后,重复上面的1、2、3、4,然后将接收到的offer sdp设置为自己的远程sdp,然后再创建一个Answer。同样的创建完成后会返回一个SessisonDescription,将这个sdp设置为RTCPeerConnection的本地sdp,设置完成后再将answer发送给发起方。
8、发起方收到answer后,将answer sdp设置为RTCPeerConnection的远程sdp。
9、然后双方就开始互相发送多媒体流数据,整个音视频通话就完成了。

  • STUN服务器、TURN服务器地址其实就是个url而已:
    stun:stun.l.google.com:19302turn:numb.viagenie.ca,其中STUN服务器和TURN服务器可以在自家的服务上创建,STUN、TURN服务器可以有多个,做备用。
  • 配置穿墙服务器是为了实时多媒体流的传输,而穿墙过程都在ICE这个框架内部做了处理,只需要设置好打洞的服务以及一些回调即可。
  • 除了上面那些服务器外,还需要一些额外的服务器用来发现用户,比如XMPP服务,主要是为了维护用户的关系以及保持其在线、离线等状态。
  • WebRTC框架内不提供信令服务,因此信令信息的发送和接收处理需要我们自己去处理。处理的方式也有很多种,比如利用XMPP的的发送和接收消息的机制,将信令信息发送给对方;也可以用Http网络将信令消息发送给对方;还可以利用WebSocket将信息发送给对方。

先大致了解WebRTC交互的过程,便于后面理解代码。
下一篇我会编写一个在同路由器 的局域网内进行视频通话的Demo。

关于WebRTC概念性的理解下面有几篇文章,文章内也有一些链接都是很好的资料:
使用WebRTC搭建前端视频聊天室——入门篇
使用WebRTC搭建前端视频聊天室——信令篇
WebRTC的RTCDataChannel
虽然以上三篇主要是讲Web前端的WebRTC使用,但是过程和概念归纳的非常好,可以多读几遍。
WebRTC and the Early API
WebRTC代理中的各种枚举状态
P2P传输和ICE穿越过程介绍

其实iOS 中WebRTC的处理过程与Web端的处理过程除了API命名不同,过程基本是一致的。
重要的是通过编写代码,然后对照代码的每一步去思考它这样做是为了干啥。

Have Fun!

iOS下WebRTC音视频通话(一)相关推荐

  1. 流媒体服务器开发——SRS 4.0与WebRTC音视频通话丨音视频开发丨嵌入式开发丨FFmpeg丨iOS音视频开发

    SRS 4.0与WebRTC音视频通话 1. 音视频高薪岗位都需要什么技能点 2. WebRTC的技术点分析 3. SRS 4.0如何使用WebRTC 视频讲解如下,点击观看: 流媒体服务器开发--S ...

  2. 在centos8环境下用asterisk18配置pjsip和webrtc音视频通话教程(一)

    记录一下2021年采用asterisk18配置pjsip分机和webrtc音视频的教程,测试采用浏览器WebRTC呼叫软电话sip分机,WebRTC接听之间的拨号和内部SIP分机和浏览器WebRTC分 ...

  3. WebRTC音视频通话(二)简单音视频通话

    本篇不详细介绍websocket,只针对websocket整合rtc. 一.简单说下webrtc的流程 webrtc是P2P通信,也就是实际交流的只有两个人,而要建立通信,这两个人需要交换一些信息来保 ...

  4. 在centos8环境下用asterisk18配置pjsip和webrtc音视频通话教程(二)

    在上一篇文章,我们介绍了asterisk18在centos8.3环境的编译安装,下面我们继续介绍如何在asterisk18环境中调试成功我们的分机之间通话(包括webrtc). 1) 通过命令 /op ...

  5. 5G时代必学的WebRTC音视频通话技术

    什么是WebRTC ◼ WebRTC(Web Real-Time Communication)是 Google于2010以6829万美 元从 Global IP Solutions 公司购买,并于20 ...

  6. 音视频通话:腾讯云 webRTC音视频通话的使用

    最近项目中用到关于视频通话的功能,一开始使用腾讯云云直播提供的接口进行web端推流和拉流,但苦于获取不到音频,而且那个web推流用的flash谷歌在12月份就不支持了.所以我们最终确定使用webrtc ...

  7. 手把手实现WebRTC音视频通话

  8. Android WebRTC语音视频通话demo

    Android WebRTC简介 https://blog.csdn.net/Charon_Chui/article/details/80510945?utm_term=%E6%89%8B%E6%9C ...

  9. IOS端使用WebRTC实现一对一音视频通话

    前言 WebRTC 实现P2P音视频通话--原生IOS端使用WebRTC实现一对一音视频通话将基于前两篇博客<<信令服务器>><<stun/trun P2P穿透和转 ...

最新文章

  1. 只用一招,让你Maven依赖下载速度快如闪电
  2. 【数据结构与算法】之给Nx3网格图涂色的方案数的求解算法
  3. 20135213——信息安全系统设计基础第十周学习总结
  4. 基础001_Xilinx V7资源
  5. Perl IDE之Perl Express和Eclipse+EPIC+PadWalker
  6. 2021年河南高考成绩排名查询一分一段表,2021年河南高考文科一分一段表,河南一分一段表文科位次排名查询...
  7. 大数据平台搭建_一文读懂数据平台、大数据平台、数据中台
  8. order by 影响效率么_内存碎片对性能的潜在影响
  9. Silverlight:纠结的快捷键问题
  10. 第九章 JSP标签——《跟我学Shiro》[张开涛]
  11. 《Java大学教程》—第24章 Java的背景
  12. 两年前疫情刚开始时写的手机上的悬浮贴图软件:悬浮便利贴 - 在手机屏幕上贴图、贴文字
  13. learun.framework v7.0.6 — . net快速开发框架
  14. Flash cs3教程-传统数字动画
  15. 软件测试自动感应灯,原来这么简单——四种常见LED感应灯工作原理
  16. 情商高的人的特点以及提高情商要做的事——《应该给孩子的50堂情商课》读后有感
  17. k-means算法及改进
  18. bzoj1758+WC2010
  19. 0基础跟班学习前端的第三天(因为上完一次课需要上一天自习啦~)内容整理归纳还有附带的小练习~希望大家多动手练习(二)
  20. 红色石头-通过Sina SAE中级开发者审核

热门文章

  1. 日常用语--警告/劝解
  2. 行为识别基础模型总结
  3. Android:单位和尺寸(px、pt、dip、dp、sp、layoutparams)
  4. 进程和线程上下文切换_编码人员:上下文切换对于计算机和关系而言都很难
  5. 无人机航线规划软件[航线通]
  6. 【手册】如何编译/修改三星手机Rom(一)
  7. 在VMware上实现vsphere client的EXSI
  8. 入手评测 微星武士GF66和GF76选哪个
  9. 京华科讯软件PK VMware:国产虚拟化也精彩
  10. android 利用数据库实现历史搜索记录功能