Kurento Utils JS

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

概述

Kurento Utils是RTCPeerConnection的包装器对象。 此对象旨在简化基于WebRTC的应用程序的开发。

该项目的源代码可以从GitHub存储库克隆。

怎么使用它

  • Minified file - 点击这儿下载.
  • NPM - NodeJS 中安装使用.
npm install kurento-utils
var utils = require('kurento-utils');
  • Bower - 生成的 bundled 脚本文件
bower install kurento-utils

导入库到您的html页面

<script src="bower_components/kurento-utils/js/kurento-utils.js"></script>

Examples

有几个教程展示了使用Java,Node和JavaScript开发的完整WebRTC应用程序中使用的kurento-utils。 这些教程在GitHub中,您可以随时下载和运行它们。

  • Java - https://github.com/Kurento/kurento-tutorial-java

  • Node - https://github.com/Kurento/kurento-tutorial-node

  • JavaScript -https://github.com/Kurento/kurento-tutorial-js

在下面几行中,我们将演示如何使用库来创建RTCPeerConnection,以及如何协商与另一个对等体的连接。 库提供了一个WebRtcPeer对象,它是浏览器的RTCPeerConnection API的包装器。 对等连接可以是不同类型:单向(仅发送或接收)或双向(发送和接收)。 以下代码显示如何创建后者,以便能够发送和接收媒体(音频和视频)。 代码假设在加载脚本的网页中有两个视频代码。 这些标签将用于显示由您自己的客户端浏览器捕获的视频,以及从其他对等方接收的媒体。 构造函数接收一个属性,该属性包含配置所需的所有信息。

 var videoInput = document.getElementById('videoInput');
 var videoOutput = document.getElementById('videoOutput');

 var constraints = {
     audio: true,
     video: {
       width: 640,
       framerate: 15
     }
 };

 var options = {
   localVideo: videoInput,
   remoteVideo: videoOutput,
   onicecandidate : onIceCandidate,
   mediaConstraints: constraints
 };


var webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options, function(error) {
      if(error) return onError(error)

      this.generateOffer(onOffer)
});

有了这个小代码,库负责创建RTCPeerConnection,并在浏览器中调用getUserMedia(如果需要)。若constraints属性在调用中使用,在这种情况下,将使用麦克风和网络摄像头。但是,这不会创建连接。这只有在完成对等体之间的SDP协商之后才能实现。这个过程意味着交换SDP提供和回答,并且由于使用了Trickle ICE,描述每个对等体的能力的多个候选者。谈判的工作原理超出了本文件的范围。更多信息可以在这个链接中找到。

在上一段代码中,当webRtcPeer对象被创建时,使用this.generateOffer(onOffer)生成SDP。传递的唯一参数是一个函数,它将在浏览器的对等连接生成该提议时调用。 onOffer回调方法负责通过您的应用程序中设计的任何方法将此提议发送给其他对等方。由于这是每个特定应用程序的信令面和业务逻辑的一部分,因此本文档中将不涉及。

假设SDP提议已经被远程对等体接收到,则它必须已经生成SDP应答,该SDP应答应该被接收。此回答必须由webRtcEndpoint处理,以便完成协商。这可以是onOffer回调函数的实现。我们假设在范围中有一个函数,允许发送SDP到远程对等体。

function onOffer(error, sdpOffer) {
  if (error) return onError(error);

  // We've made this function up sendOfferToRemotePeer(sdpOffer,
  function(sdpAnswer) {
    webRtcPeer.processAnswer(sdpAnswer);
  });
}

正如我们之前所说的,库假设使用Trickle ICE来完成两个对等体之间的连接。 在webRtcPeer的配置中,有一个对onIceCandidate回调函数的引用。 库将使用此函数将ICE候选项发送到远程对等体。 由于这是每个应用程序的特性,我们将只显示签名。

function onIceCandidate(candidate) {
  // Send the candidate to the remote peer
}

