WebRTC - 在通信过程中更改视频流

2023-11-23

我的目标是使用 webrtc Web 应用程序在视频或音频通话中启用屏幕共享。

好吧,我发现我可以使用MediaStreamTrack.applyConstraints()更改视频属性,但是否可以更改视频源?进一步说明如何将视频添加到现有音频流中。

我现在只需要在 chrome 上使用它。


截至今天,我认为适合您的情况的更好方法是使用 RTCRtpSender.replaceTrack 方法。

假设您的摄像头流是“camStream”,您可以使用以下方法获取所需的 RTCRtpSender 对象:

var camVideoTrack = camStream.getVideoTracks()[0];
var camAudioTrack = camStream.getAudioTracks()[0];
var videoSender = peerConnection.addTrack(camVideoTrack, camStream);
var audioSender = peerConnection.addTrack(camAudioTrack, camStream);

...

最后两行为连接添加视频和音频功能。

...

假设您的屏幕流是“screenStream”,那么您可以从相机切换到屏幕共享视频,如下所示:

var screenVideoTrack = screenStream.getVideoTracks()[0];
videoSender.replaceTrack(screenVideoTrack);

...

无需替换音轨,因为我们只想在保持音频输入相同的同时改变视觉效果。

使用这种方法的好处是不需要对等重新协商来切换视频源。

这种方法的另一个好处是您不需要停止 camStream。共享屏幕后,您可以使用以下命令切换回视频源:

videoSender.replaceTrack(camStream.getVideoTracks()[0]);

您可以查看replaceTrack的文档here

我有一个有效的 webrtc 会议解决方案,它支持使用这些类似步骤的屏幕共享和屏幕录制。你可以检查一下here

