开始正文之前,先思考1个问题:2个处于不同网络环境的(具备摄像头/麦克风多媒体设备的)浏览器,要实现点对点的实时视频/语音通讯,难点在哪? 至少得先搞定下面2个问题: 1.彼此要了解对方支持的媒体格式.支持的最大分辨率等媒体信息 比如:peerA端可支持MPEG-1/2.H264多种编码格式,而peerB端支持MPEG-4.H264,要保证二端都正确的编解码,最简单的办法就是取它们的交集H264 就象2个不同国家的人交流,1个只会讲英文.中文,另1个只会讲德语.英文,他俩肯定要能相互正常沟通,肯…
问题:为什么要搞这么多架构? webrtc虽然是一项主要使用p2p的实时通讯技术,本应该是无中心化节点的,但是在一些大型多人通讯场景,如果都使用端对端直连,端上会遇到很带宽和性能的问题,所以就有了下图的三种架构. 一.Mesh架构 即:每个端都与其它端互连.以上图最左侧为例,5个浏览器,二二建立p2p连接,每个浏览器与其它4个建立连接,总共需要10个连接.如果每条连接占用1m带宽,则每个端上行需要4m,下行带宽也要4m,总共带宽消耗20m.而且除了带宽问题,每个浏览器上还要有音视频“编码/解码”…
(一)公平锁 1.什么是公平锁? 公平锁指的是在某个线程释放锁之后,等待的线程获取锁的策略是以请求获取锁的时间为标准的,即使先请求获取锁的线程先拿到锁. 2.在java中的实现? 在java的并发包中提供了ReentrantLock提供了重入锁并且也提供了公平锁(FairSync)和非公平锁(NonfairSync). RenntranLock类的构造方法可传入一个boolean值作为标记是否是否用公平锁,默认是非公平的,非公平锁我们与我们之前学习时实现的可重入锁原理相似,这里就不再详说,接下来…
前言: 公司的产品是一款基于社交的内容聊天软件,需要集成语音通讯功能,在写iOS原生项目时,用到的就是Agora SDK,现在写React Native也直接采用了Agora的库. 集成iOS.Android的步骤: 请参考链接:https://github.com/syanbo/react-native-agora 提示:因为Agora的库有两个版本,必须采用最新版,以免有些功能不支持(笔者在集成时,当时没有注意,有不少折腾呢) 使用记录: 不知道怎么开头写的时候,参考官方Demo : htt…
​前言 本文主要介绍作者关于人工智能(AI)语音测试的各方面知识点和实战技术. 本书共分为9章,第1.2章详细介绍人工智能(AI)语音测试各种知识点和人工智能(AI)语音交互原理:第3.4章介绍人工智能(AI)语音产品需求和评价指标,以及其相对应的验收标准:第5章介绍如何准备语音数据,包括准备方案和具体方法:第6-9章介绍人工智能(AI)语音测试涉及的4大模块,既黑盒测试.自动化测试.算法测试.性能测试. 本书从理论概念到测试实践,从手工测试到自动化测试,内容翔实且丰富,其中的项目方案.范例和实…
webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器很多时候无法建立p2p连接,只能通过公网上的中继服务器(也就是所谓的turn服务器)中转.示例图如下: 上图中的Relay server即为turn中继服务器,而STUN server的作用是通过收集NAT背后peer端(即:躲在路由器或交换机后的电脑)对外暴露出来的ip和端口,找到一条可穿透路由器…
来源<WebRTC权威指南> 1 WebRTC特点 对等连接(Peer Connection):浏览器与浏览器(万维网上的任意两个通信终端)之间的连接(P2P) 信令服务器:在浏览器和对等连接另一端之间提供信令通道 2 WebRTC三角形 两个重要的概念:信令路线(三角形的两条边)和媒体数据流动路线(三角形的底边),两个浏览器之间直接通过建立对等连接来传输语音.视频媒体,以及附加数据. 终端和web服务器之间通过信令通道交互,两个对等端之间通过对等连接交互. 3 WebRTC梯形 在此网络中,…
kurento是一个开源的webrtc mcu服务器,按官方的文档,建议在ubtntu上安装,过程如下: 注:建议先切换到root身份,如果不是root身份登录的,下列命令,请自行加上sudo . 另:kurento 6.10版,要求ubtntu最低版本为16.04,低版本的安装将出错. 1.安装gunpg apt-get update \ && apt-get install --no-install-recommends --yes \ gnupg 2.确定ubuntu版本 cat /…
这是kurento tutorial中的一个例子(groupCall),用于多人音视频通话,效果如下: 登录界面: 聊天界面: 运行方法: 1.本地用docker把kurento server跑起来 2.idea里启用这个项目 3.浏览器里输入https://localhost:8443/ 输入用户名.房间号,然后再开一个浏览器tab页,输入一个不同的用户名,房间号与第1个tab相同,正常情况下,这2个tab页就能聊上了,还可以再加更多tab模拟多人视频(注:docker容器性能有限,mac本上…
以前在做一个视频监控项目的时候,刚开始客户没提到要支持P2P,因为服务端是我们自己写的,为了便于处理一些逻辑,全部采用转发的方式,后来客户要求支持P2P,没办法了,后来自己部署了一个STUN服务器(不过也有很多开源STUN服务器,不过用起来会有些肖问题),客户端取到NAT类型和ip地址后,自己根据这些信息进行打洞处理,搞得有点复杂,其实按照ICE协议就比较简单了,主要分成两个部分:地址获取与连通性检查,详细介绍如下: 说明:下文是转载的,转载自哪里我也不知道,貌似经过很多层转载了,在这里先对原创…