天天看點

音視訊錄制功能開發

    音視訊錄制是音視訊解決方案中最重要的功能特性之一,特别是一些行業應用中音視訊錄制是最基本的功能需求,AnyChat作為業界一流的跨平台音視訊解決方案,在音視訊錄制方面也提供了非常完善的整體解決方案,概括起來有如下特點:

      1.   可針對單個使用者的音頻、視訊進行錄制;

      2.   可針對通話雙方的音頻、視訊合成錄制,支援畫中畫、并列模式等多種合成方式;

      3.   可以自定義錄制參數,包括錄制碼率、視訊分辯率等;

      4.   錄制的視訊格式可自定義,支援MP4(預設)、WMV、FLV、MP3等;

      5.   可以在用戶端錄制,也可以在中心伺服器錄制;

      6.   可以在用戶端進行音視訊合成,中心伺服器對合成音視訊流錄制,錄像伺服器支援高并發;

      7.   用戶端錄制支援的平台包括:Windows、Web、Android、iOS、Linux;

      8.   伺服器錄制支援的平台包括:Windows、Linux(x86、x64);

      9.   提供用戶端錄制API、伺服器錄制API接口,與上層業務無縫內建;

一、API接口定義

   AnyChat在用戶端提供的錄制API接口與回調事件為:

1.  // 使用者音、視訊錄制(擴充)

2.  BRAC_API DWORD BRAC_StreamRecordCtrlEx(DWORD dwUserId,BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);

3.   

4.  // 錄像、快照任務完成擴充回調函數定義

5.  typedef void (CALLBACK *BRAC_RecordSnapShotEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);

複制代碼

AnyChat在伺服器端提供的錄制API接口與回調事件為:

1.  // 中心端錄像控制(擴充)

2.  BRAS_API DWORD BRAS_StreamRecordCtrlEx(DWORD dwUserId,BOOL bStartRecord, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr=NULL, DWORDdwRecordServerId=-1);

4.  // 伺服器錄像回調函數定義(擴充)

5.  typedef void (CALLBACK *BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORDdwRecordServerId, LPVOID lpUserValue);

二、錄制API調用

   API第一個參數表示錄制對象,指錄制某一個使用者的音視訊,對于合成錄制,隻需要通過第三個參數(dwFlags)加入特定的标志即可實作。

   開始錄制以及停止錄制均調用同一個API接口(如用戶端為:BRAC_StreamRecordCtrlEx),通過第二個參數(bStartRecord)來控制,當bStartRecord=TRUE(1)時,表示開始錄制,當bStartRecord=FALSE(0)時,表示停止錄制。

   當調用API開始錄制時,相當于下達了一個錄制任務,AnyChat核心将開始錄制,可以在用戶端調用API(BRAC_QueryUserState)來查詢錄制狀态;通過第三個參數(dwFlags)可控制錄制行為:是在用戶端錄制,還是在伺服器錄制;是錄制音頻,還是音視訊一同錄制;是錄制單個使用者,還是通話雙方合成錄制等,具體應用可參考後續的“錄制功能示例”部分。

   當調用API停止錄制時,AnyChat核心會結束錄制任務,同時觸發上層應用的回調事件(如用戶端為:BRAC_RecordSnapShotEx_CallBack),在回調事件中,将錄制檔案名(含路徑)、錄制時長、使用者自定義參數等資訊傳回給上層應用。

   AnyChat核心提供了兩個自定義參數,一個是×××(dwParam),一個是字元串類型(lpUserStr),在開始錄制時通過API接口傳入,在錄制完成回調事件中傳回給上層應用,如可以通過字元串類型自定義參數來傳輸一個上層應用的業務流水号,則可以實作在回調事件中将錄制的檔案名與業務流水号進行關聯,儲存在資料庫中等功能。

三、錄制功能示例

下面以JavaScript腳本為例,針對常用的錄制功能給出示例代碼:

1、用戶端對單個使用者的音頻、視訊進行錄制,錄制為MP4格式

1.  BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0);   // 錄制為MP4格式

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO +ANYCHAT_RECORD_FLAGS_AUDIO;

3.  BRAC_StreamRecordCtrlEx(userid, 1,  dwFlags, 0,"Hello, world!");

2、用戶端對單個使用者的音頻進行錄制,錄制為MP3格式

1.  BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 3);   // 錄制為MP3格式

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_AUDIO;

3、用戶端對通話雙方的音頻、視訊進行錄制,錄制為MP4格式,畫中畫模式:

2.  var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO +ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO +ANYCHAT_RECORD_FLAGS_MIXAUDIO;

四、其它

1、用戶端可以通過API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)來設定錄像檔案儲存路徑;

2、有關錄像檔案改名:錄制完成之後,AnyChat将觸發上層應用的錄制完成回調事件,在回調事件中傳回錄制檔案名(含路徑),上層應用可以在回調事件中調用作業系統提供的檔案改名函數(如Windows平台為:MoveFile函數)對檔案進行改名操作,AnyChat核心本身沒有提供對錄制檔案名進行修改的接口;

繼續閱讀