它可以在 Firefox 上开箱即用,但要使其在 chrome 上运行,您需要启用“实验性 Web 平台”标志(转到 chrome://flags/ )

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

WebRTC - 在通信过程中更改视频流 的相关文章

  • 我如何在 AngularJS 中监听点击并按住的情况?

    我制作了一个时间计数器 您可以通过单击按钮来增加或减少时间 然而 我希望当我单击并按住按钮时 时间的价值会不断攀升 所以目前如果你看到我的Plunkr http plnkr co edit BxX9x5zYFMXVqt5JsN1F p pr
  • chrome 调试器承诺在暂停时不会解析?

    也许我没有正确调试承诺 但基本上 如果您在断点处停止并运行异步代码 它实际上不会完成 直到您恢复执行为止 这是一个问题 调试器允许您快速试验多个 api 方法 但如果您恢复它 您就不能 debugger now type the follo
  • Oo 任何 IDE 中的 javascript 代码补全

    你知道有什么IDE可以自动完成这种代码吗 我这里有一个 javascript 类生成器 function var core bind function method scope if method instanceof Function t
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 如何使用 selenium 和 Mocha 获取 xPath() 选择的锚标记的文本

    我已经成功选择了 a 标签 我想显示锚标记的文本 但无法这样做 我正在使用 selenium mocha javascript 和 phantomJS 这是我的脚本 详细 var assert require assert var test
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • Windows 上 MBCS 和 UTF-8 的区别

    我正在阅读有关 Windows 上的字符集和编码的信息 我注意到 Visual Studio 编译器 针对 C 中有两个编译器标志 称为 MBCS 和 UNICODE 它们之间有什么区别 我不明白的是 UTF 8 在概念上与 MBCS 编码
  • 在 HTML5 canvas 元素内移动矩形(像素)区域的最快方法是什么

    我想实现 HTML5 canvas 元素内容的垂直滚动 我不想再次渲染整个内容 相反 我想将整个内容向下 向上移动 并仅渲染已滚动到视图中的区域 我尝试过getImageData and putImageData函数 但在我的测试中它们几乎
  • linux中有类似COM0COM这样的程序吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在Windows中使用com0com进行程序测试 linux下有没有类似com0com的程序 我知道有 pts ptmx 但我想要的是一个独立的程
  • Google 地球与 Google 地图 API v3 集成了吗?

    我正在尝试将 Google 地球集成到 Google 地图中 我发现它是possible在 v2 中 但我找不到任何关于如何使用 v3 执行此操作的文档 不幸的是 这尚未在 Google Maps API v3 中实现 请参阅相应的tick
  • groupByKey 是否比 reduceByKey 更受青睐

    我总是用reduceByKey当我需要对 RDD 中的数据进行分组时 因为它在打乱数据之前执行映射端缩减 这通常意味着更少的数据被打乱 从而获得更好的性能 即使当map端reduce函数收集了所有值并且没有实际减少数据量时 我仍然使用red
  • 在(据称)高性能代码中使用 GetCurrentMethod

    出于记录目的 我们应用程序中的一些方法包括以下行 Dim Log As ILog GetLog Reflection MethodBase GetCurrentMethod DeclaringType 我对反思有一种可以说是非理性的恐惧 我
  • 如何从java调用C#函数[重复]

    这个问题在这里已经有答案了 我需要从 java 调用 C 函数 为此我创建了以下内容 我创建了一个java头文件Authenticator h 代码如下 include
  • 循环遍历数组并成对输出(每个第二个元素的分隔符)

    我有一个包含匿名元素的数组 元素通过 php 添加到数组中 如下所示 playlist array while databaseloop playlist a title playlist a length echo json encode
  • 通用集合中的记录相等性

    假设您有一条带有重载相等运算符的记录 TSomeRecord record Value String class operator Equal Left Right TSomeRecord Boolean end 实现比较字符串值 如果根据
  • Linux中每个进程的最大线程数

    我编写了一个简单的程序来计算Linux Centos 5 中一个进程可以拥有的最大线程数 这是代码 int main pthread t thrd 400 for int i 0 i lt 400 i int err pthread cre
  • NuGet 包引用复制 dll 本地

    我需要将 NuGet dll 的 Copy Local 设置为 false 在此之前 我使用了包配置格式 一切正常 迁移到后封装参考格式 我找不到如何做到这一点的方法 有人可以帮助我吗 您可以使用私有资产 从文档复制
  • 使用 Hibernate API 进行 Java 字符串日期验证

    我正在尝试验证字符串日期 using javax validation 休眠验证 我需要检查给定的字符串日期应该是过去的并且它应该是正确的yyyyMMdd具有所有限制的格式 例如闰年 30th 31st day public class U
  • 如何捕获鼠标移动事件

    我想在我的主窗体中捕获鼠标移动事件 虽然我能够连接MouseEventHandler对于主窗体 当光标位于 UserControl 或任何其他控件上时 该事件不再触发 如何确保我始终掌握鼠标位置 您可以使用低级鼠标钩 看this示例并检查
  • 使用 ctypes 传递数组

    我有一个C函数 void read FIFO AI0 int16 t input size t size NiFpga Session session NiFpga Status status input int16 t malloc si
  • 如何使用 SWIG 扩展 python 中的模板化 C++ 类以允许 [] 运算符

    我有一个模板化的 C 数组类 它使用标准向量类 include
  • 向量点积计算的时间和空间复杂度

    计算两个长度为 n 的向量之间的点积的算法的时间和空间复杂度是多少 如果这 2 个向量是a a1 a2 an and b b1 b2 bn then 点积由下式给出a b a1 b1 a2 b2 an bn 为了计算这个 我们必须执行n乘法
  • 设置 tk.Frame 宽度和高度

    所以我正在创建一个 GUI 并尝试使其一切都适合屏幕 我已经画出了我希望 GUI 的每个部分的外观及其大小的粗略草图 因此我知道所有内容的粗略尺寸 然而 我遇到的第一个问题是设置屏幕的左半部分 所以左半部分由一个框架组成 我们称之为Main
  • 如何替换已弃用的 ggplot2 函数 aes_string:接受任意数量的命名字符串来指定美学映射?

    aes string我在使用 ggplot2 编程时使用了一些方便的行为 但aes string已被弃用 我相信是从 ggplot2 版本 3 4 0 开始 我正在努力思考如何很好地替换它 具体来说 我之前创建了通过省略号接受任意字符串参数
  • 错误 403:scrapy 中未处理或不允许 HTTP 状态代码

    这是我为抓取 justdial 网站而编写的代码 import scrapy from scrapy http request import Request class JustdialSpider scrapy Spider name j
  • WebRTC - 在通信过程中更改视频流

    我的目标是使用 webrtc Web 应用程序在视频或音频通话中启用屏幕共享 好吧 我发现我可以使用MediaStreamTrack applyConstraints 更改视频属性 但是否可以更改视频源 进一步说明如何将视频添加到现有音频流