webrtc服务器视频搭建
⑴ WebRtc实现网页和原生P2P视频聊天,视频通话
Webrtc已经成为视频及时互动的标配,日常业务系统中,很多需要web打开就能视频通话,实现类似微信视频聊天的功能,但实施是在web上,由于还有业务app集成,同时也要在app原生端实现。
经过多次分析和参考google的官方demo,开发总结了一下:
1,webrtc库尽量要匹配,如现在主流浏览器支持的是webrtc,m79,原生端尽量用这个原生库打包。
2,web的全平台兼容挺难的,特别是ios上只支持safari内置版本,api和chrome稍有差异。
3,实施上视频摄像头对chrome 64位兼容不不是太好,建议自行封装成chrome内核的客户端
4,webrtc如只是p2p不需要特别服务器,自已开发信令服务就可以啦,当要安装turn server 国内常有打洞不成功需要转发。
效果:
测试:https://m.ovmeet.com:5001/login.html
⑵ 新手求助 Intel WebRTC SDK的服务器搭建问题
每个服务器可能有不同的系统,但是我们都要对新的服务器进行一些配置,例如香港服务器,那么服务器的环境要如何配置呢?我相信这是很多新手站长的苦恼,其实这分三步就可以轻松搞定了。第一步:进入系统后我们把系统光盘里的I386文件复制到任何盘符都行,开始安装IIS。进入“控制面板”,选“添加/删除程序→添加/删除Windows组件”,将“Internet信息服务(IIS)”前的小钩去掉(如有),重新勾选中后按提示操作即可完成IIS组件的添加。用这种方法添加的IIS组件中将包括Web、FTP(可选可不选我们也可以用软件建FTP服务器)、NNTP和SMTP等全部四项服务。IIS网站搭建就不详说了。第二步:装好IIS后我们就要开始配置:AspJpeg、AspUpload、imail(可选别的版本)、JMAIL、JoekoeCMS3.0Free、LyfUpload.dll(复制到windows/systems32里面,运行cmd→regsvr32+LyfUpload.dll,注册这个组件)、MSXML、mysql、php、SQL2000第三步:待以上都装好以后在配置IIS,具体步骤如下:1),web服务扩展里面的ActiveServerPages ̄|Asp.NETv1.4322|≯设置允许在服务器端的包含文件__|PHP配置允许:新建WBE服务扩展:扩展名:PHP→添加→浏览→查找范围→PHP5→PHP5isapi.dll设置允许(在这之前先安装PHP5)2),网站:属性→主目录→配置→选项→起用父路径勾上.把上面这三部完成后,这样一台香港服务器环境就配置好了!服务器找我!展翼小T
⑶ 用SRS快速搭建WebRTC推流和播放
WebRTC目前已经比较成熟了,播放也比较稳定,协议也已经成为了RFC,相应的开源项目也比较多。当然我觉得WebRTC还缺一个高性能简单易用的服务器,之前也分析过现有的服务器,有各种问题,SRS很有机会解决这些问题。
目前SRS对WebRTC的支持进度如下:
相关Wiki:
在线演示,RTMP推流,HTTP-FLV和WebRTC播放:
在线演示,WebRTC推流,WebRTC播放:
自己用SRS搭建WebRTC服务器,也非常容易,下面是操作步骤。
注意:必须要将本机的IP传给Docker,否则会推流和播放失败。
可以直接传本机IP,例如: 192.168.1.3 。如果觉得直接传IP比较麻烦,可以用脚本获取IP。
macOS下执行命令,直接设置IP:
macOS下执行命令,用脚本获取IP:
CentOS下执行命令,用脚本获取IP:
启动后,可以访问 http://localhost:8080/ ,确认是否启动成功。
Docker一定要设置对这个IP,否则会出现推流和播放失败。
演示,WebRTC推流和播放,链接:
演示,RTMP推流,WebRTC播放。首先,用FFMPEG或OBS推送RTMP流到服务器:
可播放的流地址:
⑷ WebRTC基于浏览器的开发
WebRTC需要通过长链接查找到通信双方,然后通过 peer to peer 的方式传输音频数据。
WebRTC中最主要的就是一个叫做 PeerConnection 的对象,这个是WebRTC中已经封装好的对象。每一路的音视频会话都会有唯一的一个 PeerConnection 对象,WebRTC通过这个 PeerConnection 对象进行视频的发起、传输、接收和挂断等操作。
PeerConnection中包含的属性如下:
PeerConnection 中还包含了一些方法:
RTCSessionDescription 类型中包含了两个属性:
A向B发起通信请求
首先WebRTC需要一个信令服务器,也就是一个socket链接用来发起视频通信,发送WebRTC中的 offer 和回复 answer 。
如何搭建一个简单的socket服务器,可以找我的这篇文章《》,也可以是用webSocket搭建信令服务器。
WebRTC需要打洞服务器(一个 stun ,一个 turn )来穿透防火墙等,我们需要配置打洞服务器:
WebRTC由于是未来的一种即时通信的标准,所以目前在Chrome、Firefox和Opera浏览器中有内置插件,均提供一个全局的PeerConnection类。
创建PeerConnection的对象:
创建时需要传入打洞服务器的配置信息,如果不穿入打洞服务器的配置信息,则只可以在内网中使用实时音频通讯。
由于PeerConnection是全局的,所以我们可以通过另外的一种方式进行创建:
如何判断浏览器是否支持WebRTC:
WebRTC也提供了一个全局单例来获取本地的音视频信息:
GetUserMedia需要传入三个参数,第一个参数为配置信息,第二个参数为获取成功的回调,第三个参数为获取失败的回调。
获取到视频流之后
创建一个offer并发送给指定的对象:
创建offer时要同时发送打洞服务器配置信息,WebRTC给了一个监听:
返回的参数中有一个 candidate 属性,便是打洞服务器的配置信息。
音频通话请求是通过socket发来的,需要通过socket去监听。
如果收到了offer,那么需要将offer存到自己的peerConnection中,并且创建一个answer发送回对方。
将offer存入peerConnection中:
创建一个answer并返回给对方:
如果收到了打洞服务器的配置信息,那么需要将打洞服务器的配置信息存入到 peerConnection 中:
发送给对方answer后便可以等待接受对方的数据流了:
至此,整个简单的WebRTC的流程就完成了
⑸ 使用WebRTC搭建前端视频聊天室——点对点通信篇
WebRTC给我们带来了浏览器中的视频、音频聊天体验。但个人认为,它最实用的特性莫过于DataChannel——在浏览器之间建立一个点对点的数据通道。在DataChannel之前,浏览器到浏览器的数据传递通常是这样一个流程:浏览器1发送数据给服务器,服务器处理,服务器再转发给浏览器2。这三个过程都会带来相应的消耗,占用服务器带宽不说,还减缓了消息从发送到接收的时间。其实最理想的方式就是浏览器1直接与浏览2进行通信,服务器不需要参与其中。WebRTC DataChannel就提供了这样一种方式。
如果对WebRTC和DataChannel不太了解的同学,可以先阅读如下文章:
- WebRTC的RTCDataChannel
- 使用WebRTC搭建前端视频聊天室——信令篇
- 使用WebRTC搭建前端视频聊天室——入门篇
当然服务器完全不参与其中,显然是不可能的,用户需要通过服务器上存储的信息,才能确定需要和谁建立连接。这里通过一个故事来讲述建立连接的过程:
不如钓鱼去
一些背景:
现在,老刘听说老姚钓鱼技术高超,想和老姚讨论钓鱼技巧。只要老刘和老姚相互之间知道对方的门牌号以及凭证,就可以串门了:
老刘和老姚相互之间知道了对方的门牌号和小区出入凭证,他们相互之间有什么需要交流的直接串门就行了,消息不再需要门卫老大爷来代为传达了
换个角度
我们把角色做一个映射:
于是乎故事就变成了这样:
这样,就建立了一个点对点的信道,流程如下所示:
故事
老刘和老姚已经可以相互串门了,经过一段时间的交流感情越来越深。老姚的亲友送了20斤葡萄给老姚,老姚决定送10斤给老刘。老姚毕竟年事已高,不可能一次带10斤。于是乎,老姚将葡萄分成了10份,每次去老刘家串门就送一份过去。
这里可以做如下类比:
这其实就是通过datachannel传输文件的方式,首先将文件分片,然后逐个发送,最后再统一的进行组合成一个新的文件
分片
通过HTML5的File API可以将type为file的input选中的文件读取出来,并转换成data url字符串。这也就为我们提供了很方便的分片方式:
组合
通过datachannel发送的分片数据,我们需要将其进行组合,由于是data url字符串,在接收到所有包之后进行拼接就可以了。拼接完成后就得到了一个文件完整的data url字符串,那么我们如何将这个字符串转换成文件呢?
方案一:直接跳转下载
既然是个dataurl,我们直接将其赋值给window.location.href自然可以下载,但是这样下载是没法设定下载后的文件名的,这想一想都蛋疼
方案二:通过a标签下载
这个原理和跳转下载类似,都是使用dataurl本身的特性,通过创建一个a标签,将dataurl字符串赋值给href属性,然后使用download确定下载后的文件名,就可以完成下载了。但是很快又有新问题了,稍微大一点的文件下载的时候页面崩溃了。这是因为dataurl有大小限制
方案三:blob
其实可以通过给a标签创建blob url的方式来进行下载,这个没有大小限制。但是我们手上是dataurl,所以需要先进行转换:
获得blob后,我们就可以通过URL API来下载了:
这里有几个点:
1. datachannel其实是可以直接传送blob的,但是只有ff支持,所以传data url
2. chrome下载是直接触发的,不会进行询问,firefox会先询问后下载,在询问过程中如果执行了revokeObjectURL,下载就会取消,囧
升级
如我们所知,WebRTC最有特点的地方其实是可以传输getUserMedia获得的视频、音频流,来实现视频聊天。但事实上我们的使用习惯来看,一般人不会一开始就打开视频聊天,而且视频聊天时很消耗内存的(32位机上一个连接至少20M左右好像,也有可能有出入)。所以常见的需求是,先建立一个包含datachannel的连接用于传输数据,然后在需要时升级成可以传输视频、音频。
看看我们之前传输的session description,它其实来自Session Description Protocol。可以看到wiki上的介绍:
这意味着什么呢?我们之前建立datachannel是没有加视频、音频流的,而这个流的描述是写在SDP里面的。现在我们需要传输视频、音频,就需要添加这些描述。所以就得重新获得SDP,然后构建offer和answer再传输一次。传输的流程和之前一样,没什么区别。但这一次,我们不需要传输任何的ice candidate,这里我曾经遇到了坑,经过国外大大的点拨才明白过来。
Peertc
我将datachannel和websocket组合,实现了一个构建点对点连接的库Peertc,它提供非常简洁的方式来建立连接和发送数据、文件和视频/音频流,详情见github。走过路过的记得star一下哦,有什么bug也非常希望能够提出来。
最后
WebRTC的点对点方式能够运用在很多场景:
- 如web qq这种Web IM工具,这就不说了
- 如象棋这种双人对战 游戏 ,每一步的数据服务器时不关心的,所以完全可以点对点发送
- 一对一在线面试、在线教育,这其实是即时通信的一个业务方向
⑹ iOS开发之WebRTC和SIP(转载)
1.SIP概念理解
2.【协议学习】SIP基本场景分析
3.企业开源SIP项目
4.SIP常见问题及处理
5.SIP基础入门
6.我的IOS端SIP电话开发历程
7.我的SIP开发之路
8.SIP协议&开源SIP服务器搭建和客户端安装
1.WebRTC官网
2.大佬的笔记
3.WebRTC中文网
4.RTC.Blacker ->Android IOS WebRTC
5.iOS下音视频通信-基于WebRTC
6.第六章 Webrtc服务器搭建
7.webrtc学习: 部署stun和turn服务器
8.webrtc编译全过程
9.iOS下WebRTC音视频通话(一)
10.iOS下WebRTC音视频通话(二)-局域网内音视频通话
11.WebRTC样本
12.iOS下音视频通信的实现-基于WebRTC
1. WebRTC简介及其与SIP互通
2.SIP和WebRTC有什么不同?
⑺ 用SRS搭建WebRTC流媒体服务器实战
WebRTC经过这么多年的发展,目前已经比较成熟的协议之一,播放也比较稳定,协议也已经成为了RFC,相应的开源项目也越来越多,但是基于WebRTC协议的部署简单,性能强悍,功能强大流媒体服务器的项目还比较稀少。之前了解到的服务器比如Mediasoup,Janus,Medooze ,要么就是设计复杂,接入成本要,要么就是性能较差,还就是多种语言结合,学习成本较高。 而SRS聚焦视频相关,功能专一,语言使用了高性能的c++,并且支持Rtmp转Webrtc等其他强大的功能的媒体服务器。
1.源码编译安装运行SRS
使用这个命令开启RTC支持
2.SRS常用命令
3.配置nginx代理
若不需要浏览器推流,可以不用设置nginx代理,使用localhost访问
注意:your 代表需要配置你自己的域名信息,由于使用浏览器推流必须使用https协议,所以我这边配置了证书
4.访问配置的域名
访问nginx配置的网址 https://webrtc.yourhost.com/
出现如下内容,则服务端架设成功
虽然整片文章看起来不复杂,流程很简单。但是官网的文档中的知识点比较分散,所以大家要想快速的搭建的话就参考我这篇文章