需要澄清 Kurento 的 API 将 webRTCEndpoint 连接到 RTPEndpoint

2023-12-03

我正在尝试使用 Kurento 的 webRTCendpoint 到 RTPendpoint 的桥接。 webRTCendpoint 客户端是 Chrome 浏览器。 RTPendpoint 客户端是 SIP 服务器(代理/B2BUA)。这是我的基本代码或伪代码(我在我的应用程序服务器中使用 Kurento-client.js):

//On receipt of offer from the WebRTC Browser-Peer
mySignalling.on('sdpOffer', function(sdpOffer) { //Action starts!

  //Create Mediapipeline so that endpoints can be created
  kurentoClient.create('MediaPipeline', function(error, pipeline) {
    pipeline.create('webRtcEndpoint', function(error, myWebrtcEndpoint)  {
      //Get ICE Candidates from webRTC endpoint to send to browser
      mySignalling.on('candidate', function(candidate) {
        myWebrtcEndpoint.addIceCandidate(candidate);
      });
      myWebrtcEndpoint.on('OnIceCandidate', function(event) {
        var candidate = kurento.register.complexTypes.IceCandidate(event.candidate);
        mySignalling.send(candidate); //Send ICE candidate to webRTC browser peer
      });
      pipeline.create('rtpEndpoint', function(error,myRtpEndpoint) {
        myWebrtcEndpoint.connect(myrtpEndpoint,function(error){ });
        myWebrtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) {
          mySignalling.send(sdpAnswer);  //Send answersdp to browser
        });
        myRtpEndpoint.generateOffer(function(error){
          myRtpEndpoint.getLocalSessionDescriptor(function(error, sdpRTP) {
            mySignalling2.send(sdpRTP); //Send SDP to Asterisk as part of SIP INVITE
          });
        });
      });
    });
  });
});

我有几个问题:

  1. 整体结构是否正确?
  2. webRTCEndpoint.gatherCandidates 有什么用?文档说必须在processOffer之后调用。为什么?它如何连接到 addIceCandidate 方法?
  3. RTPendpoint 连接到 webrtcEndpoint,但如何控制 RTPEndpointgenerateOffer 生成 RTP 配置文件?我的意思是,例如,我如何从 RTPEndpoint 获取 RTP/AVPF 而不是 RTP/AVP?如果不是,并且 AVPF 必须映射到 AVP,Kurento 将在从 AVPF 桥接到 AVP 时处理 AVPF 中的“F”。

为了简单起见,我没有添加错误处理、OnIceGatheringDone 事件处理、多用户/会话的配置等。

另一方面,我正在应用程序服务器中构建自己的 SIP 请求并处理 SIP 响应。如果需要,我将更改 RTPEndpoint.generateOffer 生成的 SDP(如果需要)。当我克服最初的障碍时,就会到达这一点!


1)看起来不错。您可以完成WebRtcEndpoint创建之前进行协商RtpEndpoint,如果你愿意的话。另外,您错过了拨打gatherCandidates,这将在您的下一个问题中介绍。

2) gatherCandidates用于向 WebRtcEndpoint 发出信号以开始收集 ICE 候选者。那是滴冰,这是 ICE 协议的优化:候选者在被发现时被发出,并发送到另一个对等点进行探测。这会加快连接时间,因为可以在收集所有候选者之前找到有效的候选者(这可能需要 20 秒或更长时间)。这WebRtcEndpoint需要将候选者发送到远程对等点,而从远程对等点接收到的候选者则使用addIceCandidate方法。如果你打电话gatherCandidates在处理要约或生成答案之前,这些候选人将被添加到 SDP 要约或答案中,并且您将使用 Vanilla ICE。

3) 如果您打算仅使用 RtpEndpoint 进行发送,我建议您提供一个包含您需要的选项的损坏的 SDP,并提供提供的端点进程。例如,如果您要发送到 Wowza,您可以修复 Wowza 媒体服务器期望 RTP 流的 IP 和端口。

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

