先來看實現的最終效果:
上圖合成了2個人視訊,中途有1個人先離開之後又重新加入了房間。
一、業務場景
業務場景是這樣的:多個使用者(2-4人)直播的視訊,合成為一個視訊,這期間要滿足2個條件:
第一:錄製途中可能有一個或多個使用者不定次數的離線、重進(網路差和人為操作)的情況;
第二:要保證合成的視訊和錄製的效果是一樣的必須是同步的(不能出現多個視訊時間對不上的情況)。
由於有以上兩個條件限制,所以程式的實現難度還是有的,不過還好,筆者已經找到了聲網的解決方案,下面來和大家分享一下。
二、解決方案概述
使用聲網的互動直播和伺服器錄製,缺點是聲網並不提供線上錄製功能,需要使用者自己部署錄製伺服器,優點是聲網錄製的視訊是完整的,並在錄製結束之後可以立馬檢視視訊。
這種方案支援一定時間內(5分鐘或自己自定義時長),一個或多個人離開房間之後有重新進入房間的情況,並且不會影響視訊的錄製,而且視訊也是同步的,不能出現多個視訊時間對不上的情況。
三、聲網的錄製方案
聲網的互動直播整合文件:t.cn/Eq3RpOS 本節重點介紹視訊錄製合成功能。
聲網的錄製伺服器要自己配置,首先需要買一個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…
2、下載錄製SDK,訪問:t.cn/Eq17cLU;
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”檔案;
以上操作,也可檢視官網文件(英文的):t.cn/Eq1ZncK
完成以上操作之後,真正的坑才在等著你,下面來說重點了。
【程式部署的坑】
執行完以上操作之後,需要下面的兩項設定,才能正常的錄製視訊:
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、視訊合成的畫面是可以自己佈局的,除了可以自定義合成視訊的位置之外,還可以自定義視訊大小,但在改變視訊大小的時候,必須是以下列舉值的其中之一,如下圖:
四、總結
希望本文能給大家一個解決視訊錄製和合成的思路,也希望大家在具體使用的時候能避開文章提到的一些坑。
最後
關注下方二維碼,訂閱更多精彩內容。