互动直播的视频录制与合成—支持多人离线重入
實(shí)現(xiàn)的效果圖:
上圖合成了2個(gè)人視頻,中途有1個(gè)人先離開(kāi)之后又重新加入了房間。
一、業(yè)務(wù)場(chǎng)景
業(yè)務(wù)場(chǎng)景是這樣的:多個(gè)用戶(hù)(2-4人)直播的視頻,合成為一個(gè)視頻,這期間要滿(mǎn)足2個(gè)條件:首先,錄制途中可能有一個(gè)或多個(gè)用戶(hù)不定次數(shù)的離線(xiàn)、重進(jìn)(網(wǎng)絡(luò)差和人為操作)的情況;第二,要保證合成的視頻和錄制的效果是一樣的必須是同步的(不能出現(xiàn)多個(gè)視頻時(shí)間對(duì)不上的情況)。
基于以上兩個(gè)條件來(lái)說(shuō),程序的實(shí)現(xiàn)難度還是有的,不過(guò)還好,筆者已經(jīng)找到了一些解決方案,下面來(lái)和大家分享一下。
二、解決方案概述
方案一:使用騰訊云互動(dòng)直播和在線(xiàn)錄制,不過(guò)騰訊云錄制的視頻mp4格式,每30分鐘分為一個(gè)文件,也就是說(shuō)錄制途中可能出現(xiàn)多個(gè)視頻,而且錄制之后轉(zhuǎn)碼的時(shí)間不確定,所以錄制之后,要借助數(shù)據(jù)庫(kù)的記錄信息和ffmpeg做多個(gè)視頻的合成。
方案二:使用聲網(wǎng)的互動(dòng)直播和服務(wù)器錄制,缺點(diǎn)是聲網(wǎng)并不提供在線(xiàn)錄制功能,需要用戶(hù)自己部署錄制服務(wù)器,優(yōu)點(diǎn)是聲網(wǎng)錄制的視頻是完整的,并在錄制結(jié)束之后可以立馬查看視頻。
以上兩種方案,都支持一定時(shí)間內(nèi)(5分鐘也可以自己設(shè)定),一個(gè)或多個(gè)人離開(kāi)房間之后有重新進(jìn)入房間的情況,并且不會(huì)影響視頻的錄制,而且視頻也是同步的,不能出現(xiàn)多個(gè)視頻時(shí)間對(duì)不上的情況。
三、騰訊云錄制方案
本文主要講的是視頻錄制與合成,所以關(guān)于互動(dòng)直播的內(nèi)容,并不屬于本文討論的范圍,有對(duì)互動(dòng)直播感興趣的同學(xué)可以點(diǎn)擊鏈接查看,騰訊實(shí)時(shí)音視頻參考地址:http://t.cn/EquSeRo
騰訊云的在線(xiàn)錄制還是比較簡(jiǎn)單的,可以使用Web API的方式實(shí)現(xiàn),參考文檔:https://cloud.tencent.com/document/product/267/9567 調(diào)用接口傳參即可,如果是開(kāi)啟了自動(dòng)錄制功能,連調(diào)用web api都省了,但是靈活性相對(duì)低很多,并且這也是收費(fèi)的,關(guān)于收費(fèi)的細(xì)則詳見(jiàn)下文,所以建議手動(dòng)調(diào)用開(kāi)啟錄制。
本節(jié)重點(diǎn)來(lái)看ffmpeg合成視頻的功能,以下是關(guān)于ffmpeg的介紹
官網(wǎng):http://ffmpeg.org/
下載地址:https://ffmpeg.zeranoe.com/builds/
中文翻譯文檔:https://www.bookstack.cn/read/other-doc-cn-ffmpeg/README.md
ffmpeg的使用還是很簡(jiǎn)單的,通過(guò)上面連接只需要把ffmpeg下載好就可以了,然后通過(guò)調(diào)用命令就可以合成視頻了。因?yàn)槲覀兪莔p4格式的視頻(至于為什么是mp4的,因?yàn)闃I(yè)務(wù)的需求,還要和其他功能銜接,所以必須是mp4格式的),所有就不能直接使用ffmpeg的命令,一次性的合成多個(gè)mp4文件了,但是可以通過(guò)把mp4文件轉(zhuǎn)換成ts格式文件,再一次性的合成多個(gè)視頻并轉(zhuǎn)換視頻為mp4的。
具體步驟如下:
1、 打開(kāi)命令行,切換到ffmpeg的安裝目錄;
2、 使用命令,把多個(gè)mp4文件分別轉(zhuǎn)換成ts格式文件 : ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ;
3、 使用命令,把轉(zhuǎn)換好的多個(gè)ts文件進(jìn)行拼加,并轉(zhuǎn)換視頻格式為mp4 :ffmpeg -i "concat:1.ts|2.ts|3.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4 ;
這樣就完成了視頻的合成。當(dāng)然在合成視頻之前先要把騰訊云的視頻下載下來(lái),合成視頻之后可以選擇把視頻再上傳到騰訊云的云端。
四、聲網(wǎng)錄制方案
和騰訊云相同,聲網(wǎng)的互動(dòng)直播集成文檔:http://t.cn/Eq3RpOS 本節(jié)重點(diǎn)介紹視頻錄制合成功能。
聲網(wǎng)的錄制服務(wù)器要自己配置,首先需要買(mǎi)一個(gè)Linux服務(wù)器,目前只支持Linux哦,然后設(shè)置服務(wù)器,如下所述。
服務(wù)器配置
1、 Ubuntu 12.04+ x64 或 CentOS 6.5+ x64
2、 GCC 4.4+ (一般linux系統(tǒng)都會(huì)預(yù)裝,使用命令:gcc -v查看版本號(hào))
3、 公網(wǎng)IP
4、 域名“qos.agoralab.co”加入白名單
5、 NodeJS 8.9+
服務(wù)器的錄制程序可以使用NodeJS來(lái)實(shí)現(xiàn),這對(duì)于開(kāi)發(fā)者來(lái)說(shuō)也是一件好事,畢竟減低了程序部署的門(mén)檻,它實(shí)現(xiàn)的原理是使用:NodeJS的Express框架來(lái)實(shí)現(xiàn)Restful API的調(diào)用,NodeJS在調(diào)用C++的插件,通過(guò)插件再調(diào)用C++的錄制SDK,完成整個(gè)流程的,如下圖所示:
接下來(lái)就正式進(jìn)入服務(wù)器部署了,步驟如下:
1、下載NodeJs部署程序,訪問(wèn):https://github.com/AgoraIO/Basic-Recording下載zip,部署到你的服務(wù)器;
2、下載錄制SDK,訪問(wèn):http://t.cn/Eq17cLU;
3、解壓錄制SDK并拷貝到NodeJS部署目錄的 record/src/sdk 目錄;
4、安裝node-gyp,使用命令: npm install -g node-gyp ;
5、打開(kāi)終端,進(jìn)入 Agora-Restful-Recording-Nodejs/record 目錄,運(yùn)行sh文件 sh build.sh ,編譯C++的調(diào)用,運(yùn)行成功之后可以看到“agorasdk.node”文件;
以上操作,也可查看官網(wǎng)文檔(英文的):http://t.cn/Eq1ZncK
完成以上操作之后,真正的坑才在等著你,下面來(lái)說(shuō)重點(diǎn)了。
【程序部署的坑】
執(zhí)行完以上操作之后,需要下面的兩項(xiàng)設(shè)置,才能正常的錄制視頻:
1、設(shè)置Linux文件夾權(quán)限: chmod -R 777 /{你的目錄}/Agora-Restful-Recording-Nodejs ;
2、設(shè)置你的互動(dòng)直播客戶(hù)端為直播模式,因?yàn)镹odeJS里面是寫(xiě)死的直播模式,而客戶(hù)端的互動(dòng)直播默認(rèn)的是非直播模式,所以需要設(shè)置:setChannelProfile(1)和setClientRole(1),否則錄制的視頻是純色的背景圖,無(wú)內(nèi)容;
恭喜你經(jīng)過(guò)以上的配置,終于可以運(yùn)行視頻錄制了,到在開(kāi)始之前你需要先運(yùn)行NodeJS的Express項(xiàng)目:
1、使用終端,切換到Agora-Restful-Recording-Nodejs/server目錄,執(zhí)行 npm install 安裝;
2、使用終端 node app.js 運(yùn)行項(xiàng)目;
這個(gè)時(shí)候使用Web API的方式就可以完成調(diào)用了。
開(kāi)始錄制 ,調(diào)用如下:
結(jié)束錄制 ,調(diào)用如下:
【使用小技巧】
聲網(wǎng)的appid參數(shù)配置在程序中,不要通過(guò)參數(shù)傳遞,降低賬號(hào)被盜用的風(fēng)險(xiǎn)
有了以上的步驟就完成了程序的錄制,不過(guò)還有更多的坑在后面等著你,筆者整理了使用中的坑,如下。
【使用中的坑】
1、錄制的視頻不能直接返回mp4地址,需要遍歷文件夾路徑找到mp4格式文件返回。
2、設(shè)置允許離線(xiàn)時(shí)長(zhǎng),此項(xiàng)目默認(rèn)只有10秒,時(shí)間太短了,最好要設(shè)置5分鐘,通過(guò)設(shè)置Agora-Restful-Recording-Nodejs/record/src/agora_node_ext/agora_node_recording.cpp文件中的config.idleLimitSec=300修改運(yùn)行離線(xiàn)時(shí)長(zhǎng)為5分鐘。
3、mp4文件有時(shí)不會(huì)立馬產(chǎn)生,會(huì)出現(xiàn)偶爾遍歷文件夾,mp4文件還沒(méi)產(chǎn)生的情況,這個(gè)時(shí)候直接返回給調(diào)用端會(huì)導(dǎo)致程序缺陷,所有要?jiǎng)?chuàng)建一個(gè)循環(huán)檢測(cè)計(jì)數(shù)器,檢測(cè)mp4文件產(chǎn)生之后再返回給調(diào)用端,保證程序的穩(wěn)定性。
五、總結(jié)
上文分別介紹了兩種視頻錄制合成的技術(shù),下面我們對(duì)兩種合成技術(shù)做一個(gè)對(duì)比,方便開(kāi)發(fā)者選擇更適合自己的技術(shù)方案。
對(duì)比一:功能對(duì)比
騰訊云的在線(xiàn)錄制剛開(kāi)始使用方便,但錄制mp4格式視頻會(huì)產(chǎn)生多個(gè)視頻文件,所以后期的處理比較麻煩。而聲網(wǎng)因?yàn)闆](méi)有自己的在線(xiàn)錄制功能,所以需要開(kāi)發(fā)者自己配置錄制服務(wù)器和保存視頻,但錄制視頻完整(不會(huì)拆分為多個(gè)視頻),支持多個(gè)視頻的自動(dòng)合成和離線(xiàn)重入。
對(duì)比二:服務(wù)器成本對(duì)比
1、騰訊云的收費(fèi)分為三部分:第一部分,每路推流費(fèi)用60元/路,按最高并發(fā)的路數(shù)計(jì)算,比如我們上個(gè)月的高峰期是一百個(gè)人同時(shí)在線(xiàn),那推流的費(fèi)用就按最高分并發(fā)的100*60=6000元;第二部分,云視頻存儲(chǔ)的費(fèi)用,這部分空間的費(fèi)用是很少的;第三部分,視頻合成的服務(wù)器費(fèi)用。
2、聲網(wǎng)只需要錄制服務(wù)器的費(fèi)用,成本相對(duì)可控,,且費(fèi)用不高,比如阿里云的云服務(wù)器,16核 + 32G內(nèi)存 + 35兆固定寬帶每月才3200元。
服務(wù)器成本而言,聲網(wǎng)的服務(wù)器成本低于騰訊云的服務(wù)器成本。
看到這里相信開(kāi)發(fā)者已經(jīng)有了自己的選擇,但不管怎么,希望本文能給大家一個(gè)解決視頻錄制和合成的思路,也希望大家在具體使用的時(shí)候能避開(kāi)文章提到的一些坑。
最后
關(guān)注作者公眾號(hào),了解后續(xù)更多精彩內(nèi)容:
如果覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)到朋友圈或直接分享給你的朋友。
總結(jié)
以上是生活随笔為你收集整理的互动直播的视频录制与合成—支持多人离线重入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 链表竟然比数组慢了1000多倍?(动图+
- 下一篇: 优秀的基数统计算法——HyperLogL