反过来,我们的客户端应用程序必须能够从远程对等体接收ICE候选。 假设信令关注接收那些候选,则足以在webRtcPeer中调用以下方法来考虑ICE候选。

webRtcPeer.addIceCandidate(candidate);

按照前面的步骤,我们有:

  • 发送SDP,提供给远程对等体
  • 从远程对等体接收到SDP应答,并让webRtcPeer进程回答。
  • 在对等体之间交换ICE候选者,通过发送在浏览器中生成的ICE候选者,以及处理由远程对等体接收的候选者。

完成协商过程,并且应该让我们在两个对等体之间进行有效的双向WebRTC媒体交换。

使用 data channels

WebRTC数据通道允许您通过活动的WebRTC连接发送文本或二进制数据。 WebRtcPeer对象可以通过使用RTCDataChannel形式的RTCPeerConnection对象来提供对此功能的访问。 这允许您注入和使用管道中的数据。 这些数据可以被不同的每个端点处理。 例如,浏览器中的WebRtcPeer对象将具有与RTCDataChannel相同的行为(您可以在此处查看说明)。 其他端点可以利用该信道来发送信息:检测视频流中的QR码的过滤器可以通过数据信道将检测到的码发送给客户端。 这个特殊的行为应该在过滤器中指定。

通过在选项包中传递dataChannels标志以及所需的选项来指示WebRtcPeer对象中数据通道的使用。

var options = {
     localVideo : videoInput,
     remoteVideo : videoOutput,
     dataChannels : true,
     dataChannelConfig: {
       id : getChannelName(),
       onmessage : onMessage,
       onopen : onOpen,
       onclose : onClosed,
       onbufferedamountlow : onbufferedamountlow,
       onerror : onerror
     },
     onicecandidate : onIceCandidate
 }

 webRtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options, onWebRtcPeerCreated);

dataChannelConfig中的值都是可选的。 一旦webRtcPeer对象被创建,并且在成功协商连接之后,用户可以通过数据通道发送数据。

webRtcPeer.send('your data stream here');

您要发送的数据的格式由应用程序以及您使用的端点的定义决定。

底层RTCDataChannel的生命周期与webRtcPeer的生命周期相关:当调用webRtcPeer.dispose()方法时,数据通道将被关闭并释放。

文档参考

WebRtcPeer

WebRtcPeer的构造函数是WebRtcPeer(mode,options,callback)其中:

  • mode:配置PeerConnection的模式。 有效值为:

    recv:只接收媒体。

    send:只发送媒体。

    sendRecv:发送并接收媒体。

  • options:它是一组参数,它们是可选的。 它是一个json对象。

    localVideo:应用程序中本地流的视频标记。

    remoteVideo:应用程序中远程流的视频标记。

    videoStream:提供已经可用的视频流,而不是使用来自本地网络摄像头的媒体流。

    audioStreams:提供已经可用的音频流代替使用来自本地麦克风的媒体流。

    mediaConstraints:定义视频和音频的质量。

    connectionConstraints:根据浏览器定义连接约束,如googIPv6,DtlsSrtpKeyAgreement ...

    peerConnection:使用以前创建的peerConnection

    sendSource:将使用哪个源

      - webcam
    
      - screen
    
      - window
    

    onstreamended:当流结束事件发生时将被调用的方法

    onicecandidate:当冰候选事件发生时将被调用的方法

    oncandidategatheringdone:当所有候选项都已被收集时将调用的方法

    dataChannels:启用数据通道使用的标志。 如果为true,那么将在RTCPeerConnection对象中创建一个数据通道。

    dataChannelConfig:这是一个JSON对象,该配置通过DataChannel传递并创建。 它支持以下键:

      -id:指定数据通道的id。 如果没有指定,将使用WebRtcPeer对象的相同id。
    
      -options:传递给数据通道构造函数的选项对象。
    
      -onopen:在数据通道的onopen事件中调用的函数,当通道打开时触发。
    
      -onclose:在数据通道的onclose事件中调用的函数,当数据通道关闭时触发。
    
      -onmessage:在数据通道的onmessage事件中调用的函数。 每次接收到消息时触发此事件。
    
      -onbufferedamountlow:当接收bufferedamountlow事件时调用事件处理程序。 当RTCDataChannel.bufferedAmount下降到小于或等于RTCDataChannel.bufferedAmountLowThreshold属性指定的量时,将发送此类事件。
    
      -onerror:当数据通道产生错误时,调用回调函数。 如果没有提供,将在浏览器控制台中记录错误跟踪消息。
    

    simulcast:指示是否要使用联播。 值为true | false

    configuration:它是一个JSON对象,ICE服务器定义使用

      -iceServers:此变量的格式如下:
      [{"urls":"turn:turn.example.org","username":"user","credential":"myPassword"}]
      [{"urls":"stun:stun1.example.net"},{"urls":"stun:stun2.example.net"}]
    
  • callback:它是一个指示回调函数,判断一切正常与否。

