音視頻錄製是音視頻解決方案中最重要的功能特性之一,特別是一些行業應用中音視頻錄製是最基本的功能需求,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);
3.
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. BRAC_StreamRecordCtrlEx(userid, 1, dwFlags, 0,"Hello, world!");
複製代碼
3、客戶端對通話雙方的音頻、視頻進行錄製,錄製爲MP4格式,畫中畫模式:
1. BRAC_SetSDKOption(BRAC_SO_RECORD_FILETYPE, 0); // 錄製爲MP4格式
2. var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO +ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO +ANYCHAT_RECORD_FLAGS_MIXAUDIO;
3. BRAC_StreamRecordCtrlEx(userid, 1, dwFlags, 0,"Hello, world!");
複製代碼
四、其它
1、客戶端可以通過API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR, path)來設置錄像文件保存路徑;
2、有關錄像文件改名:錄製完成之後,AnyChat將觸發上層應用的錄製完成回調事件,在回調事件中返回錄製文件名(含路徑),上層應用可以在回調事件中調用操作系統提供的文件改名函數(如Windows平臺爲:MoveFile函數)對文件進行改名操作,AnyChat內核本身沒有提供對錄製文件名進行修改的接口;