精华内容
下载资源
问答
  • 如果先前的存储库决定再次在版本1.xx上进行工作, easyrtc名为open-easyrtceasyrtc模块的这个分支从版本2.0.0开始。 分叉的主要原因是Priologic Software Inc.一直试图使主要贡献者@hthetiot支付推动将主要问题...
  • easyRtc_master

    2018-12-05 17:44:46
    EasyPlayer是播放RTSP视频的屠龙刀,而EasyPusher又是推送RTSP的倚天剑,那将这两个神兵利器合起来,岂不是很厉害!基于这个思路,我们实现了一款视频对讲APP,称之为EasyRTC
  • EasyRTC 一捆开源的WebRTC喜悦! Priologic的EasyRTC是开源WebRTC的捆绑,它结合了EasyRTC服务器安装和客户端API,以及可运行HTML5和JavaScript,并获得了BSD 2许可下的应用程序源代码。 特征 在数分钟而不是数天...
  • EasyRTC源码,基于web浏览器,支持在线多人视频,语音,文本信息发送等功能,运行环境:node.js
  • EasyRTC总共由五部分软件组成:Web网页模块、手机APP模块、应用接口管理模块、视频直播转发模块和视频会议模块。(企业远程视频通话会议系统EasyRTC安装配置说明) 如上图所示,EasyRTC总体由两方面组成前端和...

    一、方案介绍

    EasyRTC总共由五部分软件组成:Web网页模块、手机APP模块、应用接口管理模块、视频直播转发模块和视频会议模块。(企业远程视频通话会议系统EasyRTC安装配置说明

    968.png

    如上图所示,EasyRTC总体由两方面组成前端和后端。前端主要由Web网页和手机APP组成。后端由应用接口管理软件、视频直播转发软件和视频会议软件组成。

    二、前端功能

    Web网页模块主要使用 Vue.js 编写,为用户提供图形界面,提供管理和进入视频会议、管理视频截图、管理用户、管理录像、查看直播等功能。
    手机APP主要提供进入视频会议、观看直播和回看录像的功能。

    以上两者构成了前端的功能,主要同后端进行信息交互。

    三、后端功能

    应用接口管理软件由Go语言编写,为前端提供Restful接口。目前提供认证接口、视频会议接口、直播接口、录像回看接口、用户管理接口和截图接口六部分接口组成。应用接口管理在收到部分请求后,同视频直播转发软件和视频会议软件进行交互,获取或者更新部分信息。

    视频直播转发软件主要采用C语言编写,主要代理所有的视频会议流,转换成直播流的形式提供给前端使用。

    视频会议软件采用C/C++语言编写,主要提供视频会议功能,前端视频会议等功能主要同此软件进行信息交互。

    四、前后端信息交互说明

    前端和后端之间主要同应用接口管理模块和视频会议模块进行信息交互。
    前端从应用接口管理模块获取管理信息,如用户列表信息、会议列表信息、直播列表信息、录像信息等。

    前端与视频会议模块使用WebSocket进行信息交互,对于前端来说认为直接同视频会议模块进行交互。但是实际上后端所有的WebSocket请求均经过视频直播转发交互模块进行了代理转发。因此前端实际上的请求先发送至视频直播转发模块后,再传递到视频会议模块中。

    969.png

    EasyRTC视频通话会议播放效果:

    EasyRTC.png

    展开全文
  • 视频会议系统之MCU与SFU 一、MCU方案 Multipoint Conferencing Uint硬件的方案,通过...实际上服务器端就是一个音视频混合器,EasyRTC-MCU版使用的就是这个方案。 方案特点 多个用户互动时,首先将多路视频进行混频操

    一、视频会议系统之MCU与SFU

    MCU方案

    Multipoint Conferencing Uint硬件的方案,通过软件的方式代替硬件,该方案由一个服务器和多个终端组成一个星形结构。各终端将自己要共享的音视频流发送给服务器,服务器端会将在同一个房间中的所有终端的音视频流进行混合,最终生成一个混合后的音视频流再发给各个终端,这样各终端就可以看到 / 听到其他终端的音视频了。实际上服务器端就是一个音视频混合器,EasyRTC-MCU版使用的就是这个方案。

    • 方案特点
    • 多个用户互动时,首先将多路视频进行混频操作,比如3路视频,每个人只拿1路。但是CPU混频的时候,非常耗费CPU。如果同时有多个会议,资源消耗更大;
    • 对于用户来说只有一路数据,所以对于带宽影响小;
    • 因为都是混频后的一路数据,没办法对数据进行操作,对于客户端灵活性稍差,如:没办法放大某一个房间等操作;
    • 该方案对带宽的占用率低,对服务器端的压力大,适用于小规模企业用户使用。
      EasyRTC mcu
    • 方案优势
    • 技术非常成熟,在硬件视频会议中应用非常广泛。
    • 作为音视频网关,通过解码、再编码可以屏蔽不同编解码设备的差异化,满足更多客户的集成需求,提升用户体验和产品竞争力。
    • 将多路视频混合成一路,所有参与人看到的是相同的画面,客户体验非常好。

    EasyRTC

    SFU方案

    该方案也是由一个服务器和多个终端组成,但与 MCU 不同的是,SFU 不对音视频进行混流,收到某个终端共享的音视频流后,就直接将该音视频流转发给房间内的其他终端。它实际上就是一个音视频路由转发器。相对而言MCU传输的数据就多了,带宽不够的情况下,很容易影响软件使用,EasyRTC-SFU版使用的就是这个方案。

    • 方案特点

    • 由于是数据包直接转发,参与人观看多路视频的时候可能会出现不同步。相同的视频流,不同的参与人看到的画面也可能不一致;

    • 参与人同时观看多路视频,在多路视频窗口显示、渲染等会带来很多麻烦,尤其对多人实时通信进行录制,多路流也会带来很多回放的困难。总之,整体在通用性、一致性方面比较差;

    • SFU是两种架构方案中优势最明显而劣势又相对较少的一种架构方案。无论是从灵活性上,还是音视频的服务质量、负载情况等方面上,相较MCU方案,SFU都有明显的优势,因此这种方案也被大多数厂商广泛采用,适用于大型会议现场使用;

    • 方案优势

    • 由于是数据包直接转发,不需要编码、解码,对 CPU 资源消耗很小;

    • 直接转发也极大地降低了延迟,提高了实时性;

    • 很大的灵活性,能够更好地适应不同的网络状况和终端类型;

    EasyRTC SFU

    二、企业级视频会议系统的方案选择

    EasyRTC MCU视频会议系统

    采用的是一种传统的中心化架构,每个浏览器仅与中心的MCU服务器连接,MCU服务器负责所有的视频编码、转码、解码、混合等复杂逻辑,每个浏览器只要1个连接,整个应用仅消耗5个连接,带宽占用(包括上行、下行)共10m,浏览器端的压力要小很多,可以支持更多的人同时音视频通讯,比较适合多人视频会议。但是MCU服务器的压力较大,需要较高的配置。如果50人以下,且带宽有限,选择MCU比较适合。
    EasyRTC

    目前在产品设计上主要作为一对一、一对多音视频交互使用,因其对服务器要求比较高,适合中小企业场景使用,同时系统支持私有化部署、提供API接口调用,可以直接用于调度指挥、视频对讲、户外作业、现场勘测等项目中。

    目前已应用于:***海关稽查项目、勘测项目、安徽省工程部户外作业项目等。

    MCU的EasyRTC

    EasyRTC SFU视频会议系统

    此方案仍然有中心节点服务器,但是中心节点只负责转发,不做太重的处理,所以服务器的压力会低很多,配置也不象MCU要求那么高。但是每个端需要建立一个连接用于上传自己的视频,同时还要有N-1个连接用于下载其它参与方的视频信息。所以总连接数为5*5,消耗的带宽也是最大的,如果每个连接1M带宽,总共需要25M带宽,它的典型场景是1对N的视频互动。

    EasyRTC视频会议系统
    目前在产品定位上主要作为大中型、集团化企业的视频会议系统,产品功能上增加了自适应码流、国外节点加速、视频云录制、桌面共享、文档共享、举手、主持人/参会人权限、视频分享等功能,无需插件即可进行web端的高效率交流方式。可以应用于企业会议、政务党建、远程培训、远程医疗等。

    SFU视频服务器
    在线视频会议系统

    当会议系统从传统的硬件视频会议系统向云视频会议系统过渡,从社交在线视频会议向线上线下融合的智能会议发展。无论是MCU的视频会议系统还是SFU的视频会议系统,都具备其应用的场景,企业用户可以根据其行业应用场景的需要,选择对应的架构版本;

    更多的视频会议相关的应用技术可以参考www.easyrtc.cn的方案

    展开全文
  • EasyRTC基于WebRTC,凭借多年音视频开发经验并结合实际情况,开发了 基于WebRTC的音视频通讯云平台,提供互动教学、连麦直播、视频会议、指挥调度等多种音视频跨平台解决方案。 WebRTC历史 2010年5月,Go

    WebRTC简介

    WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。EasyRTC基于WebRTC,凭借多年音视频开发经验并结合实际情况,开发了 基于WebRTC的音视频通讯云平台,提供互动教学、连麦直播、视频会议、指挥调度等多种音视频跨平台解决方案。
    WebRTC

    WebRTC历史

    2010年5月,Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎,并改为名为“WebRTC”。WebRTC使用GIPS引擎,实现了基于网页的视频会议,并支持722,PCM,ILBC,ISAC等编码,同时使用谷歌自家的VP8视频解码器;同时支持RTP/SRTP传输等。
    2012年1月,谷歌已经把这款软件集成到Chrome浏览器中。同时FreeSWITCH项目宣称支持iSAC audio codec。

    WebRTC核心API

    WebRTC原生APIs文件是基于WebRTC规格书撰写而成,这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类:

    Network Stream API

    MediaStream:MediaStream用来表示一个媒体数据流。
    MediaStreamTrack:在浏览器中表示一个媒体源。
    RTCPeerConnection:一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。
    RTCIceCandidate:表示一个ICE协议的候选者。
    RTCIceServer:表示一个ICE Server。

    Peer-to-peer Data API

    DataChannel:数据通道(DataChannel)接口表示一个在两个节点之间的双向的数据通道。

    WebRTC音频引擎整体架构

    WebRTC

    在内部实现上,音频引擎VoiceEngineImpl通过一系列对象来实现音频处理,包括VoEAudioProcessingImpl、VoECodecImpl、VoENetworkImpl等等,每个对象负责具体某方面功能,例如VoEAudioProcessingImpl负责调用底层AudioProcessing模块对音频数据进行预处理。在这些功能对象中,比较重要的有VoEBaseImpl、SharedData和Channel。其中VoEBaseImpl是连接音频设备AudioDevice和音频引擎VoiceEngineImpl的纽带,是音频数据流水线上的重要一站;SharedData是一个聚合类,持有一系列重要对象;Channel则代表一路音频数据,负责大部分对该路数据的重要操作,包括音频数据的前处理、编解码、发送和接收、后处理、混音等等。

    从功能依赖上讲,VoiceEngineImpl依赖五个重要的底层功能模块:音频数据采集和播放AudioDeviceModule 、音频数据预处理AudioProcessing、音频数据编解码AudioCodingModule、接收端音频数据缓冲区NetEq、接收端混音AudioConferenceMixer。此外音频数据编解码还依赖一系列音频编解码器如G711、G722、Opus等等。在发送端,音频数据由AudioDevice采集得到,经过AudioProcessing预处理后,到达AudioCodingModule进行编码,然后由RTPRTCP模块发送到网络。在接收端,音频数据经过RTPRTCP模块接收后到达AudioCodingModule,存储在NetEq中进行抖动控制和错误消除,然后解码。解码后的数据经过AudioConferenceMixer进行混音,最终发送到AudioDeviceModule进行播放。

    从整个WebRTC框架结构来看,音频引擎和和视频引擎都位于比较底层的位置,负责音视频数据的采集、编解码、渲染播放等工作。音视频引擎的上一层是多媒体引擎WebRtcMediaEngine2,是对底层音视频引擎VideoEngine的进一步高层抽象,由WebRtcVoiceEngine对VoiceEngine进行封装,WebRtcVideoEngine2对VideoEngine进行封装。
    EasyRTC音视频通讯云平台SDK哪些使用场景用到WebRTC?

    1、在线教育

    EasyRTC基于谷歌WebRTC开放标准打造,超低延迟、全终端覆盖,可以满足各类需求,支持一对一、多对对、共享视频、共享课件、互动交流等功能。

    2、视频会议

    EasyRTC高清流畅的音视频、高安全性、全平台运行、丰富的会议管理功能,支持视频、语音多人会议,适用于会议、培训、互动等多人移动会议。

    3、指挥调度

    EasyRTC高清流畅的音视频、超低延时、指挥有力、资源保障等全面协调的的视频通讯指挥平台,实现现场应急与后方应急指挥中心的实时视频通讯、同步传输、精准调度、各级高效协同。适用于安防监控、智能家居。

    4、互动连麦

    EasyRTC基于RTMP和RTC混合引擎的在线视频连麦互动直播。iOS 直播(网络自适应码率RTMP Pusher)、点播播放器(播放器经过专业优化,可实现秒开RTMP Player)、基于RTMP 和RTC 混合引擎的的视频连麦互动(最多支持四路连麦互动),适用于游戏直播、美女秀场。

    5、语音通话

    EasyRTC支持视频、语音、优先视频等多种呼叫模式,适用于网络电话、活动、教育等多种呼叫场景。

    6、实时直播

    EasyRTC实现快速实时直播,相比RTMP更加快捷,超低延时、极简API接口、超快接入。适用于在线娃娃机、智能硬件、在线医疗、 视频招聘、相亲交友等多种场景。

    详细效果演示可查看:www.easyrtc.cn

    展开全文
  • x_team_webrtc 许多WebRTC演示只是同一浏览器中的“元素”至“元素”。 在这个简单的Node , 和示例中,我们将演示客户端... (2) An EasyRTC server is launched wrapping both a Socket Server and Express. 客户端:
  • EasyRTC视频会议管理系统 EasyRTC视频会议管理系统为一种专门针对视频业务开发的一套管理系统,前端使用Vue.js框架开发,采用Go语言开发。 初步设计 请查看docs / EasyRTC-SFU后台管理程序设计.docx 功能说明 用户...
  • EasyRTC 概览 EasyRTC基于webRTC。WebRTC是W3C/IETF用于浏览器间实时音视频沟通以及数据传输的一个实现方案。WebRTC只需要一个轻量负荷的服务器就可以支持点对点(P2P)间的任何数据传输。 EasyRTC由客户端(浏览器端...
        

    EasyRTC

    概览

    EasyRTC基于webRTC。WebRTC是W3C/IETF用于浏览器间实时音视频沟通以及数据传输的一个实现方案。WebRTC只需要一个轻量负荷的服务器就可以支持点对点(P2P)间的任何数据传输。

    EasyRTC由客户端(浏览器端)的JS库与基于node.js的后端服务器组成。WebRTC已经被各个浏览器(google chrome, firefox, opera, etc)所支持,因此无需额外的浏览器插件。

    Google Chrome对WebRTC的API有着最广泛的支持,Opera现在采用与Chrome相同的内核引擎,因此所有API行为与chrome基本一致。Firefox对WebRTC的Data Channel有着十分良好的实现,但仅提供了基础的视频功能。

    一旦WebRTC被标准化,它将有着巨大的潜能为音视频会议,多用户游戏,以及许多其他的基于音视频,数据传输的应用提供支持。

    如同其他的软件,强大的功能往往伴随着复杂的内部实现。WebRTC有着十分曲折的学习曲线,对开发人员不够友好。为了简化具体的开发流程,我们(Priologic)构建了EasyRTC框架。

    构建一个基于WebRTC的应用通常有如下步骤。

    • 将本地摄像头、麦克风获取到的数据输出成media stream对象
    • 与信令服务器建立连接
    • 通过浏览器与目标用户建立p2p通信
    • 将media stream绑定到<video>

    通过使用EasyRTC,一些步骤可以被简化到一个简单的通信(call)当中,
    能极大地简化开发流程,尤其是当开发人员需要投入更多的精力于多平台支持当中。

    此文档是编写基于WebRTC应用的一个基本教程,但并未包含EasyRTC的所有API。

    术语

    • callbakck(回调函数)
    • Media Stream 浏览器音视频输出对象
    • Peer Connection 点对点连接
    • Server

    安装EasyRTC与获取支持

    EasyRTC的安装十分简单,多数平台可在10分钟内完成。我们提供了Windows,Linux,Mac的安装向导。EasyRTC的源码可在[https://github.com/priologic/...]获取。在doc目录下可以获取到客户端与服务端的所有HTML说明文档

    视频会议

    html 略

    页面载入完成(onload)后调用初始化函数(initialization function)。
    初始化函数的最主要作用是调用EasyRTC.easyApp方法。该方法有如下参数

    • applicationName - String 应用名,如"Company_Chat_Line"
    • self-video-id - String video标签id
    • array-of-caller-video-ids - Array 包含了其他用户(除当前用户)的video标签id
    • successCallback - 连接成功时回调函数

    初始化函数可以使用EasyRTC.setRoomOccupantListener来注册一个回调函数,以用于获取当前已连接到同一房间内的其他用户id,。

    示例:

    function my_init() {
        easyrtc.setRoomOccupantListener(loggedInListener)
        easyrtc.easyApp("Company_chat_line", "self", ["caller"], id => {
        console.info("My id is " + id)
        })
    }

    当用户从"Company_chat_line"连接或断开链接时,easyrtc.setRoomOccupantListener将被调用,该方法的回调函数包含两个参数:

    • String room name
    • Array 连接到相同房间名的用户id

    在我们的示例程序当中,该方法的回调函数将建立一系列用于“拨打”给当前已连接到房间内的其他用户的按钮。

    html 略

    多数情况下可以忽略room_name参数,除非你的应用允许用户同时连接到多个房间。

    在现实的应用当中,我们不会使用easyrtc的默认id当作按钮的label属性。我们将使用类似姓名,职位等建立起与easyrtc id相关联的内容以用作按钮的label属性。

    初始化一个call,我们只需要调用 easyrtc.call 方法,传入目标用户的id,该方法包含三个回调函数:

    • successCallback(id)
    • errorCallback(errorCode, errorText)
    • accepted(wasAccepted, id) 指明该call是否被接受

    示例代码:

    function performCall(id) {
        easyrtc.call(id, id => {
            console.info("completed call to  " + id)
        }, errorMessage => {
            console.error("err: " + errorMessage)
        }, (accepted, bywho) => {
            console.info(accepted ? "accepted" : "rejected" + " by " + bywho)
        })
    }

    html 略

    视频会议(Advanced)

    在上一节,我们大致地描述了构建一个视频会议应用的最简单情形。
    在这一节,我们将进一步深入。

    除了调用easyrtc.easyApp,你也可以调用easyrtc.initMediaSource来直接获取本地设备的media stream,成功之后可以调用easyrtc.connect方法来连接到信令服务器。这也是easyrtc.easyApp的内部实现。

    html略

    注意: easyrtc.getLocalStream和easyrtc.setVideoObjectSrc,前者用于当easyrtc.initMediaSource调用完成,从本地摄像头和麦克风获取media stream,后者用于将media stream与video标签绑定。一起使用便可以十分便携地供用户实时观察到他们自己的图像。

    我们还需要两个其他函数

    • 一个用于提供远程用户的media stream
    easyrtc.setStreamAcceptor((callerId, stream) => {
        let video = document.getElementById("caller")
        easyrtc.setVideoObjectSrc(video, stream)
    })
    • 一个用于检测远程用户是否挂起(离线)。该函数用于清除对应的video标签
        easyrtc.setOnStreamClosed(callerId => {
            easyrtc.setVideoObjectSrc(document.getElementById("caller"), "")
        })

    整个js文件如下

    // 设置远程用户的media stream 的关联video标签
    easyrtc.setStreamAcceptor((callerId, stream) => {
        let video = document.getElementById("caller")
        // 绑定media stream到video标签对象
        easyrtc.setVideoObjectSrc(video, stream)
    })
    
    // 当远程media strem 关闭
    easyrtc.setOnStreamClosed(callerId => {
    // 清除关联的video标签内容
    easyrtc.setVideoObjectSrc(document.getElementById("caller"), "")
    })
    
    // 初始化函数
    function my_init() {
        // 设置监听器,获取当前在线的用户
        easyrtc.setRoomOccupantListener(loggedInListener)
        // 连接成功处理函数
        let connectSuccess = myId => {
            console.info("My easyrtc id is " + myId)
        }
        // 连接失败 创建本地media stream对象失败时调用函数
        let connectFailure = (errorCode, errText) => {
            console.error(errText)
        }
        // 初始化本地media stream
        easyrtc.initMediaSource(() => {
            let selfVideo = document.getElementById("self")
            // 绑定本地media stream 到video tag
            easyrtc.setVideoObjectSrc(selfVideo, easyrtc.getLocalStream())
            // 连接到服务器
            easyrtc.connect("Company_Chat_line", connectSuccess, connectFailure)
        }, 
        connectFailure)
    }
    
    // 当获取到当前房间内在线用户
    function loggedInListener(roomName, otherPeers) {
        let otherClientDiv = document.getElementById("otherClients")
        while(otherClientDiv.hasChildNodes()) {
        // 移除最后一个 “text ”
    otherClientDiv.removeChild(otherClientDiv.lastChild)
        }
        
        for (let i in otherPeers) {
            let button = document.createElement("button")
            // 为每一个远程用户创建一个按钮监听器
            button.onclick = easyrtcId => {
                // 发起连接
                return (easyrtcId) => performCall(easyrtcId)
            }(i)
            
            let label = document.createTextNode(i)
            button.appendChild(label)
            otherClientDiv.appendChild(button)
        }
    }
    
    function performCall(id) {
        easyrtc.call(id, id => {
            console.info("completed call to " + id)
        }, 
        (errorCode, errText) => {
            console.error("err: " + errorText)
        }, 
        (accepted, bywho) => {
            console.info(accepted ? "accepted" : "rejected" + " by " + bywho)
        })
    }

    使用多个本地media stream源

    使用多个media stream的基本思想是,你需要为每个media stream命名。
    当你调用initMediaSource,它的第三个参数便是media stream的名字,
    如:

    easyrtc.initMediaStream(success, failure, yourname)

    如果你没有传入第三个参数,则该media stream会得到一个默认的"default"。

    使用easyrtc.getLocalMediaIds以获取所有本地media stream的名字

    let ids = easyrtc.getLocalMediaIds()
    ids.map(id => console.info(id))

    当你初始化一个call,可以传入一个stream name的数组作为第五个参数,同样的,当你接受call时,你可以传入一个stream name的数组作为accept回调函数的第二个参数。

    easyrtc.call(otherEasyrtcId, successCB, failCB, wasAcceptedCB, ["first_name", "second_name", "etc"])
    
    easyrtc.setAcceptChecker((otherGuy, acceptCallback) => {
        acceptCallback(true, ["first_name", "second_name"])
    })

    你也可以通过使用easyrtc.addStreamToCall向一个已存在的call添加meida stream。该方法接受三个参数,接受stream的id,stream的名字,以及一个optional的回调处理函数。

    注意:EasyApp 框架并不是专门为多media stream而设计的。它的初衷便是假定只有单个本地media stream。
    如果你想使用media stream,那么你就必须自己将这些media stream绑定到video标签。

    屏幕分享

    只使用音频或视频功能

    拒绝远程对话(call)

    EasyRTC允许注册一个在用户每次收到call时都将被调用的函数。该函数接受远程用户的id,以及一个报告函数(reporting function)作为参数,报告函数接受一个参数,true接受对话,false拒绝对话。

    easyrtc.setAcceptChecker( function(easyrtcid, acceptor){
              if( easyrtc.idToName(easyrtcid) === 'Fred' ){
                 acceptor(true);
              }
              else if( easyrtc.idToName(easyrtcid) === 'Barney' ){
                 setTimeout( function(){
         acceptor(true, ['myOtherCam']); // myOtherCam presumed to a streamName
         }, 10000);
              }
              else{
                 acceptor(false);
              }
         });

    加入或离开房间

    Room是EasyRTC的一个隔离(compartmentalize)功能,目的是为用户建立起一个个“chat rooms”。
    房间的行为受服务器安装的EasyRTC Server的配置所影响(详见服务器模块文档)。默认行为如下:

    • 除非用户在连接前指定了所要加入的房间名,否则将会加入默认的“default”房间。
    • 一个用户可以是多个房间的成员
    • 每个用户所加入的任一个房间发生变化时(用户的加入,离开),都会触发roomOccupantListener函数
    • 加入一个不存在的房间将会创建它
    • 加入房间
    easyrtc.joinRoom(roomName, roomParameters, successCallback, failureCallback)

    其中,roomParameters是Application specific(不详),可以为空。joinRoom可以在任何时候调用任意多次,但successCallback, failureCallback只会在成功与信令服务器建立连接之后才会被调用。

    • 离开房间
    easyrtc.leaveRoom(roomName, successCallback, failureCallback)

    leaveRoom的性质同joinRoom

    监听Error

    你可以通过easyrtc.setOnError注册一个error callback用以处理错误。该函数接受一个形如{"errorCode": "errorCode", "errorText": "errorText"}的对象。

    easyrtc.setOnError(errEvent => {
        console.error(errEvent.errorText)
    })

    发送消息

    你可以通过调用easyrtc.sendDataWS来使用websocket通信,

    easyrtc.sendDataWS(destination, messageType, messageData, ackHandler)
    
    easyrtc.sendDataWS("xkxkxkxkxk9c93", "contactInfo", {firstName: "jack", lastName: "smith"}, ackMsg => {
    // ackMsg 为来自服务器的确认信息
        if (ackMsg.msgType === "error") {
            console.error(ackMsg.msgData.errorText)
        }
    })

    注意: 通过websocket通信意味着你指定信息要通过服务器转发

    destination 可以是peer的id,或者是一个指定了一个或多个目标id的js对象,或者房间(详见文档)。
    messageType需要自行指定,ackHandler处理来自服务器的确认信息

    处理来自其他用户的信息:
    easyrtc.setPeerListener((sender_id, msgType, msgData, targeting) => {

    if (msgType === "contactInfo") {
        console.info(sender_id + " is named " + msgData.firstName + " " + msgData.lastName)
    }

    })

    其中,当使用WebRTC的data channel发送数据时,targeting为null,否则为{targetEasyrtcid, targetGroup, targetRoom}当中的一个。

    你也可以为特定的msgType或sender指定监听器,在这种情况下,每次将只有一个监听器会被调用,指定的监听器将被优先调用。

    使用Data Channels

    在使用data channel之前,发送者和接收者都必须启用data channels。

    easyrtc.enableDataChannels(true)

    之后便可监听与特定用户的datachannel的 ready 和 close 事件,

    easyrtc.setDataChannelOpenListener(sourceEasyrtcId => 
        console.info("channel is open ")
    )
    
    easyrtc.setDataChannelCloseListener(sourceEasyrtcid => 
        console.info("channel is close ")
    )

    open监听器被调用之后,便可以通过easyrtc.sendDataP2P来发送消息:

    easyrtc.sendDataP2P(targetEasyrtcid, "contactInfo", {firstName: "jack", lastName: "smith"})

    监听data channels消息与websocket消息一致

    获取当前连接数

    通过easyrtc.getConnectionCount来获取当前用户的连接数,该函数返回一个number

    挂起

    通过easyrtc.hangup(peerId)来挂起与特定用户的连接

    easyrtc.hangupAll()来挂起与所有用户的连接

    与服务器断开链接

    easyrtc.disconnect()
    展开全文
  • easyrtc 官网http://easyrtc.com/ ...2. 查看运行easyrtc 所需要的js 包,在easyrtc 的根目录下面有个package.json 文件 3. 安装运行easyrtc需要的js包(js框架) $ npm installeasyrtc $npm installex...
  • Easy-RTC-Angular-project 通过 grunt 运行快速服务器的 EasyRTC-Angular 示例 安装 安装 跑步 咕噜声 浏览器:本地主机:3000
  • 很多集团化的公司由于在不同城市甚至不同国家有很多分站点,因此远程会议和办公对这些企业来说是十分必要的,EasyRTC恰好适应了这些需求,成为远程会议和通话的不二之选。 我们的研发人员会编译不同版本的EasyRTC...
  • 文凭-服务器-node.js Node.js 服务器,强调 easyrtc、express 和 socket.io
  • 企业视频通话会议系统EasyRTC基于网络架构,各分支机构与总部之间使用IP线路连接,在总部部署服务器提供视频调度指挥服务,能够进行视频会议、远程培训、协同工作等沟通。近期更新的新版本EasyRTC-SFU更是在原有基础...
  • EasyRTC是青犀团队研发的企业视频通话会议系统,基于网络架构,各分支机构与总部之间使用IP线路连接,在总部部署服务器提供视频调度指挥服务,提供总部与各分支机构各种形式的视频会议、远程培训、协同工作等沟通、...
  • 视频远程通话会议系统EasyRTC能够部署在很多不同的系统,我们曾经尝试过编译很多版本的编译,比如freeswitch(1.6.17)windows版本。 最近我们发现在Windows2012操作系统中部署EasyRTC视频会议系统,修改完配置文件...
  • 我们近期在开发EasyRTC视频会议系统的时候,为了能够解决大部分的用户集成和二次开发的问题,让用户以更低的门槛构建自己业务的视频会议系统,我们开发并开源了EasyRTC的视频会议管理系统,EasyRTC的视频会议管理...
  • EasyRTC-SFU软件中,后台管理程序使用 Go 语言开发。在部分应用场景中,为了安全,需要支持 HTTPS 协议。因此整个后台管理程序,需要支持 HTTP 和 HTTPS 同时运行。 在 EasyRTC-SFU 版本中使用 Gin 作为 Web ...
  • EasyRTC管理平台采用基于Java的SSH架构、MCU模式,系统稳定性高,EasyRTC支持会议录播、实时直播,以更流畅的成像和更低的延时给用户带来不同的视频会议体验,真正实现只要能上网,就能参加视频会议的需求。...
  • easyRtc设置视频清晰度的方法

    千次阅读 2017-01-01 23:39:26
    由于开发使用到了视频语音通讯,采用的是基于webRtc封装的easyRtc,通过搭建客户端代码和服务器后,能够正常的进行视频语音通信,但是由于项目对于视频清晰度的要求不高,有的客户端电脑使用的摄像头像素比较高会...
  • 上篇我们讲了利用unli-app框架快速构建EasyRTC-SFU安卓app项目,本文再跟大家深入聊一下unli-app框架构建EasyRTC_SFU安卓app项目服务端代理的配置。 利用unli-app开发app项目时,前端为了方便发送请求需要配置...
  • 近期我们的EasyRTC进行了新的版本修正,开发了MCU版本和SFU版本(MCU与SFU方案的区别是什么),小规模企业用户可选MCU方案,大型会议现场可选SFU方案。 目前我们正在不断对新版的EasyRTC进行测试,修正其问题,...
  • EasyRTC视频会议云服务是TSINGSEE青犀视频团队基于WebRTC技术以及多年的行业技术积累经验,研发的一项覆盖全球的实时音频开发平台。 今天我们将和大家一起分享一项开发技巧:如何对EasyRTC创建新的空分支。 在...
  • 对于EasyRTC视频会议系统的开发,我们研发小伙伴这段时间真的很辛苦,好在最终的结果不错,碰到的问题都一一解决了,并且通过对不同RTC服务的调研,也在不断优化我们的EasyRTC。 比如在 EasyRTC-SFU 的开发过程中...
  • 自我们开始研究网页视频会议通话以来,EasyRTC视频会议通话系统凭借其杰出的音视频质量、强劲完备的数据协作功能、可信的系统性能、高效的大容量设计、开放性的可拓展架构为各种应用场景与模式构建了一个全方位、多...
  • 由于市场上对企业视频通话的需求越来越高,目前市面上的一些视频通话会议系统无法全部兼容所有的要求,为此我们对视频通话会议系统EasyRTC也做了升级更新。 我们的研发人员最近在进行EasyRTC新版调试视频的时候,...
  • TSINGSEE青犀视频EasyRTC视频通话近期进行了改版,分了两个版本:EasyRTC-MCU和EasyRTC-SFU。EasyRTC-SFU方案是直接进行数据转发流,不需要进行解码转码操作,所有的视频控制全部由客户端控制。在使用上,不会像MCU...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 362
精华内容 144
关键字:

EasyRTC