还有3种特定的方法来创建WebRtcPeer对象而不使用mode参数:

-WebRtcPeerRecvonly(options, callback): 创建一个只接收的WebRtcPeer。

-WebRtcPeerSendonly(options, callback): 创建一个只发送的WebRtcPeer。

-WebRtcPeerSendrecv(options, callback): 创建一个发送和接收的WebRtcPeer。

MediaConstraints

MediaConstraints提供了通用的界面控制,允许应用程序为轨道选择适当的源,并且一旦选择,就影响源如何操作。 getUserMedia() 使用MediaConstraints来帮助轨道选择适当的源并配置它。 有关MediaConstraints及其值的详细信息,可以在此处查看。

默认情况下,如果mediaConstraints未定义,当调用getUserMedia时将使用此约束:

{
  audio: true,
  video: {
    width: 640,
    framerate: 15
  }
}

如果mediaConstraints有值,库将使用此值来调用getUserMedia。 这取决于浏览器是否接受这些约束。

在示例部分中,有一个关于使用媒体约束的示例。

Methods

  • getPeerConnection

    使用这种方法,用户可以获得peerConnection并直接使用它。

  • showLocalVideo

    使用这个方法显示本地视频

  • getLocalStream

    使用此方法,用户可以获取本地流。 如果此属性为true,则可以使用muted属性来隐藏音频。

  • getRemoteStream

    使用此方法,用户可以获取远程流。

  • getCurrentFrame

    使用这种方法,用户可以获得当前帧并获得具有当前帧的图像的画布。

  • processAnswer

    收到SDP应答时调用回调函数。 开发人员需要调用此功能才能完成SDP协商。 此方法有两个参数:

    • sdpAnswer: sdpAnswer描述
    • callback: 它是一个具有类似错误函数的参数。 当远程描述已成功设置时调用。
  • processOffer

    收到SDP提议时调用回调函数。 开发人员需要调用此功能才能完成SDP协商。 此方法有两个参数:

    -sdpOffer: sdpOffer描述 -callback: 它是一个具有类似错误函数的参数。 当远程描述已成功设置时调用。

  • dispose

    此方法释放WebRtcPeer使用的资源。

  • addIceCandidate

    在接收ICE候选时调用回调函数。 开发人员需要调用此功能才能完成SDP协商。 此方法有两个参数:

    -iceCandidate: 文本对象与ICE候选描述 -callback: 它是一个具有类似错误函数的参数。 当远程描述已成功设置时调用。

  • getLocalSessionDescriptor

    使用这种方法,用户可以获得对等体连接的本地会话描述符。

  • getRemoteSessionDescriptor

    使用这种方法,用户可以获得对等连接的远程会话描述符。

  • generateOffer

    创建用于查找具有指定配置的远程对等项的请求。

如何做屏幕共享

