javascript - 合并2个html5画布的捕获视频流
问题描述
我正在为网络会议应用程序构建一个白板应用程序。我研究过的所有库都使用 2 个 canvas ,顶部的 1 个用于绘图,底部的 1 个用于保存较旧的绘图(为了获得更好的性能,因为每次绘制时上部的画布都会被清除)。
现在我需要流式传输这些画布的内容以供其他用途,以便他们可以实时查看内容。
选项1 :
captureStream
从每个画布并将视频轨道合并到一个流中,new MediaStream([...bottomTracks, ...topTracks])
使用 webrtc 传输流,然后从流中提取轨道,为每个轨道创建一个新流,new MediaStream([stream.getVideoTracks()[0]])
并在绝对定位的视频元素上播放流。它有效,但我的老板不喜欢它,不知道为什么?然而!
这有缺点吗?
选项2:
创建第三个屏幕外画布,并定期drawImage
在屏幕外画布上创建两个画布,然后captureStream
从该画布!
那么有没有更好的方法或另一种方法来实现这一目标?
更新:为什么我使用 2 个画布?
只有一个原因,如果我想改变已经绘制的东西,不要重新绘制所有东西,你可能会问什么会改变?
对我来说有两种情况:
- 通过鼠标拖动、触摸移动或钢笔平滑已完成绘制的线条(使其感觉更像自然书写,结帐http://fabricjs.com/freedrawing)
- 通过鼠标拖动、触摸移动或笔绘制形状
我知道我可以在每次更改时重新绘制所有内容,但我相信它在低端设备上的性能会很低。
2 个画布绝对位于彼此之上,实际的用户绘图在上部画布上完成,当完成并对其应用任何所需的增强时,线条/形状将绘制在底部画布上并清除上部画布.
解决方案
正如 kaiido 在评论中指出的那样,您只需要在屏幕上放置一个画布。
在record.a.video 中,我将 2 个视频流(屏幕视频和摄像头视频)叠加到一个画布上。然后我使用另一个媒体流从画布中提取视频并作为 VOD 共享或直播。
请注意,音频必须以不同方式处理,因为它在画布中播放。
推荐阅读
- php - Laravel 中的正确表格
- plsql - SAS/SQL 分组并保留所有行
- node.js - Angular 消耗 express web api,请求错误
- javascript - Angular 材质一键打开菜单
- android - 如何在任何活动中随时显示对话框
- oracle - oracle pragma SERIALLY_REUSABLE、RESTRICT_REFERENCES 和 INLINE
- javascript - 将 Highcharts 与 PerfectScrollbar 一起使用时,鼠标滚轮事件在 Firefox 中无法正常工作
- ios - 从第二个警报视图按“确定”时,进度 hud 未显示
- react-native - 不同堆栈导航器中的相同屏幕
- java - JVM(HotSpot)内在方法到底是什么?