需要澄清 Kurento 的 API 将 webRTCEndpoint 连接到 RTPEndpoint 的相关文章

  • 如果没有“new”,则无法调用类构造函数

    感谢这个问题已经被问过几次了 但是我遇到的几乎所有情况都是有人试图扩展非本地类的情况 我的情况有所不同 我有一个非常简单的基类 名为CObject如下 export class CObject extends BaseObject cons
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • JQuery datepickers-从开始日期设置结束日期

    使用了两个 Jquery 日期选择器 StartDate 和 EndDate
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • 水平滚动的表格上的“粘性”标题......完全不可能?

    经过过去几个小时的研究后 我开始认为这是不可能的 即使在最新的浏览器上也是如此 HTML table具有水平滚动的元素 带有 粘性 thead在顶部 作为垂直滚动的周围网页的一部分 这是我的尝试 a height 100px backgro
  • 如何立即启动setInterval循环? [复制]

    这个问题在这里已经有答案了 在一个简单的setInterval setInterval function Do something every 9 seconds 9000 第一个动作将在 9 秒后发生 t 9s 如何强制循环立即执行第一个
  • 设置双指缩放时精确的滚动位置

    我正在创建一个地图应用程序 它将标记图像放置在画布上并滚动到它 我正在使用浏览器的捏缩放和滚动来放大 缩小地图 然而 我注意到有一些奇怪的行为 我想知道如何解决它 这有点难以解释 但我们开始吧 假设您处于网页的标准缩放级别 无法进一步缩小
  • 这种类型注释在没有 TypeScript 的 React 代码中如何工作?

    我在看这段代码示例 https reacttraining com react router web example auth workflow在 ReactRouter 页面上 这篇文章很有趣 const PrivateRoute com
  • jQuery输入文件点击方法和IE上拒绝访问

    我尝试仅使用一个按钮作为输入文件 它在 Firefox Chrome Safari 中工作正常 但在 IE 中不行 提交表单时我总是收到 访问被拒绝 的消息 代码 input file click 有真正的解决方法吗 我在谷歌上浪费了大约2
  • 为什么这行带有“await”的代码会触发微任务队列处理?

    以下引用是我理解微任务队列处理的主要参考 当 JS 堆栈清空时 就会处理微任务 承诺使用 杰克 阿奇博尔德 https twitter com jaffathecake status 954653170986311680 这对我来说没有意义
  • 如何在 React Native 上显示 SVG 文件?

    我想显示 svg 文件 我有一堆 svg 图像 但我找不到显示的方式 我尝试使用Image and Use的组成部分反应本机 svg https github com magicismight react native svg但他们不这样做
  • 检索 css3 缩放元素的宽度/高度

    我正在与 offsetWidth 属性的奇怪之处 我认为 作斗争 这是场景 比方说 我有一个span标签 在我的js中 在某个时刻我执行css3转换 对于这个元素 例如 el set styles transform scale scale
  • 如何在 Web 服务器上设置 gzip 压缩?

    我有一个嵌入式网络服务器 总共有 2 兆空间 通常 您使用 gzip 文件对客户端有利 但这会节省我们在服务器上的空间 我读到你可以只 gzip js 文件并将其保存在服务器上 我在 IIS 上测试过 但没有任何运气 为了使这项工作成功 我
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a

