openviduserver的webrtc通讯实现iv

author author     2023-05-02     794

关键词:

参考技术A

a. 在openvidu中,一个激活的会议由kurentoSession实例表示。当创参会者加入会议时,openvidu会创建一个kurentoSession实例。
b. 在kurento服务器上,一个会议由一个pipeLine 和N N个mediaEndpoint表示。N表是参会方数量,每一个参会方会创建一个发布媒体用的MediaElement和(n-1)个订阅其它媒体流用的MediaElement,它们被编排入一个PepleLine中, 形成N N的连接。

所以,当第一个用户加入会议室时,系统会在Openvidu上创建一个KurentoSession实例,同时在Kurento上创建一个pipleLine, KurentoSession 实例引用了这个pipepline. N个用户会有N个kurentoSession, 但只有一个pipleline。PipleLine的描述是在Kurento Client包里。

管理器中另外一个重要的是sessionManager,session代表的是会议,所以sessionMananger 实际就是所有具体会议的管理. 在io.openvidu.server.core包下的SessionManager只是一个虚类,它声明了一些会议的操作方法:

这些方法都和会议有关, 可以发现,上面的功能通常对应我们音视频软件进入会议室的功能。

开openvidu中,它的具体的实现是KurentoSessionManager,它会在server启动的时候初始化。
在III中说了,sessionid 代表的会议号,创建会议的时候会创建一个sessionNotActive(Session类)对象,代表的是还未正式使用的会议,当第一个用户首次加入的时候,才会正式使用这个会议,KurentoSessionManager的joinRoom方法描述了相关的逻辑。
与sessionNotActive不同,一个开始使用的会议用KurentoSession来表示(继承自Session),首次加入会议, 需要创建这个Ksession, 它会指定一个具体的Kurrento Server,ksession的创建需要指定具体kms,用来表示在具体哪个KMS创建会议。社区版实际上只有一个KMS,但在实现上如下图, 已经默认使用获取最小负载的方式获得kms。

sessionManager对外提供会议操作功能的统一入口,每个会议对应的kurentoSession负责实际与kurento server的通信,来完具体的会议操作。所以在kurentoSession中我们可以看到相类似的会议功能定义:

上图是一个包含有浏览器、application 、 openvidu server, 、kurento server 等在内的一个逻辑通讯图。
浏览器端加载会议应用程序,通过http协议与application server通信,完成业务请求和获取用于会议的token和sessionID.
applicaiton server只负责业务请求,它通过与openvidu server通信来生成浏览器客户端加入会议需要的token和sessionID信息。
浏览器获取token和sessionid后,与openvidu建立websocket连接,它将openvidu作为webrtc中的singal server,与openvidu通信,完成建立webrtc所需要的singal通信。
与webrtc中描述的P2P通讯不同,kurento server 充当代理,与每一个参与方建立p2p连接,通过创建pipleline和编排media endpoint完成多方的通讯。 但是Kurento Server与任意参与方建立的通讯仍旧是P2P通讯。所以,浏览器会与kurento server建立webrtc连接。 他们的通讯默认是RTP over UPD, 也可以是RTP over TCP。
openvidu与kurento也是通过websocket连接进行通讯的,与kurento的通信包含两个方面:
a. 作为控制方,创建pipleline,根据加入的用户创建media endpoint, 并编排他们。
b。 作为信号服务器, 与Kurento进行webrtc连接时需要的信号通讯:例如发送sdp, icecandidate,sdp响应等,由于kurento并不是浏览器端,Sdp answser的创建,也是由openvidu完成的。
Openvidu与Kurento之间的通讯编码使用json RPC方式。 kurento 提供了client 包,方便opnvidu 实现rpc调用。

4.1 PipleLine
org.kurento.client包里包含一个pipleLIne类,它代表kurento server上的media pipleLine元素; 前面已经提到,一个会议对应一个kurencto pipleLine。而在openvidu中kurentoSession代表一个会议,它包含有一个pipleliene属性:
private MediaPipeline pipeline;
在首个用户加入会议的时候,会创建PipleLine实例:

查看createPipeline方法可以看到,pipleLine使用kurentoclient来创建的。
kms.getKurentoClient().createMediaPipeline(...)
PipleLine创建好一个,将作为会议的具体Rpc对象负责其它对象的创建和方法调用。