屏幕窗口共享取决于私有模块kurento-browser-extensions。 要启用它的支持,您需要手动安装包依赖关系或在运行时自己提供getScreenConstraints函数。 在创建WebRtcEndpoint之前,sendSource选项可以是窗口或屏幕。 如果它不可用,当您试图共享屏幕或窗口内容将抛出异常。

Souce code

源代码托管在GitHub

确保在您的系统中安装了Node.js和Bower:

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
sudo npm install -g bower

安装库,建议从NPM镜像库执行此操作:

npm install kurento-utils

或者,您可以使用Git下载代码,并手动安装其依赖关系:

git clone https://github.com/Kurento/kurento-utils
cd kurento-utils
npm install

Build for browser

下载项目后,要构建浏览器版本的库,您只需要执行grunt任务。 所需的文件将在dist文件夹中生成。 或者,如果您没有全局安装,您可以通过执行以下命令来运行本地副本:

cd kurento-utils
node_modules/.bin/grunt

转载于:https://my.oschina.net/997155658/blog/840771

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kurento Utils JS 的相关文章

  • 阿里云服务器(Ubuntu18.04版本)中安装Kurento流媒体服务器

    阿里云服务器 xff08 Ubuntu18 04版本 xff09 中安装Kurento流媒体服务器 一 安装coturn穿透服务器二 kurento Media Server KMS 卸载 安装 配置 一 安装coturn穿透服务器 具体如
  • 基于Kurento搭建视频聊天

    测试 turn 192 168 0 143 3478 kurento kurento 启动项目 cd kurento tutorial java master kurento hello world cd kurento tutorial
  • webrtc-kurento

    WebRTC 呼叫者通过 navigator mediaDevices getUserMedia en US 捕捉本地媒体 呼叫者创建一个RTCPeerConnection 并调用 RTCPeerConnection addTrack 注
  • Kurento Java Tutorial - Hello World

    Kurento Java Tutorial Hello World 这个web应用程序是为Java开发人员介绍用Kurento编程的原则而设计的 它包含一个WebRTC镜像视频通信 xff08 环回 xff09 本教程假设您具备Java J
  • 基于kurento-media-server 搭建流媒体服务器

    关于webrtc 是做什么的 xff0c 网上有很多介绍就不多说了 我的需求是通过webrtc的开源实现 xff0c 搭建本地的流媒体服务器 xff0c 进行rtsp视频流转发 xff0c 如果可以再叠加一些机器视觉的内容 本篇内容主要解决
  • torch.utils.data.dataloader参数collate_fn简析

    torch utils data DataLoader是pytorch提供的数据加载类 xff0c 初始化函数如下 xff0c torch utils data DataLoader dataset batch size 61 1 shuf
  • 利用 imu_utils 标定 imu

    目录 前言 一 安装 imu utils 二 编译出现的错误 三 操作步骤 四 结果 前言 记录利用 imu utils 标定 imu xff0c 最近在使用imu做导航 xff0c 要对imu进行标定 xff0c 使用标定得到的加速度的噪
  • React直接渲染从后台传过来的标签

    在工作中使用react 遇到需要渲染从后台获取到的标签语言 发现直接放在react中是不能解析标签语言的 解决办法如下 var content strong content strong 假设content是从接口获取到的数据 react
  • 根据字节大小分割字符串(java)

    public List
  • Kafka工具类

    package com cnic utils import org apache flink api common serialization SimpleStringSchema import org apache flink api c
  • map与java bean相互转换

    map与java对象的相互转换 1 使用org apache commons beanutils转换 2 使用Introspector转换 3 使用reflect转换 4 使用net sf cglib beans BeanMap转换 5 使
  • 三个基于WebRTC开源MCU框架的横向对比

    1 licode 官网地址 http lynckia com licode index html 官方demo地址 https chotis2 dit upm es Github地址 https github com lynckia lic
  • 需要澄清 Kurento 的 API 将 webRTCEndpoint 连接到 RTPEndpoint

    我正在尝试使用 Kurento 的 webRTCendpoint 到 RTPendpoint 的桥接 webRTCendpoint 客户端是 Chrome 浏览器 RTPendpoint 客户端是 SIP 服务器 代理 B2BUA 这是我的
  • 事件未到达 kurento java 服务器

    我是 Kurento 媒体服务器的新手 我正在尝试将事件从 kurento 媒体服务器发送到我拥有的 java 应用程序 我使用以下步骤创建了一个事件 编辑了interfacejson 文件 events properties name T
  • Kurento安装未满足的依赖关系

    我正在尝试在 Ubuntu Trusty 14 04 中安装最新稳定版本的 Kurento V 6 0 不幸的是 我收到了陌生人的消息 Output The following packages have unmet dependencie
  • 如何使用 kurento-media-server 进行纯音频流?

    我只想在对等点之间进行音频流通信 我更改了 kurento utils js 的部分以通过 getusermedia 仅获取音频流 但它不起作用我用这个例子节点你好世界 https github com Kurento kurento tu
  • Safari不派冰候选人

    在 Safari 中不起作用的示例 https github com Kurento kurento tutorial node tree master kurento one2many call https github com Kure
  • 在 lubuntu 15.04 上构建 Kurento

    我正在尝试在我的 lubuntu 15 04 上构建整个 Kurento 与 ubuntu 15 04 相同 但 UI 不同 我首先克隆所有存储库 mkdir kurento cd kurento git clone https githu
  • 了解 WebRTC 中的 SFU、TURN 服务器

    如果我正在构建 WebRTC 应用程序并使用选择性转发单元媒体服务器 这是否意味着我不需要 STUN TURN 服务器 据我了解 STUN 服务器用于客户端发现其公共 IP 端口 而 TURN 服务器用于当客户端无法通过 STUN 直接相互
  • 在 Android 上使用 WebRTC 实现 Kurento 客户端

    我正在尝试在支持 API 22 的 Android 设备上实现 WebRTC 并且正在尝试连接到 Kurento 媒体服务器以建立媒体服务器功能 对于我的应用程序服务器层 我尝试使用基于 Tomcat 的 Java 服务器 这正在实现 Ku

