声网多人视频录制与合成支持掉线再录制 | 掘金技术征文

先来看实现的最终效果:java

上图合成了2我的视频,中途有1我的先离开以后又从新加入了房间。node

1、业务场景

业务场景是这样的:多个用户(2-4人)直播的视频,合成为一个视频,这期间要知足2个条件:linux

第一:录制途中可能有一个或多个用户不定次数的离线、重进(网络差和人为操做)的状况;git

第二:要保证合成的视频和录制的效果是同样的必须是同步的(不能出现多个视频时间对不上的状况)。github

因为有以上两个条件限制,因此程序的实现难度仍是有的,不过还好,笔者已经找到了声网的解决方案,下面来和你们分享一下。npm

2、解决方案概述

使用声网的互动直播和服务器录制,缺点是声网并不提供在线录制功能,须要用户本身部署录制服务器,优势是声网录制的视频是完整的,并在录制结束以后能够立马查看视频。服务器

这种方案支持必定时间内(5分钟或本身自定义时长),一个或多我的离开房间以后有从新进入房间的状况,而且不会影响视频的录制,并且视频也是同步的,不能出现多个视频时间对不上的状况。网络

3、声网的录制方案

声网的互动直播集成文档:t.cn/E6sorEx 本节重点介绍视频录制合成功能。app

声网的录制服务器要本身配置,首先须要买一个Linux服务器,目前只支持Linux哦,而后设置服务器,以下所述。框架

服务器配置

一、 Ubuntu 12.04+ x64 或 CentOS 6.5+ x64

二、 GCC 4.4+ (通常linux系统都会预装,使用命令:gcc -v查看版本号)

三、 公网IP

四、 域名“qos.agoralab.co”加入白名单

五、 NodeJS 8.9+

服务器的录制程序可使用NodeJS来实现,这对于开发者来讲也是一件好事,毕竟减低了程序部署的门槛,它实现的原理是使用:NodeJS的Express框架来实现Restful API的调用,NodeJS在调用C++的插件,经过插件再调用C++的录制SDK,完成整个流程的,以下图所示:

调用原理图

接下来就正式进入服务器部署了,步骤以下:

一、下载NodeJs部署程序,访问:github.com/AgoraIO/Bas… 下载zip,部署到你的服务器;

二、下载录制SDK,访问:docs.agora.io/cn/Recordin…

三、解压录制SDK并拷贝到NodeJS部署目录的 record/src/sdk 目录;

四、安装node-gyp,使用命令: npm install -g node-gyp

五、打开终端,进入 Agora-Restful-Recording-Nodejs/record 目录,运行sh文件 sh build.sh ,编译C++的调用,运行成功以后能够看到“agorasdk.node”文件;

以上操做,也可查看官网文档(英文的):t.cn/Eq1ZncK

完成以上操做以后,真正的坑才在等着你,下面来讲重点了。

【程序部署的坑】

执行完以上操做以后,须要下面的两项设置,才能正常的录制视频:

一、设置Linux文件夹权限: chmod -R 777 /{你的目录}/Agora-Restful-Recording-Nodejs

二、设置你的互动直播客户端为直播模式,由于NodeJS里面是写死的直播模式,而客户端的互动直播默认的是非直播模式,因此须要设置:setChannelProfile(1)和setClientRole(1),不然录制的视频是纯色的背景图,无内容;

恭喜你通过以上的配置,终于能够运行视频录制了,到在开始以前你须要先运行NodeJS的Express项目:

一、使用终端,切换到Agora-Restful-Recording-Nodejs/server目录,执行 npm install 安装;

二、使用终端 node app.js 运行项目;

这个时候使用Web API的方式就能够完成调用了。

开始录制 ,调用以下:

开始录制

结束录制 ,调用以下:

结束录制

【使用小技巧】

声网的appid参数配置在程序中,不要经过参数传递,下降帐号被盗用的风险

有了以上的步骤就完成了程序的录制,不过还有更多的坑在后面等着你,笔者整理了使用中的坑,以下。

【使用中的坑】

一、录制的视频不能直接返回mp4地址,须要遍历文件夹路径找到mp4格式文件返回。

二、设置容许离线时长,此项目默认只有10秒,时间过短了,最好要设置5分钟,经过设置Agora-Restful-Recording-Nodejs/record/src/agora_node_ext/agora_node_recording.cpp文件中的config.idleLimitSec=300修改运行离线时长为5分钟。

三、mp4文件有时不会立马产生,会出现偶尔遍历文件夹,mp4文件还没产生的状况,这个时候直接返回给调用端会致使程序缺陷,全部要建立一个循环检测计数器,检测mp4文件产生以后再返回给调用端,保证程序的稳定性。

四、视频合成的画面是能够本身布局的,除了能够自定义合成视频的位置以外,还能够自定义视频大小,但在改变视频大小的时候,必须是如下枚举值的其中之一,以下图:

分辨率枚举值

4、总结

但愿本文能给你们一个解决视频录制和合成的思路,也但愿你们在具体使用的时候能避开文章提到的一些坑。

最后

Agora SDK 使用体验征文大赛 | 掘金技术征文,征文活动正在进行中

相关文章
相关标签/搜索