当前位置:网站首页>声网多人视频录制与合成支持掉线再录制 | 掘金技术征文
声网多人视频录制与合成支持掉线再录制 | 掘金技术征文
2022-06-22 21:36:00 【51CTO】
先来看实现的最终效果:
上图合成了2个人视频,中途有1个人先离开之后又重新加入了房间。
一、业务场景
业务场景是这样的:多个用户(2-4人)直播的视频,合成为一个视频,这期间要满足2个条件:
第一:录制途中可能有一个或多个用户不定次数的离线、重进(网络差和人为操作)的情况;
第二:要保证合成的视频和录制的效果是一样的必须是同步的(不能出现多个视频时间对不上的情况)。
由于有以上两个条件限制,所以程序的实现难度还是有的,不过还好,笔者已经找到了声网的解决方案,下面来和大家分享一下。
二、解决方案概述
使用声网的互动直播和服务器录制,缺点是声网并不提供在线录制功能,需要用户自己部署录制服务器,优点是声网录制的视频是完整的,并在录制结束之后可以立马查看视频。
这种方案支持一定时间内(5分钟或自己自定义时长),一个或多个人离开房间之后有重新进入房间的情况,并且不会影响视频的录制,而且视频也是同步的,不能出现多个视频时间对不上的情况。
三、声网的录制方案
声网的互动直播集成文档:t.cn/E6sorEx 本节重点介绍视频录制合成功能。
声网的录制服务器要自己配置,首先需要买一个Linux服务器,目前只支持Linux哦,然后设置服务器,如下所述。
服务器配置
1、 Ubuntu 12.04+ x64 或 CentOS 6.5+ x64
2、 GCC 4.4+ (一般linux系统都会预装,使用命令:gcc -v查看版本号)
3、 公网IP
4、 域名“qos.agoralab.co”加入白名单
5、 NodeJS 8.9+
服务器的录制程序可以使用NodeJS来实现,这对于开发者来说也是一件好事,毕竟减低了程序部署的门槛,它实现的原理是使用:NodeJS的Express框架来实现Restful API的调用,NodeJS在调用C++的插件,通过插件再调用C++的录制SDK,完成整个流程的,如下图所示:
接下来就正式进入服务器部署了,步骤如下:
1、下载NodeJs部署程序,访问:github.com/AgoraIO/Bas… 下载zip,部署到你的服务器;
2、下载录制SDK,访问:docs.agora.io/cn/Recordin…
3、解压录制SDK并拷贝到NodeJS部署目录的 record/src/sdk 目录;
4、安装node-gyp,使用命令: npm install -g node-gyp ;
5、打开终端,进入 Agora-Restful-Recording-Nodejs/record 目录,运行sh文件 sh build.sh ,编译C++的调用,运行成功之后可以看到“agorasdk.node”文件;
以上操作,也可查看官网文档(英文的):
完成以上操作之后,真正的坑才在等着你,下面来说重点了。
【程序部署的坑】
执行完以上操作之后,需要下面的两项设置,才能正常的录制视频:
1、设置Linux文件夹权限: chmod -R 777 /{你的目录}/Agora-Restful-Recording-Nodejs ;
2、设置你的互动直播客户端为直播模式,因为NodeJS里面是写死的直播模式,而客户端的互动直播默认的是非直播模式,所以需要设置:setChannelProfile(1)和setClientRole(1),否则录制的视频是纯色的背景图,无内容;
恭喜你经过以上的配置,终于可以运行视频录制了,到在开始之前你需要先运行NodeJS的Express项目:
1、使用终端,切换到Agora-Restful-Recording-Nodejs/server目录,执行 npm install 安装;
2、使用终端 node app.js 运行项目;
这个时候使用Web API的方式就可以完成调用了。
开始录制 ,调用如下:
结束录制 ,调用如下:
【使用小技巧】
声网的appid参数配置在程序中,不要通过参数传递,降低账号被盗用的风险
有了以上的步骤就完成了程序的录制,不过还有更多的坑在后面等着你,笔者整理了使用中的坑,如下。
【使用中的坑】
1、录制的视频不能直接返回mp4地址,需要遍历文件夹路径找到mp4格式文件返回。
2、设置允许离线时长,此项目默认只有10秒,时间太短了,最好要设置5分钟,通过设置Agora-Restful-Recording-Nodejs/record/src/agora_node_ext/agora_node_recording.cpp文件中的config.idleLimitSec=300修改运行离线时长为5分钟。
3、mp4文件有时不会立马产生,会出现偶尔遍历文件夹,mp4文件还没产生的情况,这个时候直接返回给调用端会导致程序缺陷,所有要创建一个循环检测计数器,检测mp4文件产生之后再返回给调用端,保证程序的稳定性。
4、视频合成的画面是可以自己布局的,除了可以自定义合成视频的位置之外,还可以自定义视频大小,但在改变视频大小的时候,必须是以下枚举值的其中之一,如下图:
四、总结
希望本文能给大家一个解决视频录制和合成的思路,也希望大家在具体使用的时候能避开文章提到的一些坑。
边栏推荐
- To establish a cloud computing "Kunlun", why should Lenovo hybrid cloud Lenovo xcloud?
- 软件构造课程ADT与OOP理解
- Is it safe to make an appointment to pay new debts? Is it reliable?
- Reverse proxy haproxy
- OJ daily practice - Verifying substring
- Digital data was invited to participate in Nantong enterprise digital transformation Seminar
- 冒泡排序 指针
- Kunlun distributed database sequence function and its implementation mechanism
- 异步FIFO
- 在Word中自定义多级列表样式
猜你喜欢

Kunlundb query optimization (III) sort push down

Future alternatives to IPv4! Read the advantages, features and address types of IPv6

Kunlundb query optimization (I)

【ARM】讯为rk3568开发板lvds屏设置横屏显示
![[STM32 skill] use the hardware I2C of STM32 Hal library to drive rx8025t real-time clock chip](/img/32/88321db57afb50ccc096d687ff9c41.png)
[STM32 skill] use the hardware I2C of STM32 Hal library to drive rx8025t real-time clock chip
![[go] go modules GETTING STARTED](/img/0a/58c50bb624c91b88a88aea280aa650.jpg)
[go] go modules GETTING STARTED

Redis cache

Oracle ASM uses the CP command in asmcmd to perform remote replication

2022天梯赛-全国总决赛复盘赛

OJ daily practice - spanning 2020
随机推荐
Notes on zhouguohua's reading
Use the find command
Various schemes for lazy loading of pictures
Introduction to the unique variable reading and writing function of Kunlun distributed database
What does password security mean? What are the password security standard clauses in the ISO 2.0 policy?
考过HCIP依然转行失败,职业网工最看重的到底是什么
Express、路由(Route)、Request对象、Response对象、中间件、EJS模板
剑指 Offer 11. 旋转数组的最小数字
优化——线性规划
10 Super VIM plug-ins, I can't put them down
【GO】Go Modules入門
【GO】go多态
Smart data won two annual awards at the second isig China Industrial Intelligence Conference
同步电路与跨时钟域电路设计2——多bit信号的跨时钟域传输(FIFO)
RedisTemplate使用遇到\x00的問題
Synchronization circuit and cross clock domain circuit design 2 -- cross clock domain transmission (FIFO) of multi bit signals
2. interface (calculator)
【GO】go mod模式, package 12import/add is not in GOROOT
DCC888 :SSA (static single assignment form)
一文简述:钓鱼攻击知多少