页面录制服务上线:RESTful API 调用实现,所见所录即所得
我们为很多实时互动场景提供了服务。在一些场景中,用户不仅需要实时互动,还需要把互动的过程录下来。那么一个好的录制解决方案究竟需要具备哪些特征呢?
在回答这个问题之前,先聊一下客户使用录制的原因。一般来讲,用户使用录制功能的原因主要有三种:
1. 质检。比如在教育场景下,需要通过回放录制来检查课程质量,在社交直播或金融双录场景下,需要保留录制视频,做合规性审查。
2. 留证。如教育、医疗、音视频客服等场景,需存档留证以应对可能的纠纷。这种场景下,对录制方案的核心诉求是内容完整性,不能容忍哪怕是秒级的视频丢录。
3. 回放。比如在教育场景、直播场景下,用户希望观看回放。这也是大多数实时互动场景里使用录制的主要原因。
那么在这种场景下,怎样才算是一个好的录制解决方案呢?
可以从五个维度来衡量录制方案:
录制效果:需要还原真实的互动场景,包括音视频、课件、白板、聊天信息等所有元素。同时,不能对主播音视频互动体验造成任何负面影响。
集成难度:越简单越好,最好是不需要开发。
等待时长:等待时长越短越好,最好是录制结束后可以立即回放。
文件兼容性:任何平台、任意浏览器都可以播放。
文件迁移的便利性:文件下载、上传等迁移过程要非常简单,便于录制文件管理。
为了解决各种场景的录制需求,目前有两种比较主流的方案。
一、音视频、白板等元素分别录制,然后拼接回放
主要思路是将音视频、白板、课件、PPT、聊天内容等分别录制下来,录制结束后再分别回放,并通过时间戳对齐播放进度。这种方案的好处是,白板、课件、聊天内容等均以数据形式回放,可以保留原有的真实互动效果,例如 PPT 可以单独翻页,灵活性较好。但其缺点也非常明显:
1. 集成难度大。需要同时开发音视频录制、白板录制、聊天内容的录制,特别是各不同元素需要通过时间戳对齐回放,要做到非常好的同步效果需投入较多开发精力。
2. 播放兼容性受限。这种方式只能通过特殊播放器来回放,无法很好地兼容主流播放器。
3. 等待时间长。为了解决播放兼容性问题,往往需要在录制结束后进行离线处理,转成一个完整的 MP4 文件,这个过程等待时间较长,还会带来额外的转码成本。
二、本地客户端录屏
不管是本地客户端录制,还是通过屏幕共享将屏幕流发送到云端进行录制,其本质都是在用户的本地客户端上捕获屏幕内容。这种方案的好处是所见即所得,回放效果跟真实互动场景可以保持一致。但其缺点也是相当明显:
1. 影响本地用户的 RTC 互动体验。本地捕获屏幕内容会极大地消耗终端设备的计算资源,如果要实时上传,还会占用主播上行的带宽资源,这些都会影响本地用户的音视频通话体验甚至会出现卡顿、模糊等严重的后果,这对一个实时互动场景来说是难以接受的致命缺陷。
2. 集成难度大。开发者需要在端上进行开发,需要解决文件本地存储、上传等问题,往往还需要处理复杂的混音问题,集成门槛非常高。
除了以上两种主流思路,是否还有其他更好的方案呢?
声网Agora提出了第三种新思路:页面录制
页面录制是指通过 Web 页面渲染的方式, 在服务端同步录制音视频、白板、课件以及聊天信息等,还原真实的互动场景。其原理是:开发者通过 RESTful API 发起录制请求,并将待录制页面的 URL 以请求参数的形式发给 Agora 录制服务,Agora 录制服务会打开该Web页面,并以录屏的方式实时录制生成 MP4 文件,上传至指定的第三方云存储平台。具体 页面录制 文档,可点击「阅读原文」浏览。
根据此前录制方案判断维度,将页面录制与此前我们列举的录制方案相比:
在集成上,通过Restful API发起请求录制,简单易用。
录制效果实现所见即所得的,将音视频、白板、课件以及聊天信息等内容全部同时录制下来,且不带来额外的带宽、性能开销,录制过程不影响任何主播/观众的RTC互动体验。
录制结束后,可以实时生成MP4文件,兼容各主流播放器。
文件下载非常简单,便于录制文件管理。
同时,页面录制具备录制任意网页页面的能力,所以用 WebRTC 或其它方案自研 RTC 功能的开发者同样可以使用。
页面录制服务上线:RESTful API 调用实现,所见所录即所得的更多相关文章
- 初见微服务之RESTful API
1. REST名称由来 REST全称为Representational State Transfer,即表述性状态转移,最早由Roy Feilding博士在世纪之交(2000年)提出,喜欢追根溯源的朋 ...
- Restful Api调用工具类
RestfulHttpClient.java package pres.lnk.utils; import com.fasterxml.jackson.databind.ObjectMapper; i ...
- 人人都是 API 设计师:我对 RESTful API、GraphQL、RPC API 的思考
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 有一段时间没怎么写文章了,今天提笔写一 ...
- Restful API 指南
作为软件开发人员,我们大多数人在日常生活中使用或构建 REST api.API 是系统之间的默认通信方式.亚马逊是如何有效地使用 api 进行通信的最佳例子. 在这篇文章中,我将讨论如何更好地设计 R ...
- 探讨Morest在RESTful API测试的行业实践
摘要:在本文中,我们将重点探讨使用自动化智能化Morest测试技术在RESTful API测试的行业实践. 本文分享自华为云社区<[智能化测试专题]华为云API智能测试工具--Morest测试框 ...
- 基于轻量型Web服务器Raspkate的RESTful API的实现
在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...
- Web服务器Raspkate的RESTful API
基于轻量型Web服务器Raspkate的RESTful API的实现 在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RE ...
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...
- Restful api 防止重复提交
当前很多网站是前后分离的,前端(android,iso,h5)通过restful API 调用 后端服务器,这就存在一个问题,对于创建操作,比如购买某个商品,如果由于某种原因,手抖,控件bug,网络错 ...
- 测试RESTful API利器-Postman
对于前端开发者而言,最需要的往往不是技术本身,其实技术都没什么难的,而最缺少的则是各种各样好的兵器,比如调试,开发工具等等. 我们这里就推荐一款前端开发的利器-Postman,它是Google Chr ...
随机推荐
- 我的第三次JAVA作业
------------恢复内容开始------------ 1.对象与对象引用的区别是什么? 请举例说明 创建对象被分配在堆中,对象引用分配在栈中. eg. new FighterPlane(); ...
- Python数据挖掘——银行分控模型的建立
数据初始化 import pandas as pd from keras.models import Sequential from keras.layers.core import Dense, A ...
- LeetCode系列之 (JavaScript) => 53. 最大子数组和
题目描述: leetcode 题目链接: 53. 最大子数组和 - 力扣(LeetCode) (leetcode-cn.com) 解题思路分析: 题干最终的输出是连续子数组的最大和:1. 贪心算法: ...
- JDBC——连接SQL Server环境配置
JDBC:使用JAVA语言操作关系型数据库的API.是一套标准的接口. 步骤 1.创建工程,导入驱动jar包 2.注册驱动:Class.forName("com.mysql.jdbc.Dri ...
- 修改浏览器搜索引擎:设置网址格式(用“%s”代替搜索字词)
浏览器搜索引擎设置,如何填写网址格式(用"%s"代替搜索字词)? 以下收集部分: 综合检索 名称 关键字 网址(用"%s"代替搜索字词) 必应 cn.bing. ...
- 1、HTTP的基本概念与交互模型
1.上网的整个过程 假设我们点击了某网页上的一个链接,指向清华大学院系设置,其URL是:http://www.tsinghua.edu.cn/chn/yxsz/index.html.我们来分析一下整个 ...
- 08 分布式计算MapReduce--词频统计
def getText(): txt=open("D:\\test.txt","r").read() txt=txt.lower() punctuation = ...
- Ubuntu系统设置普通用户最大文件打开数
背景: Elasticsearch启动报错: ERROR: bootstrap checks failedmax file descriptors [4096] for elasticsearch ...
- ES2015常用知识点
ES2015(又称ES6)部分1 let/const以及块作用域:2 循环语句 const arr=[1,2,3]; for(const item of arr){ console.log(item) ...
- vue项目启动报错问题解决. Module build failed: Error: Node Sass does not yet support your current environment
导入vue项目后,启动报错,异常如下: 1 error in ./src/pages/home.vue 2 Module build failed: Error: Node Sass does not ...