4.2 MediaEndpoint,publisherEndpoint、SubscriberEndpoint
openvidu里定义了一个个类:MediaEndpoint。 它对应的是kurento server上MediaElement的抽象,下图是Kurento上的元素概念:

在MediaEndpoint类中,定义了三个endpoint属性,代表三种连接类型:
···

···
WebRtcEndpoint 、RtpEndpoint 、PlayerEndpoint 这三个类来自kurent client包,代表JSonrpc的客户端类,在上图的kurento元素中能够找到对应的元素。
MediaEndpoint对三个类做了风中,使用endpointType来表示当前是那种类型(也就是哪个引用有值)。它有两个子类publisherEndpoint和SubscriberEndpoint,分别表示一个用于publish的mediaElement 和用于subscribe的mediaElement 。 在前文提到, openvidu的会议在kurento server上表示N*N 模型的media element关系, Server会为每一个参会者创建一个用于音视频发布的mediaElement 和(n-1)个用于订阅其它用户发布的音视频的media element,publisherEndpoint和SubscriberEndpoint对应的就是这个概念。
无论publisherEndpoint和SubscriberEndpoint是WebRtcEndpoint 、 RtpEndpoint,PlayerEndpoint中的哪个类型,它们封装的rpc对象都由 pipeline创建。

4.3 KurentoParticipant
openvidu中的KurentoParticipant类代表的是参会方(不同于我们平时理解的用户),每个用户加入会议后才会创建KurentoParticipant,在 "3.Openvidu Server与WebRTC的通信" 的示例图中表征的是一个浏览器与Kurento server的连接。一个用户可以打开多个浏览器页面,每个加入会议的页面实际上都代表一个KurentoParticipant。
KurentoParticipant没有具体的JsonPRC对象,相反它拥有一个PublisherEndpoint和
一组subscribers,它们在kurento server刚好表示一个会议参与方:

由于KurentoParticipant代表的是会议的参会方,这个类中定义了几乎所有与publisher和subscribers 有关的操作:

4.4 KurentoSession
KurentoSession 代表的是一个会议,在kurento上对应的是pipeline mediaElement,但它不属于JsonRPC对象,它对pipeline mediaElement的操作是由PipleLine Jsonrpc对象来完成的,所以它包含由pipeline属性:

这个类中定义了很多会议操作的方法:

浏览器客户端在创建连接获取token和session时,并不会直接创建KurentoSession,默认的只会创建一个session对象,并把它放在sessionNotActive组里。当用户Join会议的时候(调用 KurentoSessionManager.joinRoom(Participant participant, String sessionId, Integer transactionId) ),才会创建KurentoSession 实例。

8┃音视频直播系统之webrtc信令系统实现以及通讯核心并实现视频通话(代码片段)

...播领域发生了翻天覆地的变化,尤其是2011年Google推出WebRTC技术后,大大降低了音视频技术的门槛,你再也不必自己去实现回音消除算法了,也不用自己去实现各种音视频的编解码器了,更不必去考虑跨平台的... 查看详情

如何实现即时通讯开发实时音视频聊天功能

...补齐这方面的技术短板相当困难,而开源音视频工程WebRTC提供了这样一个捷径(包括笔者公司的产品在内,同样是基于WebRTC技术才得以达成)。 WebRTC(WebReal-TimeCommunication)是Googl 查看详情

webrtc是如何实现音视频的录制(代码片段)

...题;再也不怕面试了2.腾讯Android开发笔记一丶什么是webRTC“WebRTC(WebReal-TimeCommunications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下, 查看详情

webrtc源码用啥语言编写

...个合适的版本就可以了。【点击免费试用,0成本启动】WebRTC实现了基于网页的视频会议,标准是WHATWG协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-TimeCommunications(RTC))能力。WebRTC(WebReal-TimeCommunication)... 查看详情

一文带你了解webrtc基本原理(动手实现1v1视频通话)(代码片段)

webrtc(WebReal-TimeCommunications)是一个实时通讯技术,也是实时音视频技术的标准和框架。大白话讲,webrtc是一个集大成的实时音视频技术集,包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于... 查看详情

如何实现webrtc多人视频直播会议?

