即時通訊 音視頻錄制技術
來源:程序員人生 發布時間:2015-01-12 08:59:05 閱讀次數:3633次
音視頻錄制是音視頻解決方案中最重要的功能特性之1,特別是1些行業利用中音視頻錄制是最基本的功能需求,AnyChat作為業界1流的跨平臺音視頻解決方案,在音視頻錄制方面也提供了非常完善的整體解決方案,概括起來有以下特點:
1. 可針對單個用戶的音頻、視頻進行錄制;
2. 可針對通話雙方的音頻、視頻合成錄制,支持畫中畫、并列模式等多種合成方式;
3. 可以自定義錄制參數,包括錄制碼率、視頻辯白率等;
4. 錄制的視頻格式可自定義,支持MP4(默許)、WMV、FLV、MP3等;
5. 可以在客戶端錄制,也能夠在中心服務器錄制;
6. 可以在客戶端進行音視頻合成,中心服務器對合成音視頻流錄制,錄相服務器支持高并發;
7. 客戶端錄制支持的平臺包括:Windows、Web、Android、iOS、Linux;
8. 服務器錄制支持的平臺包括:Windows、Linux(x86、x64);
9. 提供客戶端錄制API、服務器錄制API接口,與上層業務無縫集成;
1、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=⑴);
3.
4. // 服務器錄相回調函數定義(擴大)
5. typedef
void (CALLBACK *BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORDdwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORDdwRecordServerId, LPVOID lpUserValue);
復制代碼
2、錄制API調用
API第1個參數表示錄制對象,指錄制某1個用戶的音視頻,對合成錄制,只需要通過第3個參數(dwFlags)加入特定的標志便可實現。
開始錄制和停止錄制均調用同1個API接口(如客戶端為:BRAC_StreamRecordCtrlEx),通過第2個參數(bStartRecord)來控制,當bStartRecord=TRUE(1)時,表示開始錄制,當bStartRecord=FALSE(0)時,表示停止錄制。
當調用API開始錄制時,相當于下達了1個錄制任務,AnyChat內核將開始錄制,可以在客戶端調用API(BRAC_QueryUserState)來查詢錄制狀態;通過第3個參數(dwFlags)可控制錄制行動:是在客戶端錄制,還是在服務器錄制;是錄制音頻,還是音視頻1同錄制;是錄制單個用戶,還是通話雙方合成錄制等,具體利用可參考后續的“錄制功能示例”部份。
當調用API停止錄制時,AnyChat內核會結束錄制任務,同時觸發上層利用的回調事件(如客戶端為:BRAC_RecordSnapShotEx_CallBack),在回調事件中,將錄制文件名(含路徑)、錄制時長、用戶自定義參數等信息返回給上層利用。
AnyChat內核提供了兩個自定義參數,1個是整形(dwParam),1個是字符串類型(lpUserStr),在開始錄制時通過API接口傳入,在錄制完成回調事件中返回給上層利用,如可以通過字符串類型自定義參數來傳輸1個上層利用的業務流水號,則可以實現在回調事件中將錄制的文件名與業務流水號進行關聯,保存在數據庫中等功能。
3、錄制功能示例
下面以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!");
復制代碼
4、其它
1、客戶端可以通過API:BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,
path)來設置錄相文件保存路徑;
2、有關錄相文件改名:錄制完成以后,AnyChat將觸發上層利用的錄制完成回調事件,在回調事件中返回錄制文件名(含路徑),上層利用可以在回調事件中調用操作系統提供的文件改名函數(如Windows平臺為:MoveFile函數)對文件進行改名操作,AnyChat內核本身沒有提供對錄制文件名進行修改的接口;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