using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Platform
{
/********************************************************************************
* ** AnyChat Platform Core SDK
* *********************************************************************************/
public class AnyChatCoreSDK
{
#region AnyChat Platform Core SDK 常量定義
// 內核參數定義,API:BRAC_SetSDKOption、BRAC_GetSDKOption 傳入參數
public const int BRAC_SO_AUDIO_VADCTRL = 1; // 音頻靜音檢測控制(參數爲:int型:1打開,0關閉)
public const int BRAC_SO_AUDIO_NSCTRL = 2; // 音頻噪音抑制控制(參數爲:int型:1打開,0關閉)
public const int BRAC_SO_AUDIO_ECHOCTRL = 3; // 音頻迴音消除控制(參數爲:int型:1打開,0關閉)
public const int BRAC_SO_AUDIO_AGCCTRL = 4; // 音頻自動增益控制(參數爲:int型:1打開,0關閉)
public const int BRAC_SO_AUDIO_CPATUREMODE = 5; // 音頻採集模式設置(參數爲:int型:0 發言模式,1 放歌模式,2 卡拉OK模式,3 線路輸入模式)
public const int BRAC_SO_AUDIO_MICBOOST = 6; // 音頻採集Mic增強控制(參數爲:int型:0 取消,1 選中,2 設備不存在[查詢時返回值])
public const int BRAC_SO_RECORD_VIDEOBR = 10; // 錄像視頻碼率設置(參數爲:int型,單位:bps)
public const int BRAC_SO_RECORD_AUDIOBR = 11; // 錄像音頻碼率設置(參數爲:int型,單位:bps)
public const int BRAC_SO_RECORD_TMPDIR = 12; // 錄像文件臨時目錄設置(參數爲字符串PCHAR類型,必須是完整的絕對路徑)
public const int BRAC_SO_SNAPSHOT_TMPDIR = 13; // 快照文件臨時目錄設置(參數爲字符串PCHAR類型,必須是完整的絕對路徑)
public const int BRAC_SO_CORESDK_TMPDIR = 14; // 設置AnyChat Core SDK臨時目錄(參數爲字符串PCHAR類型,必須是完整的絕對路徑)
public const int BRAC_SO_CORESDK_PATH = 20; // 設置AnyChat Core SDK相關組件路徑(參數爲字符串PCHAR類型,必須是完整的絕對路徑)
public const int BRAC_SO_LOCALVIDEO_BITRATECTRL = 30; // 本地視頻編碼碼率設置(參數爲int型,單位bps,同服務器配置:VideoBitrate)
public const int BRAC_SO_LOCALVIDEO_QUALITYCTRL = 31; // 本地視頻編碼質量因子控制(參數爲int型,同服務器配置:VideoQuality)
public const int BRAC_SO_LOCALVIDEO_GOPCTRL = 32; // 本地視頻編碼關鍵幀間隔控制(參數爲int型,同服務器配置:VideoGOPSize)
public const int BRAC_SO_LOCALVIDEO_FPSCTRL = 33; // 本地視頻編碼幀率控制(參數爲int型,同服務器配置:VideoFps)
public const int BRAC_SO_LOCALVIDEO_PRESETCTRL = 34; // 本地視頻編碼預設參數控制(參數爲int型,1-5)
public const int BRAC_SO_LOCALVIDEO_APPLYPARAM = 35; // 應用本地視頻編碼參數,使得前述修改即時生效(參數爲int型:1 使用新參數,0 使用默認參數)
public const int BRAC_SO_LOCALVIDEO_VIDEOSIZEPOLITIC=36;// 本地視頻採集分辯率控制策略(參數爲int型,0 自動向下逐級匹配[默認];1 使用採集設備默認分辯率),當配置的分辯率不被採集設備支持時有效
public const int BRAC_SO_LOCALVIDEO_DEINTERLACE = 37; // 本地視頻反交織參數控制(參數爲int型: 0 不進行反交織處理[默認];1 反交織處理),當輸入視頻源是隔行掃描源(如電視信號)時通過反交織處理可以提高畫面質量
public const int BRAC_SO_NETWORK_P2PPOLITIC = 40; // 本地網絡P2P策略控制(參數爲:int型:0 禁止本地P2P,1 服務器控制P2P[默認],2 上層應用控制P2P連接,3 按需建立P2P連接)
public const int BRAC_SO_NETWORK_P2PCONNECT = 41; // 嘗試與指定用戶建立P2P連接(參數爲int型,表示目標用戶ID),連接建立成功後,會通過消息反饋給上層應用,P2P控制策略=2時有效
public const int BRAC_SO_NETWORK_P2PBREAK = 42; // 斷開與指定用戶的P2P連接(參數爲int型,表示目標用戶ID)[暫不支持,保留]
// 用戶狀態標誌定義,API:BRAC_QueryUserState 傳入參數
public const int BRAC_USERSTATE_CAMERA = 1; // 用戶攝像頭狀態(參數爲DWORD型)
public const int BRAC_USERSTATE_HOLDMIC = 2; // 用戶持有Mic狀態(參數爲DWORD型)
public const int BRAC_USERSTATE_SPEAKVOLUME = 3; // 用戶當前說話音量(參數爲DOUBLE類型(0.0 ~ 100.0))
public const int BRAC_USERSTATE_RECORDING = 4; // 用戶錄像(音)狀態(參數爲DWORD型)
public const int BRAC_USERSTATE_LEVEL = 5; // 用戶級別(參數爲DWORD型)
public const int BRAC_USERSTATE_NICKNAME = 6; // 用戶暱稱(參數爲字符串PCHAR類型)
public const int BRAC_USERSTATE_LOCALIP = 7; // 用戶本地IP地址(內網,參數爲字符串PCHAR類型)
public const int BRAC_USERSTATE_INTERNETIP = 8; // 用戶互聯網IP地址(參數爲字符串PCHAR類型)
public const int BRAC_USERSTATE_VIDEOBITRATE = 9; // 用戶當前的視頻碼率(參數爲DWORD類型,Bps)
public const int BRAC_USERSTATE_AUDIOBITRATE = 10; // 用戶當前的音頻碼率(參數爲DWORD類型,Bps)
public const int BRAC_USERSTATE_P2PCONNECT = 11; // 查詢本地用戶與指定用戶的當前P2P連接狀態(參數爲DWORD類型,返回值:0 P2P不通, 1 P2P連接成功[TCP],2 P2P連接成功[UDP],3 P2P連接成功[TCP、UDP])
public const int BRAC_USERSTATE_NETWORKSTATUS = 12; // 查詢指定用戶的網絡狀態(參數爲DWORD類型,返回值:0 優良,1 較好,2 一般,3 較差,4 非常差),注:查詢間隔需要>1s
// SDK消息定義
public const int WM_GV = 0x0400 + 200;
public const int WM_GV_CONNECT = WM_GV + 1; // 客戶端連接服務器,wParam(BOOL)表示是否連接成功
public const int WM_GV_LOGINSYSTEM = WM_GV + 2; // 客戶端登錄系統,wParam(INT)表示自己的用戶ID號,lParam(INT)表示登錄結果:0 成功,否則爲出錯代碼,參考出錯代碼定義
public const int WM_GV_ENTERROOM = WM_GV + 3; // 客戶端進入房間,wParam(INT)表示所進入房間的ID號,lParam(INT)表示是否進入房間:0成功進入,否則爲出錯代碼
public const int WM_GV_MICSTATECHANGE = WM_GV + 4; // 用戶的Mic狀態變化消息,wParam(INT)表示用戶ID號,lParam(BOOL)表示該用戶是否持有Mic
public const int WM_GV_USERATROOM = WM_GV + 5; // 用戶進入(離開)房間,wParam(INT)表示用戶ID號,lParam(BOOL)表示該用戶是進入(TRUE)或離開(FALSE)房間
public const int WM_GV_LINKCLOSE = WM_GV + 6; // 網絡連接已關閉,該消息只有在客戶端連接服務器成功之後,網絡異常中斷之時觸發,wParam(INT)表示連接斷開的原因
public const int WM_GV_ONLINEUSER = WM_GV + 7; // 收到當前房間的在線用戶信息,進入房間後觸發一次,wParam(INT)表示在線用戶數(包含自己),lParam(INT)表示房間ID
public const int WM_GV_FORTUNEMENU = WM_GV + 8; // 用戶選擇了一項財富菜單項,wParam(INT)表示用戶ID號,lParam(INT)表示財富菜單標記,指示是選擇了哪一項菜單
public const int WM_GV_ROOMWAITQUEUE = WM_GV + 9; // 用戶收到當前房間等待隊列消息,wParam(INT)表示用戶前面的隊列長度,lParam(INT)表示當前房間總的等待隊列長度
public const int WM_GV_ENTERREQUEST = WM_GV + 10; // 用戶申請進入房間消息,wParam(INT)表示用戶ID號,lParam(BOOL)表示該用戶是申請進入(TRUE)房間或離開(FALSE)房間等待隊列
public const int WM_GV_CAMERASTATE = WM_GV + 11; // 用戶攝像頭狀態發生變化,wParam(INT)表示用戶ID號,lParam(INT)表示攝像頭的當前狀態,定義爲:GV_CAMERA_STATE_XXXX
public const int WM_GV_CHATMODECHG = WM_GV + 12; // 用戶聊天模式發生變化,wParam(INT)表示用戶ID號,lParam(INT)表示用戶的當前聊天模式
public const int WM_GV_ACTIVESTATE = WM_GV + 13; // 用戶活動狀態發生變化,wParam(INT)表示用戶ID號,lParam(INT)表示用戶的當前活動狀態
public const int WM_GV_P2PCONNECTSTATE = WM_GV + 14; // 本地用戶與其它用戶的P2P網絡連接狀態發生變化,wParam(INT)表示其它用戶ID號,lParam(INT)表示本地用戶與其它用戶的當前P2P網絡連接狀態
public const int WM_GV_PRIVATEREQUEST = WM_GV + 21; // 用戶發起私聊請求,wParam(INT)表示發起者的用戶ID號,lParam(INT)表示私聊請求編號,標識該請求
public const int WM_GV_PRIVATEECHO = WM_GV + 22; // 用戶回覆私聊請求,wParam(INT)表示回覆者的用戶ID號,lParam(INT)爲出錯代碼
public const int WM_GV_PRIVATEEXIT = WM_GV + 23; // 用戶退出私聊,wParam(INT)表示退出者的用戶ID號,lParam(INT)爲出錯代碼
public const int WM_GV_EXTENDBTNPRESS = WM_GV + 31; // 用戶按下擴展按鈕,wParam(INT)表示按鈕所對應的用戶ID號,lParam(DWORD)指示按鈕(左下角)所在屏幕位置(x,y),用戶可以利用該參數顯示菜單等
public const int WM_GV_SDKWARNING = WM_GV + 41; // SDK警告信息,當SDK在運行過程中自檢發現異常狀態時,將向上層發送該消息,wParam(INT)表示警告代碼,定義爲:GV_ERR_WARNING_XXXX
// SDK出錯代碼定義,其它代碼請參考:C++ SDK目錄中的GVErrorCodeDefine.h文件
public const int GV_ERR_SUCCESS = 0; // 成功
public const ulong BRAC_FUNC_VIDEO_CBDATA = 0x00000001L ;///< 通過回調函數輸出視頻數據
public const ulong BRAC_FUNC_VIDEO_AUTODISP =0x00000002L ;///< 由SDK包處理視頻,將視頻顯示在指定的窗口上
public const ulong BRAC_FUNC_AUDIO_CBDATA = 0x00000004L; ///< 通過回調函數輸出音頻數據
public const ulong BRAC_FUNC_AUDIO_AUTOPLAY =0x00000008L ;///< 由SDK包處理音頻,直接播放
public const ulong BRAC_FUNC_CONFIG_LOCALINI =0x00000010L ;///< 生成本地配置文件(AnyChatSDK.ini)
public const ulong BRAC_FUNC_FIREWALL_OPEN = 0x00000020L; ///< 允許SDK操作Windows防火牆,將當前應用程序加入防火牆訪問列表(避免Windows提示用戶是否阻止當前應用程序)
public const ulong BRAC_FUNC_CHKDEPENDMODULE =0x00000040L ;///< 自動檢查SDK所依賴的組件,並自動註冊
public const ulong BRAC_FUNC_AUDIO_VOLUMECALC= 0x00000080L; ///< 由SDK自動計算語音的音量
public const ulong BRAC_FUNC_AUDIO_AUTOVOLUME= 0x00000100L; ///< 允許SDK自動控制Mic錄音音量
public const ulong BRAC_FUNC_NET_SUPPORTUPNP =0x00000200L ;///< 允許SDK打開用戶網絡中的UPNP設備,如果用戶的路由器或是防火牆支持UPNP協議,則可提高P2P打洞的成功率
public const ulong BRAC_FUNC_DISABLEDECODE = 0x00000400L;///< 禁止對收到的數據進行解碼和播放,爲了提高代理客戶端的數據轉發性能,可設置該標誌,否則不能設置該標誌
// 音頻設備枚舉定義
public enum AudioDevice
{
BRAC_AD_WAVEIN = 0, // 輸入設備:Mic
BRAC_AD_WAVEOUT = 1 // 輸出設備:Wave
}
public enum PixelFormat{
BRAC_PIX_FMT_RGB24 = 0, ///< Packed RGB 8:8:8, 24bpp, RGBRGB...(MEDIASUBTYPE_RGB24)
BRAC_PIX_FMT_RGB32, ///< 對應於:MEDIASUBTYPE_RGB32,Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness
BRAC_PIX_FMT_YV12, ///< 對應於:MEDIASUBTYPE_YV12,Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
BRAC_PIX_FMT_YUY2, ///< 對應於:MEDIASUBTYPE_YUY2,Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
}
[StructLayout(LayoutKind.Sequential)]
//BitmapInfoHeader 定義了位圖的頭部信息
public struct BITMAPINFOHEADER
{
[MarshalAs(UnmanagedType.I4)]
public Int32 biSize;
[MarshalAs(UnmanagedType.I4)]
public Int32 biWidth;
[MarshalAs(UnmanagedType.I4)]
public Int32 biHeight;
[MarshalAs(UnmanagedType.I2)]
public short biPlanes;
[MarshalAs(UnmanagedType.I2)]
public short biBitCount;
[MarshalAs(UnmanagedType.I4)]
public Int32 biCompression;
[MarshalAs(UnmanagedType.I4)]
public Int32 biSizeImage;
[MarshalAs(UnmanagedType.I4)]
public Int32 biXPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]
public Int32 biYPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]
public Int32 biClrUsed;
[MarshalAs(UnmanagedType.I4)]
public Int32 biClrImportant;
}
// 功能模式枚舉定義,API:BRAC_InitSDK 傳入參數
public enum FUNCMode : ulong
{
BRAC_FUNC_VIDEO_CBDATA = 0x00000001L, // 通過回調函數輸出視頻數據
BRAC_FUNC_VIDEO_AUTODISP = 0x00000002L, // 由SDK包處理視頻,將視頻顯示在指定的窗口上
BRAC_FUNC_AUDIO_CBDATA = 0x00000004L, // 通過回調函數輸出音頻數據
BRAC_FUNC_AUDIO_AUTOPLAY = 0x00000008L, // 由SDK包處理音頻,直接播放
BRAC_FUNC_CONFIG_LOCALINI = 0x00000010L, // 生成本地配置文件(AnyChatSDK.ini)
BRAC_FUNC_FIREWALL_OPEN = 0x00000020L, // 允許SDK操作Windows防火牆,將當前應用程序加入防火牆訪問列表(避免Windows提示用戶是否阻止當前應用程序)
BRAC_FUNC_CHKDEPENDMODULE = 0x00000040L, // 自動檢查SDK所依賴的組件,並自動註冊
BRAC_FUNC_AUDIO_VOLUMECALC = 0x00000080L, // 由SDK自動計算語音的音量
BRAC_FUNC_AUDIO_AUTOVOLUME = 0x00000100L, // 允許SDK自動控制Mic錄音音量
BRAC_FUNC_NET_SUPPORTUPNP = 0x00000200L, // 允許SDK打開用戶網絡中的UPNP設備,如果用戶的路由器或是防火牆支持UPNP協議,則可提高P2P打洞的成功率
BRAC_FUNC_DISABLEDECODE = 0x00000400L // 禁止對收到的數據進行解碼和播放,爲了提高代理客戶端的數據轉發性能,可設置該標誌,否則不能設置該標誌
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WaveFormat
{
public short wFormatTag;
public short nChannels;
public uint nSamplesPerSec;
public uint nAvgBytesPerSec;
public short nBlockAlign;
public short wBitsPerSample;
public short cbSize;
}
#endregion
#region AnyChat Platform Core SDK 功能函數API接口封裝
/// <summary>
/// 透明通道數據回調函數定義
/// </summary>
/// <param name="userId">用戶ID</param>
/// <param name="buf">緩衝區</param>
/// <param name="len">緩衝區長度</param>
/// <param name="userValue">附帶信息</param>
public delegate void TransBufferCallBack(int userId, IntPtr buf, int len, int userValue);
/// <summary>
/// 透明通道擴展回調函數定義
/// </summary>
/// <param name="userId">用戶ID</param>
/// <param name="buf">緩衝區</param>
/// <param name="len">緩衝區長度</param>
/// <param name="wParam">緩衝區附帶信息1</param>
/// <param name="lParam">緩衝區附帶信息2</param>
/// <param name="taskId">傳輸任務編號</param>
/// <param name="userValue">自定義參數</param>
public delegate void TransBufferCallBackEx(int userId, IntPtr buf, int len,int wParam,int lParam,int taskId, int userValue);
/// <summary>
/// 傳輸文件回調函數定義
/// </summary>
/// <param name="userId">用戶ID</param>
/// <param name="fileName">文件名</param>
/// <param name="filePath">文件接收後保存在本地的路徑</param>
/// <param name="fileLength">文件長度</param>
/// <param name="wParam">附帶信息1</param>
/// <param name="lParam">附帶信息2</param>
/// <param name="taskId">傳輸任務編號</param>
/// <param name="userValue">自定義參數</param>
public delegate void TransFileCallBack(int userId, string fileName, string filePath, int fileLength, int wParam, int lParam, int taskId, int userValue);
/// <summary>
/// 音量變化回調函數定義
/// </summary>
/// <param name="device">音頻設備</param>
/// <param name="currentVolume">當前音量</param>
/// <param name="lpUserValue">附帶信息</param>
public delegate void VolumeChangeCallBack(AudioDevice device, int currentVolume, int userValue);
public delegate void SDKFilterDataCallBack(IntPtr buf,int len,int userValue);
/// <summary>
/// 錄像回調函數
/// </summary>
/// <param name="userId">用戶id</param>
/// <param name="filePath">錄像保存路徑</param>
/// <param name="param">參數</param>
/// <param name="recordType">錄像類型,1錄像,0拍照</param>
/// <param name="userValue">用戶參數</param>
public delegate void RecordCallBack(int userId, string filePath, int param, bool recordType,int userValue);
/// <summary>
/// 視頻回調函數
/// </summary>
/// <param name="userId"></param>
/// <param name="buf"></param>
/// <param name="len"></param>
/// <param name="bitMap"></param>
/// <param name="userValue"></param>
public delegate void VideoData_CallBack(int userId, IntPtr buf, int len, BITMAPINFOHEADER bitMap, int userValue);
/// <summary>
/// 聲音回調
/// </summary>
/// <param name="userId"></param>
/// <param name="buf"></param>
/// <param name="len"></param>
/// <param name="format"></param>
/// <param name="userValue"></param>
public delegate void AudioData_CallBack(int userId,IntPtr buf,int len,WaveFormat format,int userValue);
/// <summary>
/// 消息接收回調
/// </summary>
/// <param name="fromuserId"></param>
/// <param name="touserId"></param>
/// <param name="isserect"></param>
/// <param name="message"></param>
/// <param name="len"></param>
/// <param name="userValue"></param>
public delegate void TextMessage_CallBack(int fromuserId, int touserId, bool isserect,
string message, int len, int userValue);
/// <summary>
/// 視頻事件註冊
/// </summary>
/// <param name="format"></param>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetVideoDataCallBack")]
public static extern int SetVideoDataCallBack(PixelFormat format, VideoData_CallBack function,int userValue);
/// <summary>
/// SDK Filter 註冊回調
/// </summary>
/// <param name="format"></param>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetSDKFilterDataCallBack")]
public static extern int SetSDKFilterDataCallBack(SDKFilterDataCallBack function, int userValue);
/// <summary>
/// SDK Filter 發送數據到服務器端
/// </summary>
/// <param name="format"></param>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SendSDKFilterData")]
public static extern int SendSDKFilterData(IntPtr buf, int len);
/// <summary>
/// 聲音事件註冊
/// </summary>
/// <param name="format"></param>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetAudioDataCallBack")]
public static extern int SetAudioDataCallBack(AudioData_CallBack function, int userValue);
/// <summary>
/// 註冊文字消息回調
/// </summary>
/// <param name="format"></param>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetTextMessageCallBack")]
public static extern int SetTextMessageCallBack(TextMessage_CallBack function, int userValue);
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetServerAuthPass")]
public static extern int SetServerAuthPass(StringBuilder key);
/// <summary>
/// 發送消息
/// </summary>
/// <param name="userID">-1爲所有人</param>
/// <param name="isSerect">僅用戶id 不爲-1時有效</param>
/// <param name="msg">消息內容</param>
/// <param name="len"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SendTextMessage")]
public static extern int SendTextMessage(int userID,bool isSerect,string msg,int len);
/// <summary>
/// 與服務器端交換
/// </summary>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SendTextMessage")]
public static extern int SendSDKFilterData();
/// <summary>
/// 獲取用戶名
/// </summary>
/// <param name="userId">用戶ID</param>
/// <param name="userName">用戶名</param>
/// <param name="bufLen">緩衝區長度</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetUserName")]
public static extern int GetUserName(int userId, StringBuilder userName, int bufLen);
/// <summary>
/// 初始化系統
/// </summary>
/// <param name="hWnd">接收消息窗口句柄,可爲空</param>
/// <param name="funcMode">功能模式</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_InitSDK")]
public static extern int InitSDK(IntPtr hWnd, ulong funcMode);
/// <summary>
/// 設置透明通道數據回調函數
/// </summary>
/// <param name="function">回調函數</param>
/// <param name="userValue">附帶信息</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetTransBufferCallBack")]
public static extern int SetTransBufferCallBack(TransBufferCallBack function, int userValue);
/// <summary>
/// 設置透明通道擴展回調函數
/// </summary>
/// <param name="function">回調函數</param>
/// <param name="userValue">附帶信息</param>
/// <returns>0爲成功,否則失敗</param>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetTransBufferExCallBack")]
public static extern int SetTransBufferExCallBack(TransBufferCallBackEx function, int userValue);
/// <summary>
/// 設置文件傳輸回調函數
/// </summary>
/// <param name="function">回調函數</param>
/// <param name="userValue">附帶信息</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetTransFileCallBack")]
public static extern int SetTransFileCallBack(TransFileCallBack function, int userValue);
/// <summary>
/// 設置音量變化回調函數
/// </summary>
/// <param name="function">回調函數</param>
/// <param name="userValue">附帶信息</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetVolumeChangeCallBack")]
public static extern int SetVolumeChangeCallBack(VolumeChangeCallBack function, int userValue);
/// <summary>
/// 設置錄像回調函數
/// </summary>
/// <param name="function"></param>
/// <param name="userValue"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetRecordSnapShotCallBack")]
public static extern int SetRecordCallBack(RecordCallBack function, int userValue);
/// <summary>
/// 連接服務器
/// </summary>
/// <param name="serverAddr">服務器地址</param>
/// <param name="port">端口號</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_Connect")]
public static extern int Connect(string serverAddr, int port);
/// <summary>
/// 登錄系統
/// </summary>
/// <param name="userName">用戶名</param>
/// <param name="password">密碼</param>
/// <param name="passEncType">是否加密</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_Login")]
public static extern int Login(string userName, string password, int passEncType);
/// <summary>
/// 進入房間
/// </summary>
/// <param name="roomid">房間號</param>
/// <param name="roomPass">房間密碼</param>
/// <param name="passEncType">是否加密</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_EnterRoom")]
public static extern int EnterRoom(int roomid, string roomPass, int passEncType);
/// <summary>
/// 離開房間
/// </summary>
/// <param name="roomid">房間號</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_LeaveRoom")]
public static extern int LeaveRoom(int roomid);
/// <summary>
/// 註銷系統
/// </summary>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_Logout")]
public static extern int Logout();
/// <summary>
/// 釋放所有資源
/// </summary>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_Release")]
public static extern int Release();
/// <summary>
/// 獲取當前房間在線用戶列表
/// </summary>
/// <param name="userIDArray">用戶列表</param>
/// <param name="userNum">用戶數量</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetOnlineUser")]
public static extern int GetOnlineUser(int[] userIDArray, ref int userNum);
/// <summary>
/// 查詢用戶攝像頭的狀態
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="state">當前狀態,0爲沒有攝像頭,1爲有但沒打開,2爲已打開</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetCameraState")]
public static extern int GetCameraState(int userid, ref int state);
/// <summary>
/// 查詢用戶發言狀態
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="state">0爲沒說話,1爲正在說話</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetSpeakState")]
public static extern int GetSpeakState(int userid, ref int state);
/// <summary>
/// 查詢指定用戶相關狀態(非字符串類型)
/// </summary>
/// <param name="userid">用戶編號</param>
/// <param name="infoname">參數名,參考常量定義:BRAC_USERSTATE_XXXX</param>
/// <param name="infoval">參數地址</param>
/// <param name="infolen">參數長度</param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_QueryUserState")]
public static extern int QueryUserState(int userid, int infoname, ref int infoval, int infolen);
// BRAC_API DWORD BRAC_QueryUserState(DWORD dwUserId, int infoname, char FAR* infoval, int infolen);
/// <summary>
/// 查詢指定用戶相關狀態(字符串類型)
/// </summary>
/// <param name="userid">用戶編號</param>
/// <param name="infoname">參數名,參考常量定義:BRAC_USERSTATE_XXXX</param>
/// <param name="infoval">參數地址</param>
/// <param name="infolen">參數長度</param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_QueryUserState")]
public static extern int QueryUserState(int userid, int infoname, StringBuilder infoval, int infolen);
// BRAC_API DWORD BRAC_QueryUserState(DWORD dwUserId, int infoname, char FAR* infoval, int infolen);
/// <summary>
/// 顯示本地視頻畫面調節對話框
/// </summary>
/// <param name="parent">父窗體句柄</param>
/// <param name="caption">窗體標題</param>
/// <param name="dwX">X位置</param>
/// <param name="dwY">Y位置</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_ShowLVProperty")]
public static extern int ShowLVProperty(IntPtr parent, string caption, int dwX, int dwY);
/// <summary>
/// 操作用戶視頻
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="open">是否打開</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_UserCameraControl")]
public static extern int UserCameraControl(int userid, bool open);
/// <summary>
/// 操作用戶語音
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="open">是否打開</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_UserSpeakControl")]
public static extern int UserSpeakControl(int userid, bool open);
/// <summary>
/// 設置視頻顯示位置
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="hWnd">窗口句柄</param>
/// <param name="left">左位置</param>
/// <param name="top">上位置</param>
/// <param name="right">右位置</param>
/// <param name="bottom">底位置</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetVideoPos")]
public static extern int SetVideoPos(int userid, IntPtr hWnd, int left, int top, int right, int bottom);
/// <summary>
/// 獲取指定音頻設備的當前音量
/// </summary>
/// <param name="device">音頻設備</param>
/// <param name="volume">音量</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_AudioGetVolume")]
public static extern int AudioGetVolume(AudioDevice device, ref int volume);
/// <summary>
/// 設置指定音頻設備的音量
/// </summary>
/// <param name="device">音頻設備</param>
/// <param name="volume">音量</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_AudioSetVolume")]
public static extern int AudioSetVolume(AudioDevice device, int volume);
/// <summary>
/// 利用透明通道傳送數據
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="buf">緩衝區</param>
/// <param name="len">緩衝區長度</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_TransBuffer")]
public static extern int TransBuffer(int userid, IntPtr buf, int len);
/// <summary>
/// 利用擴展透明通道傳送數據
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="buf">緩衝區</param>
/// <param name="len">緩衝區長度</param>
/// <param name="wParam">附帶信息1</param>
/// <param name="lParam">附帶信息2</param>
/// <param name="flag">特殊標誌,默認爲0</param>
/// <param name="taskId">任務ID,添加任務後系統自動生成</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_TransBufferEx")]
public static extern int TransBufferEx(int userid, IntPtr buf, int len, int wParam, int lParam, int flag, ref int taskId);
/// <summary>
/// 傳送文件
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="localFilePath">本地文件路徑</param>
/// <param name="wParam">附帶信息1</param>
/// <param name="lParam">附帶信息2</param>
/// <param name="flag">特殊標誌</param>
/// <param name="taskId">任務ID</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_TransFile")]
public static extern int TransFile(int userid, string localFilePath, int wParam, int lParam, int flag, ref int taskId);
/// <summary>
/// 開啓或關閉錄像
/// </summary>
/// <param name="userId">用戶id</param>
/// <param name="startRecord">是否開啓錄像</param>
/// <param name="flags">標誌,0爲錄製視頻音頻</param>
/// <param name="param">參數</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_StreamRecordCtrl")]
public static extern int StreamRecordCtrl(int userId, bool startRecord, ulong flags, int param);
/// <summary>
/// 抓取視頻,對指定用戶進行拍照
/// </summary>
/// <param name="userId"></param>
/// <param name="flags"></param>
/// <param name="param"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SnapShot")]
public static extern int SnapShot(int userId, ulong flags, int param);
/// <summary>
/// 是否打開SDK日記
/// </summary>
/// <param name="isOpen">是否打開</param>
/// <returns>0爲成功,否則失敗</returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_ActiveCallLog")]
public static extern int ActiveCallLog(bool isOpen);
/// <summary>
/// 設置SDK內核參數(字符串類型)
/// </summary>
/// <param name="optName">參數名</param>
/// <param name="optval">參數值</param>
/// <param name="optlen">參數長度</param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetSDKOption")]
public static extern int SetSDKOption(int optName, string optval, int optlen);
/// <summary>
/// 設置SDK內核參數(非字符串類型,INT、BOOL類型)
/// </summary>
/// <param name="optName">參數名,參考常量定義:BRAC_SO_XXXX</param>
/// <param name="optval">參數地址</param>
/// <param name="optlen">參數長度</param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SetSDKOption")]
public static extern int SetSDKOption(int optName, ref int optval, int optlen);
/// <summary>
/// 獲取SDK內核參數
/// </summary>
/// <param name="optName">參數名,參考常量定義:BRAC_SO_XXXX</param>
/// <param name="optval">保存參數值的緩衝區地址</param>
/// <param name="optlen">參數緩衝區大小</param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetSDKOption")]
public static extern int GetSDKOption(int optName, ref int optval, int optlen);
/// <summary>
/// 枚舉視頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <param name="deviceNum"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_EnumVideoCapture")]
public static extern int EnumVideoCapture(IntPtr[] deviceName, ref int deviceNum);
/// <summary>
/// 指定特定視頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SelectVideoCapture")]
public static extern int SelectVideoCapture(string deviceName);
/// <summary>
/// 獲取當前視頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <param name="length"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetCurVideoCapture")]
public static extern int GetCurVideoCapture(StringBuilder deviceName, int length);
/// <summary>
/// 枚舉音頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <param name="deviceNum"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_EnumAudioCapture")]
public static extern int EnumAudioCapture(IntPtr[] deviceName, ref int deviceNum);
/// <summary>
/// 指定特定音頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_SelectAudioCapture")]
public static extern int SelectAudioCapture(string deviceName);
/// <summary>
/// 獲取當前音頻設備
/// </summary>
/// <param name="deviceName"></param>
/// <param name="length"></param>
/// <returns></returns>
[DllImport("BRAnyChatCore.dll", EntryPoint = "BRAC_GetCurAudioCapture")]
public static extern int GetCurAudioCapture(StringBuilder deviceName, int length);
#endregion
}
}
詳細代碼請查看附件
附件:http://download.csdn.net/detail/bairui_allen/4811682