当前位置:网站首页>使用cef离屏渲染技术实现在线教育课件和webrtc视频回放融合录制
使用cef离屏渲染技术实现在线教育课件和webrtc视频回放融合录制
2022-08-04 05:32:00 【睏哥RTC】
早先使用声网、即构等第三方实时视频通讯引擎时,引擎提供方会提供服务端视频录制方案,但是在线教育课件是自己的,通常业界采用的方案是,课件保存上课过程的信令,回放时课件回放使用信令回放,即课件不是真实的视频而是HTML执行保存的信令来回放,同时配上录制的老师学生的视频的时间戳同步回放,回放重现整个上课过程。
方案本身就比较绕,使用起来也有很多缺点:
1. 需要专用的回放工具来回放,这就导致回放很难分享,观看也不便;
2. 不能实时生成回放,通常要课程结束一两个小时后才能生成;
3.不能实时转推
后来使用了webrtc方案,实现了老师学生视频和HTML的融合,开始也是参考声网方案,视频有单独的视频录制服务器,鉴于实际使用中的各种问题,后来考虑能否老师端录制上课工具画面,但是也有很多问题,比如上课完后要上传等,怎么录制声音等问题。
后来我偶然记起cef有离屏渲染功能,可以把整个页面渲染到内存,是否可以考虑服务端起一个cef进程,以旁观者的身份加载HTML的课堂,使用离屏渲染保存每一帧即可,于是马上安排人去试验,很顺利就保存了课件画面,遇到的问题是声音怎么录制,当时的问题是发布版本的cef都不支持单独获取一个页面的声音,那就只能录制整个电脑的声音,这样会导致一个问题,一台录制服务器智能同时录一堂课,否则同时录多堂课就串音了。
怎么办呢?没事找google,翻了-墙搜啊搜,发现cef有个未发布版本,支持了单独获取单个网页的声音,参考CefAudioMirrorDestination:
https://bitbucket.org/chromiumembedded/cef/src/58e1149c7127314072903d3d45b9ba8b9fd2fc92/libcef/browser/audio_mirror_destination.h?at=master&fileviewer=file-view-default
于是问题解决,下面是一些坑和注意点:
1. 页面上的一下拉框,cef返回是单独返回的,需要我们自行合成到页面背景
2. 一个页面会包含很多路声音流,需要自行混音成一路
3. cef依赖chromium包非常大几十个G,而且要翻他妈的墙,非常容易下载失败,所以找个稳定点的代理
此技术为本人原创,转载请附带原文链接,谢谢!
边栏推荐
- The second official example analysis of the MOOSE platform - about creating a Kernel and solving the convection-diffusion equation
- MySQL存储过程学习笔记(基于8.0)
- [开发杂项][VS Code]remote-ssd retry failed
- JDBC第一学之进行数据库连接时出现The server time zone.....解决办法
- DRA821 环境搭建
- MySQL批量修改时间字段
- FAREWARE ADDRESS
- 指针的运算【C语言】
- 【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
- MNIST Handwritten Digit Recognition - Building a Perceptron from Zero for Two-Classification
猜你喜欢

LeetCode_Dec_3rd_Week

代码庆端午--粽你心意

C语言静态变量static的分析

MOOSE平台使用入门攻略——如何运行官方教程的例子

Chapter One Introduction

IDEA中创建web项目实现步骤

LeetCode_Dec_1st_Week

MOOSE平台官方第二个例子分析——关于创建Kernel,求解对流扩散方程

Tencent and NetEase have taken action one after another. What is the metaverse that is so popular that it is out of the circle?

DRA821 环境搭建
随机推荐
"A minute" Copy siege lion log 】 【 run MindSpore LeNet model
LeetCode_Nov_3rd_Week
IEEE802.X protocol suite
基于asp.net的法律援助平台的设计与实现(附项目链接)
第三章 标准单元库(上)
MNIST handwritten digit recognition - based on Mindspore to quickly build a perceptron to achieve ten categories
Copy Siege Lion 5-minute online experience MindIR format model generation
动态内存管理-C语言
Cut the hit pro subtitles export of essays
库函数的模拟实现-C语言
Golang environment variable settings (2)--GOMODULE & GOPROXY
Machine Learning - Processing of Text Labels for Classification Problems (Feature Engineering)
LeetCode_Dec_1st_Week
const int * a 与 int * const a 的定义与区别
C语言静态变量static的分析
集合--LinkedList
MNIST手写数字识别 —— 图像分析法实现二分类
机器学习——分类问题对于文字标签的处理(特征工程)
线程池原理
LeetCode_22_Apr_4th_Week