随机推荐

  • Java拖放自定义光标

    我使用 JPanel 定义了一个自定义画布样式组件 它将支持将对象拖动到画布上 我似乎无法弄清楚如何使用 TransferHandler 将拖放 DnD 光标更改为自定义光标 例如 我想用我自己的代替 DnD 期间的默认链接光标 有没有办法
  • XCode 4.2.1 上的临时分发 - 权利

    我正在尝试构建我的应用程序以进行临时分发 在 TestFlight 上 我已阅读所有说明并进行了大量网络搜索 我的问题是如何在 Xcode 4 2 1 上创建 entitlements plist 所有说明均表示转到 新建文件 然后在代码签
  • 使用动作监听器获取 JButton 的文本

    有没有理由getText导致error cannot find symbol在代码中显示的动作侦听器内 另外 如果有 我该如何修复这个错误 class openNewPaneActionListener implements ActionL
  • jquery中仅选择第一级元素

    如何仅选择父级的链接元素 ul 从这样的列表中 ul li a href Link a li li a href Link a ul li a href Link a li li a href Link a li li a href Lin
  • 重写实例上的特殊方法

    考虑以下代码 gt gt gt class A object pass gt gt gt def repr self return A gt gt gt from types import MethodType gt gt gt a A g
  • wp_get_attachment_url() 中不带域名的文件路径

    wp get attachment url 处理完整文件路径 例如 http example com wp content uploads 2014 12 aura mp3 我想要没有的网址http example com 所以 我想要上面
  • 在外部库协议中添加和使用新方法时发出警告

    我正在使用外部库 并且我的视图控制器之一正在注册为该框架中的类的委托 现在 在一个地方我想在这个委托类上执行一些代码 我正在为此编写一个方法并在我的委托上调用它 现在 一切正常 但我收到一条警告 称这个新添加的方法不是协议的一部分 这是我的
  • 正则表达式仅允许 1 个字符

    rex lt gt i 我在使用这个正则表达式时遇到了问题 这个想法是检查输入字段中是否存在某些字符 如果存在 则抛出错误 对于每个长度超过 1 个字符的字符串 此正则表达式会引发错误 谁能告诉我我做错了什么 编辑 人们说他们不明白我想用这
  • ruby:批量初始化实例变量

    有没有一种简单的方法来批量分配实例变量 def initialize title nil label left nil label right nil color set nil title title label left label l
  • 为什么在初始化 Spring 时会出现 NullPointerException

    我在服务器上运行批处理作业时遇到问题 而它在我的开发工作站上的 Eclipse 中运行良好 我已经使用 Roo 设置了 Spring 环境 创建了一个实体 并制作了一个可以完成一些工作的批处理 并在我的开发盒上对其进行了良好的测试 我初始化
  • 如何在 Firemonkey 中使用动画 gif?

    如何在 Firemonky 中使用动画 GIF 我可以使用 Timage 加载 gif 但它不是动画 我正在使用 Delphi 10 2 东京 也许有点晚了 但在此页面上找到了一个简单的解决方案 http www raysoftware c
  • Python 将空格分隔的文件行读取为单独的行

    这是在 Windows Server 2008 R2 上 我有一个输入文件 每行一个输入 一些输入中包含空格 我尝试使用下面的简单代码 但它分离出每个单词而不是每行 我最终应该有 208 个新文件夹 删除所有空格 但因此我最终得到 230
  • 为 .NET 5 Core 控制器单元测试模拟或创建实用的 ODataQueryOptions

    我正在将现有的 API 迁移到 net 5 并且面临单元测试迁移的问题 我想保留测试和测试控制器 但我找不到处理 ODataQueryOptions 的方法 因为此类已更改 我无法再找到创建 ODataQueryOptions 的方法 与我
  • JOptionPane - 检查用户输入并防止关闭,直到满足条件

    请有人告诉我是否有一种方便的方法可以防止JOptionPane除非满足用户输入字段的条件 否则单击 确定 后关闭 或者我别无选择只能使用JFrame 到目前为止我的验证逻辑 似乎不起作用 因为由于某种原因这些按钮是一次性可点击的 final
  • Typhoon 与 Storyboard,实例化 ViewController

    在台风中使用故事板时 如果我在程序集中执行类似的操作 id myController return TyphoonDefinition withClass BigController class configuration TyphoonD
  • 如何为 https Web 服务器创建 .pem 文件

    我使用 Node js 中的 Express 框架来创建 Web 服务器 我想使用 ssl 进行 Web 服务器的连接 创建 https Web 服务器的代码如下 var app express createServer key fs re
  • 如何在发出原始 HTTP 请求时轻松解码 HTTP-chunked 编码字符串?

    我想发出 HTTP 请求而不依赖于 cURL 和allow url fopen 1通过打开套接字连接并发送原始 HTTP 请求 Make HTTP GET request param string the URL param int wil
  • 计算 Prolog 中数字的连续出现次数

    你好 我正在尝试在 Prolog 中编写一个程序 给定一个列表 它会计算列表中每个连续元素的出现次数 如下所示 count 1 1 1 1 2 2 2 3 1 1 0 X 结果将是X 1 3 2 3 3 1 1 2 又名每个子列表是 ele
  • SVG 填充模式适用于 Firefox 和 Chrome,但不适用于 Safari

    Safari 6 1 5 未在 SVG 矩形中显示图案 我最终将其简化为这个测试用例
  • 需要澄清 Kurento 的 API 将 webRTCEndpoint 连接到 RTPEndpoint

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