随机推荐

  • ubuntu制作本地源

    背景 平时apt get install安装软件时 xff0c 下载的deb文件都会存放在 var cache apt archives 下 xff0c 为了今后重装或给别人用 xff0c 特别是没有网络时 xff0c 这些deb文件实际上
  • linux平台下远程桌面服务器的安装和设置

    系统 ubuntu 9 04 redhat centos 说明 xff1a 使用 xdm xff08 gdm kdm xff09 时 xff0c 使用的是UDP 177端口进行广播 xff0c 只适合布署在单一子网内 xff0c 如要在多个
  • Oracle的常见错误及解决办法

    ORA 12528 TNS listener all appropriate instances are blocking new connections ORA 12528问题是因为监听中的服务使用了动态服务 实例虽然启动 xff0c 但
  • java swap空间_故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题...

    背景起因 xff1a 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行 没经历过大并发考验 xff0c 然而在一次活动后 xff0c 人数并发一上来后 xff0c 系统开始卡 我按经验开始调优 xff0c 在每个关键步
  • 微信开发者工具配置服务器信息,微信开发者中心如何配置

    微信开发者中心配置是怎么样的呢 xff0c 那么微信开发者中心又是如何配置的呢 下面是学习啦小编收集整理的微信开发者中心如何配置 xff0c 希望对大家有帮助 微信开发者中心配置的方法 工具 原料 一台电脑和一个微信公众号 需要再SEA上部
  • Zabbix使用ICMP ping监控网络状况

    xff08 一 xff09 简述 xff1a Zabbix在监控网络的时候需要查看ping包的丢失率和响应时间 xff0c 而zabbix模块也有改模块 xff0c 名称为 xff1a Template Network ICMP Ping
  • 负载均衡集群HAProxy讲解篇

    负载均衡集群 HAProxy 讲解篇 一 HAProxy组成部分 Haproxy配置中分成五部分内容 xff0c 当然这些组件不是必选的 xff0c 可以根据需要选择作为配置 1 global xff1a 参数是进程级的 xff0c 通常和
  • iOS UIBezierPath类 介绍

    使用UIBezierPath类可以创建基于矢量的路径 xff0c 这个类在UIKit中 此类是Core Graphics框架关于path的一个封装 使用此类可以定义简单的形状 xff0c 如椭圆或者矩形 xff0c 或者有多个直线和曲线段组
  • ProxmoxVE 使用

    PromoxVE简介 支持 KVM OpenVZ 安装简单 WEB管理界 非常简单好用 需要注意的一点 KVM需要主板虚拟化支持 要开启主板BIOS上的虚拟化支持 PVE cluster create 多台物理机器 PVE2 0以后创建 c
  • iOS app性能优化的那些事

    iPhone上面的应用一直都是以流畅的操作体验而著称 xff0c 但是由于之前开发人员把注意力更多的放在开发功能上面 xff0c 比较少去考虑性能的问题 xff0c 可能这其中涉及到objective xff0d c c 43 43 跟lu
  • Shell生成随机密码

    tr参数 c或 complerment xff1a 取代所有不属于第一字符集的字符 xff1b d或 delete xff1a 删除所有属于第一字符集的字符 xff1b 1 生成10个小写字母 root 64 kafka60 shell l
  • 如何安装与连接MySQL?

    本文用详细的步骤说明 xff0c 帮助你一步步掌握MySQL的下载 安装和服务启动 xff0c 客户端的安装 连接和测试 帮你避开初学MySQL使用中的那些坑 需求 这是一个大数据时代 如果你开发一个大规模并发网络应用 xff0c 或者需要
  • 如何在win10系统上安装linux子系统

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 对于软件开发人员来说 xff0c linux基本上是一个绕不过去的槛 因为工作经常要用到linux xff0c 电脑用纯linux还是windows 43 虚拟机装linu
  • debian9服务器系统,如何安装Debian 9(Stretch)最小服务器

    本教程将介绍如何安装Debian 9 Stretch 最小服务器 本指南的目的是提供一个最小的Debian设置 xff0c 可以作为我们其他Debian 9教程的基础 xff0c 以及在howtoing com上完美的服务器指南 1要求 要
  • 为什么在计算机里打开U盘会闪退,U盘闪退怎么办?

    萌妮i 回答数 xff1a 80 被采纳数 xff1a 95 2018 10 09 08 30 27 U盘病毒会在U盘的根目录下生成两个文件 xff1a autorun inf和runauto 两个文件 这两个文件是有隐藏属性的 怎样显示隐
  • iOS指定程序启动后初始的ViewController

    BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptions Override point for c
  • nginx服务器出现504 gateway time-out怎么解决

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 做网站的同学经常会发现一些nginx服务器访问时候提示504 Gateway Time out错误 xff0c 而出现这种错误有两种情况 xff0c 第一种可能是由于ngi
  • CString 操作指南

    原著 xff1a Joseph M Newcomer 翻译 xff1a littleloach 原文出处 xff1a codeproject xff1a CString Management 通过阅读本文你可以学习如何有效地使用 CStri
  • iOS 触摸事件之双指先后触摸问题的解决

    问题情景的引入 xff1a 在一个画板程序中 xff0c 我定义只能用一个手指的时候 xff0c 才可以画线 xff0c 当有两个手指的时候是不可以进行绘画的 问题初解决 xff1a 那么最简单的我们会想到 xff0c 禁止多点触摸不就可以
  • Kurento Utils JS

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 概述 Kurento Utils是RTCPeerConnection的包装器对象 此对象旨在简化基于WebRTC的应用程序的开发 该项目的源代码可以从GitHub存储库克隆