页面录制服务上线: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 ...
随机推荐
- .NET Core使用 Coravel 实现任务调度
前言 前段时间需要在一个新项目里添加两个后台任务,去定时请求两个供应商的API来同步数据:由于项目本身只是一个很小的服务,不太希望引入太重的框架,同时也没持久化要求:于是我开始寻找在Quartz.Ne ...
- JavaScript 之 数组在内存中的存储方式(连续或不连续)
最近在纠结一个问题,就是数组这个引用类型在JavaScript 中是不是和其他语言一样开辟了一个连续的内存来存储,但是在JS 中每个元素又可以是不同的类型,这就导致了没办法用一个相同大小的存储,所以数 ...
- APP性能测试——热启动耗时测试
热启动耗时: 即当启动应用时,后台已有该应用的进程(我们模拟按下HOME键),打开软件,直到进入到首页activity页面,并计算耗时. 示例代码: import os import time def ...
- 批处理执行指定文件jar包并输出日志
jar包运行,每次都要手动执行命令.这么机械的操作当然要由脚本来完成. @echo off rem 按当天日期输出日志 set today=%date:~0,4%-%date:~5,2%-%date: ...
- Debug --> wireshark中的lua插件使用
一.使用Lua脚本对pcap文件按流进行存储 https://zhuanlan.zhihu.com/p/35188803 二.使用tshark对pcap报文进行批量切流 https://blog.cs ...
- vim多行缩进
1.首先设置vim缩进空格 vim /etc/vim/vimrc 或者vim /etc/vimrc,添加一下文字 set smartindent set shiftwidth=4 # 缩进四个空格 # ...
- Activity基础知识
Activity 一.Activity是什么 Activity是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序可以包含零个或多个活动. 二.活动的基本用法 1. 手动创建活动 打 ...
- ext表单合并行
在js里加入方法 /*** 合并Grid的数据列* @param grid {Ext.Grid.Panel} 需要合并的Grid* @param colIndexArray {Array} 需要合并列 ...
- Java jsp视频标签
视频标签: 直接显示 <embed src="视频地址.mp4" width="60" height="40"> 按钮点击 &l ...
- api进阶Day1文件的创建、删除、访问、设置过滤器并查询。目录的删除、创建。
文件的创建: package file; import java.io.File; import java.io.IOException; /* create:创建 new:新 file:文件 使用F ...