標籤:移動音視頻開發 即時通訊 移動視頻會議
到新公司上班,接收的第一個項目是視頻會議系統,基於AnyChat進行二次開發,在官網下載了demo瞭解後,發現缺少了一個傳送檔案功能,所以自己在原有的demo進行修改,增加了一個傳送檔案功能。
AnyChat具有緩衝區及檔案傳輸功能,檔案傳輸API介面:BRAC_TransFile,A、B兩使用者登入伺服器成功之後,便可使用檔案傳輸API介面傳送檔案,當A使用API介面:BRAC_TransFile向B傳送檔案時,B收到檔案後,將觸發B的回呼函數:檔案傳輸回呼函數。
傳送檔案介面說明:
int TransFile(int userid, String filepath, int wparam, int lparam,int flags, AnyChatOutParam outParam);
功能:傳送檔案給指定使用者
傳回值:0表示函數調用成功,否則為出錯代碼
參數:
userid: 目標使用者編號,只針對某一個使用者,不能為-1(所有人)
filepath: 本地檔案名稱,含路徑
wParam: 附帶參數1,便於上層應用擴充
lParam: 附帶參數2
dwFlags: 特殊功能標誌,參考:“TransBufferEx”方法
outParam: 若函數調用成功,則核心通過該參數輸出任務ID
在使用中,附帶參數以及特殊功能標識是保留參數,不需要用到,賦值為0就可以了。一開始在設定outParam參數時設定為null,程式發生異常,查閱官方文檔後發現,當函數調用成功,核心會通過outParam的SetIntValue方法設定任務ID(TaskId)。
B使用者要實現接收檔案傳輸回呼函數需要做兩個工作。
1、在需要接收的類實現AnyChatTransDataEvent介面
2、設定回調接收函數SetTransDataEvent
(註:AnyChatTransDataEvent和SetTransDataEvent是由AnyChat提供的api)
檔案傳輸回呼函數說明:
public void OnAnyChatTransFile(int dwUserid, String FileName,String TempFilePath, int dwFileLength, int wParam, int lParam, int dwTaskId);
參數:
dwUserid: 使用者ID,指示發送使用者
FileName: 檔案名稱(含副檔名,不含路徑)
TempFilePath: 接收完成後,SDK儲存在本地的臨時檔案(包含完整路徑)
dwFileLength: 檔案總長度
wParam:
lParam:
dwTaskId: 該檔案所對應的任務編號
主要代碼如下,注釋的也比較清楚。詳細的可參考《AnyChat for Android SDK開發手冊》。(AnyChat for Android SDK:http://www.anychat.cn/download.html)
RoomActivity.java
在傳輸過程中還可以通過QueryTransTaskInfo介面查詢傳輸任務相關資訊,需要傳人使用者id以及任務id等參數。
查詢傳輸任務相關資訊介面說明:
INT QueryTransTaskInfo(INT Userid, INT TaskId,int infoname, AnyChatOutParam outParam);
功能:查詢與傳輸任務相關的資訊,如傳輸進度、傳輸狀態、傳輸碼率等
傳回值:0表示查詢成功,否則為出錯代碼
參數:
dwUserid:任務發起者使用者編號(並非傳輸目標使用者編號)
dwTaskId:需要查詢的任務編號
infoname 需要查詢的資訊代碼(見備忘附表)
outParam:若函數調用成功,則核心通過該參數輸出查詢結果
anychat.QueryTransTaskInfo(dwUserId,taskId,AnyChatDefine.BRAC_TRANSTASK_STATUS, outParam);
AnyChatDefine.BRAC_TRANSTASK_STATUS是一個常量值為3,用於查詢任務目前狀態,通過outParam.GetIntValue()取得任務狀態值,2為傳輸狀態,3為完成狀態,
詳細的可參考《AnyChat for Android SDK開發手冊》
本文出自 “音視頻技術” 部落格,請務必保留此出處http://2343338.blog.51cto.com/2333338/1578955
android移動視頻會議系統開發