参考技术Awebrtc多人视频直播会议推荐ZEGO即构科技。只需4行代码,30分钟在APP、Web和小程序等应用内实现视频通话、语音通话,互动直播功能。【点击免费试用,0成本启动】webrtc多人视频直播会议实现原理:1、服务端是用C++配... 查看详情

即时通讯开发之实时音视频技术的整体架构

WebRTC,名称源自网页实时通信(WebReal-TimeCommunication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购GlobalIPSolutions公司而获得的一项技术。WebRTC提供了实时音... 查看详情

即时通讯开发之实时音视频技术的整体架构

WebRTC,名称源自网页实时通信(WebReal-TimeCommunication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购GlobalIPSolutions公司而获得的一项技术。WebRTC提供了实时音... 查看详情

使用html5新支持的搭建webrtc环境来作为视频通讯

发现如果再重新设计这块的话,又会有不同的思路。对于可定位能力,我们可以全息日志采集,将每个用户在整个系统的走向异步的抓取下来,再同步到专门的日志分析系统,在这个系统中可以根据用户号码、订单号进行过滤分... 查看详情

windows远程桌面实现之十三:浏览器客户端使用webrtc传输,以及webrtc和mse渲染显示(代码片段)

                byfanxiushu2022-01-17转载或引用请注明原始作者。在前面阐述windows远程桌面实现的一系列文中,其实主要阐述的内容是如何采集桌面图像和电脑声音为主,包括windows下的各种采集方式,linux平台&#x... 查看详情

求tomcat+java实现的webrtc的demo

一定要可运行的,网上有个就是运行不了。万分感谢!!!参考技术A安装好tomcat,然后打开http:\\\\localhost:8080,能打开就行,再用myeclipes建立一个web工程,配置一下tomcat就能打开了。推荐选择ZEGO即构科技,该公司拥有4行代码,3... 查看详情

webrtc概念简介

参考技术AWebRTC(WebReal-TimeCommunication)。Real-TimeCommunication,实时通讯。WebRTC能让web应用和站点之间选择性地分享音视频流。在不安装其它应用和插件的情况下,完成点对点通信。WebRTC背后的技术被实现为一个开放的Web标准,并在... 查看详情

线上分享webrtc传输与服务质量

...讯技术得到了迅猛发展。在音视频实时通信技术中,WebRTC无疑是最闪亮的一颗星。尤其是在WebRTC1.0规范加入到W3C和IETF标准之后,使得用户通过浏览器就可以非常方便的进行音视频实时通话了。然而上层的易用性,是We... 查看详情

零基础快速入门webrtc:基本概念关键技术与websocket的区别等

本文主要分享了WebRTC的基本概念、关键技术术语(包括NAT、STUN、TURN、ICE、SDP和信令),着重讲解了WebRTC是如何实现P2P通信以及WebRTC信令的作用,同时讨论了WebRTC在技术上的优势和劣势,最后还提供了一个简单的WebRTCDemo代码。本... 查看详情

一文带你了解webrtc基本原理(动手实现1v1视频通话)(代码片段)

webrtc(WebReal-TimeCommunications)是一个实时通讯技术,也是实时音视频技术的标准和框架。大白话讲,webrtc是一个集大成的实时音视频技术集,包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传... 查看详情

关于在hololens上使用微软的mixedreality-webrtc实现音视频通话(代码片段)

前言记录使用MRWebRTC在HoloLens2上制作音视频通讯功能。以下是官方说明文档:https://microsoft.github.io/MixedReality-WebRTC/manual/unity/helloworld-unity.html安装及使用这是MixedReality-WebRTC的Github上的库文件,链接:https://github.com/microso... 查看详情

是否有任何允许视频录制的 WebRTC 实现?

】是否有任何允许视频录制的WebRTC实现?【英文标题】:ArethereanyWebRTCimplementationsthatallowforvideorecording?【发布时间】:2012-03-0718:23:22【问题描述】:根据thisquestion,WebRTC显然已经在FireFox、Chrome和Opera的开发版本上部分实现。但是... 查看详情

easyrtc实现基于webrtc技术实现的即时通信类应用

WebRTC简介WebRTC,名称源自网页即时通信(英语:WebReal-TimeCommunication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W... 查看详情