先來看實現的最終效果:java
上圖合成了2我的視頻,中途有1我的先離開以後又從新加入了房間。node
業務場景是這樣的:多個用戶(2-4人)直播的視頻,合成爲一個視頻,這期間要知足2個條件:linux
第一:錄製途中可能有一個或多個用戶不定次數的離線、重進(網絡差和人爲操做)的狀況;git
第二:要保證合成的視頻和錄製的效果是同樣的必須是同步的(不能出現多個視頻時間對不上的狀況)。github
因爲有以上兩個條件限制,因此程序的實現難度仍是有的,不過還好,筆者已經找到了聲網的解決方案,下面來和你們分享一下。npm
使用聲網的互動直播和服務器錄製,缺點是聲網並不提供在線錄製功能,須要用戶本身部署錄製服務器,優勢是聲網錄製的視頻是完整的,並在錄製結束以後能夠立馬查看視頻。服務器
這種方案支持必定時間內(5分鐘或本身自定義時長),一個或多我的離開房間以後有從新進入房間的狀況,而且不會影響視頻的錄製,並且視頻也是同步的,不能出現多個視頻時間對不上的狀況。網絡
聲網的互動直播集成文檔: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文件產生以後再返回給調用端,保證程序的穩定性。
四、視頻合成的畫面是能夠本身佈局的,除了能夠自定義合成視頻的位置以外,還能夠自定義視頻大小,但在改變視頻大小的時候,必須是如下枚舉值的其中之一,以下圖:
但願本文能給你們一個解決視頻錄製和合成的思路,也但願你們在具體使用的時候能避開文章提到的一些坑。