效果图:上图合成了2个人的视频,1个人离开后重新加入房间。一、业务场景业务场景如下:多个用户(2-4人)直播视频,合成一个视频。在此期间,必须满足两个条件:第一,录制过程中可能无限期存在一个或多个用户。掉线再入(网络差,人为操作);第二,要保证合成的视频和录制的效果一致,必须同步(多个视频不能超时)。基于以上两种情况,方案的实施依然困难重重,但幸运的是,笔者已经找到了一些解决办法,下面与大家分享。2、方案概述方案一:使用腾讯云进行互动直播和在线录制,但是腾讯云录制的视频是mp4格式,每30分钟分成一个文件,也就是说录制的时候可能会有多个视频,并且录制后转码时间不确定,所以录制后需要利用数据库的录制信息和ffmpeg合成多个视频。方案二:使用声网互动直播和服务器录制。缺点是声网不提供在线录音功能,需要用户自行部署录音服务器。优点是声网录制的视频完整,录制结束后可以立即查看。视频。以上两种方案均支持一定时间(5分钟也可自行设置),一个或多个人离开房间后重新进入房间,不影响录像,录像也synchronized不能出现多个视频的时间不匹配。3.腾讯云录制解决方案本文主要讲视频录制合成,所以互动直播的内容不属于本文讨论范围。对互动直播感兴趣的同学可以点击链接查看,腾讯实时音视频参考地址:http://t.cn/EquSeRo腾讯云的在线录制比较简单,可以通过使用网络API。参考文档:https://cloud.tencent.com/doc...调用接口传参不过如果开启自动录制功能,连调用webapi都省了,只是灵活性比较差低,这也是收费的。收费详情请参考下文,因此建议手动拨打电话开始录音。本节重点介绍ffmpeg合成视频的功能。下面是对ffmpeg的介绍。官网:http://ffmpeg.org/下载地址:https://ffmpeg.zeranoe.com/bu...//www.bookstack.cn/read...ffmpeg的使用还是很简单的。你只需要通过上面的连接下载ffmpeg,然后调用命令就可以合成视频了。因为我们的视频是mp4格式的(至于为什么是mp4格式,因为业务需要,需要和其他功能对接,所以必须是mp4格式),所以不能直接使用ffmpeg命令,将多个mp4合成一个time文件,但是可以把mp4文件转成ts格式文件,然后一次合成多个视频,再把视频转成mp4。具体步骤如下:1、打开命令行,切换到ffmpeg的安装目录;2、使用命令将多个mp4文件转换为ts格式文件:ffmpeg-i1.mp4-vcodeccopy-acodeccopy-vbsfh264_mp4toannexb1.ts;3.使用命令合并多个转换后的ts文件,将视频格式转换为mp4:ffmpeg-i"concat:1.ts|2.ts|3.ts"-acodeccopy-vcodeccopy-absfaac_adtstoascoutput.mp4;这样就完成了视频的合成。当然,在合成视频之前,首先要从腾讯云下载视频。合成视频后,您可以选择将视频上传到腾讯云的云端。4、声网录制方案与腾讯云相同。声网互动直播集成文档:http://t.cn/Eq3RpOS本版块主要介绍视频录制和合成功能。音网的录制服务器需要自己配置。首先,你需要购买一台Linux服务器。目前只支持Linux,然后按如下所述设置服务器。服务器配置1、Ubuntu12.04+x64或CentOS6.5+x642、GCC4.4+(一般Linux系统都会预装,使用命令:gcc-v查看版本号)3、公网IP4,域名“qos”.agoralab.co”加入白名单5。NodeJS8.9+服务端的录制程序可以使用NodeJS实现,这对开发者来说也是一件好事。毕竟降低了程序部署的门槛。它的实现原理是利用NodeJS的Express框架实现Restful的API调用,NodeJS是调用C++插件,然后通过插件调用C++录制SDK完成整个过程,如图如下图:接下来正式进入服务器部署。步骤如下:1.下载NodeJs部署程序,访问:https://github.com/AgoraIO/Ba...,部署到你的服务器;2、下载录音SDK,访问:http://t.cn/Eq17cLU;3.解压录制SDK,复制到NodeJS中部署4.安装node-gyp,使用命令:npminstall-gnode-gyp;5.打开终端,进入Agora-Restful-Recording-Nodejs/record目录,运行sh文件shbuild。sh,编译C++的调用,运行成功后可以看到“agorasdk.node”文件;以上操作也可以查看官网文档(英文):http://t.cn/Eq1ZncK完成以上操作后,真正的坑在等着你,说说重点吧。【程序部署的坑】执行完以上操作后,要正常录制视频还需要进行以下两项设置:1.设置linux文件夹的权限:chmod-R777/{你的目录}/Agora-Restful-Recording-Nodejs;2.将你的互动直播客户端设置为直播模式,因为NodeJS是硬编码直播模式,而客户端的互动直播默认为非直播模式,所以需要设置:setChannelProfile(1)和setClientRole(1)、否则,录制的视频背景图纯,无内容;恭喜,经过以上配置终于可以运行录像了。在开始之前,需要运行NodeJSExpress项目:1.使用终端切换到Agora-Restful-Recording-Nodejs/server目录,执行npminstall安装;2、使用终端节点app.js运行项目;此时可以使用WebAPI完成调用。开始录音调用如下:结束录音调用如下:【使用提示】程序中配置了Acoustics的appid参数,请勿传参,减少账号被盗风险。经过以上步骤,节目的录制就完成了。然而,还有更多的坑在等着你。笔者整理了使用中的坑,如下。【使用中的坑】1.录制的视频不能直接返回mp4地址,需要遍历文件夹路径找到mp4格式文件返回。2.设置允许离线时间。该项目的默认时间仅为10秒。时间太短了。最好设置为5分钟。通过在Agora-Restful-Recording-Nodejs/record/src/agora_node_ext/agora_node_recording.cpp文件中设置配置。idleLimitSec=300修改离线时长为5分钟。3、有时不会立即生成mp4文件,偶尔会出现遍历文件夹,但是没有生成mp4文件的情况。这时候直接返回调用端会造成程序缺陷。因此,必须创建一个循环检测计数器来检测mp4文件生成后。然后返回给调用者,保证程序的稳定性。五、小结分别介绍了以上两种视频录制与合成技术。接下来,我们将对两种合成技术进??行对比,以便开发者选择更适合自己的技术方案。对比一:功能对比腾讯云的在线录制一开始使用方便,但是录制mp4格式的视频会生成多个视频文件,后期处理比较麻烦。由于Acoustics没有自带在线录制功能,开发者需要自行配置录制服务器并保存视频。但是录制的视频是完整的(不会分割成多个视频),支持多个视频的自动合成和离线重入。比较二:服务器费用比较1.腾讯云的费用分为三部分:第一部分,每个频道推送费用为60元/频道,按照最高并发频道数计算,比如我们上个月的高峰期是100人同时在线,推流费用按最高分并发100*60=6000元;第二部分是云视频存储的成本,这部分空间的成本很小;第三部分是视频合成的服务器成本。2.声学只需要记录服务器的成本,成本相对可控,成本不高。比如阿里云的云服务器,16核+32G内存+35M固定宽带一个月才3200元。在服务器成本方面,声网的服务器成本低于腾讯云。看到这里,相信开发者已经有了自己的选择,但无论如何,希望这篇文章能给大家解决视频录制合成的思路,也希望大家在制作视频时能避免文中提到的一些陷阱使用它。最后,关注作者公众号,获取更多精彩内容:如果您觉得本文对您有帮助,请转发朋友圈或直接分享给您的朋友。
