聲網多人視訊錄製與合成支援掉線再錄製 | 掘金技術徵文

王磊的部落格發表於2019-04-11

先來看實現的最終效果:

聲網多人視訊錄製與合成支援掉線再錄製 | 掘金技術徵文

上圖合成了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、視訊合成的畫面是可以自己佈局的,除了可以自定義合成視訊的位置之外,還可以自定義視訊大小,但在改變視訊大小的時候,必須是以下列舉值的其中之一,如下圖:

解析度列舉值

四、總結

希望本文能給大家一個解決視訊錄製和合成的思路,也希望大家在具體使用的時候能避開文章提到的一些坑。

最後

關注下方二維碼,訂閱更多精彩內容。

聲網多人視訊錄製與合成支援掉線再錄製 | 掘金技術徵文

Agora SDK 使用體驗徵文大賽 | 掘金技術徵文,徵文活動正在進行中

相關文章