即時通訊開發平臺的部分C#程式碼
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
}
}
詳細程式碼請檢視附件
相關推薦
即時通訊開發平臺的部分C#程式碼
using System; using System.Text; using System.Runtime.InteropServices; namespace Platform { /**********************
即時通訊開發平臺的部分C#原始碼
using System; using System.Text; using System.Runtime.InteropServices; namespace Platform { /*********************
即時通訊開發平臺AnyChat
AnyChat開發平臺 Anychat(AnyChat即時通訊開發平臺)是一套跨平臺的(*)即時通訊解決方案,基於先進的H.264視訊編碼標準、AAC音訊編碼標準與P2P技術,支援高清視訊,整合了佰銳科技在音視訊編碼、多媒體通訊領域領先的開發技術和豐富的產品經驗而設計的
即時通訊開發平臺AnyChat 的效能優勢
一.AnyChat SDK 的優勢 1.技術優勢 1.2視訊技術: AnyChat採用國際領先的視訊編碼標準H.264(MPEG-4part 10 AVC /H.264)編碼,H.264/AVC 在壓縮效率方面有著特殊的表現,一般情況下達到 MPEG-2 及 MPEG
手機即時通訊開發平臺
即時通訊是目前最為流行的通訊方式,而各種各樣的即時通訊軟體也層出不窮;服務提供商也提供了越來越豐富的通訊服務功能。目前在安卓平臺下的主流即時通訊軟體有:AnyChat、QQ、ICQ、MSN、新浪微博等。隨著網際網路的發展,即時通訊的運用將日益廣泛,即時通訊軟體業
即時通訊開發
界面 pan sim sat edit log ssi 設置 ted 第一步:設置基本配置AppID:app_idAppSecret:app_secret用戶ID:user_id設備ID:device_id第二步:創建WebSokect服務,取得session_id(Ses
JNI開發中在c程式碼中列印日誌
JNI開發在c程式碼中列印日誌 Android.mk檔案增加以下內容 LOCAL_LDLIBS += -llog C程式碼中增加以下內容#include <android/log.h> #define LOG_TAG "System.out" #define LOG
整合框架 javaweb開發平臺ssmy_m(與程式碼生成) java struts2 mybatis spring maven jquery
本頁地址 http://blog.csdn.net/lpy3654321/article/details/31841573 專案設想,在專案開發中,我們的
C#微信公眾號全攻略(3)--接管所有訊息驗證部分 C#程式碼
新建網站 新建一般處理程式 怎麼操作SQL資料庫不寫了 只發一些關鍵部分程式碼 一般處理程式關鍵程式碼 public class Interface : IHttpHandler { public stati
Android 即時通訊開發小結(一)
《Android 即時通訊開發小結》基於IM Andriod 開發的各種常見問題,結合網易雲信即時通訊技術的實踐,對 IM 開發做一個全面的總結。相關推薦閱讀:、客戶端架構作為一個 IM 軟體,最重要的一個特性就是保證訊息的達到率和實時性。達到率受伺服器效能和設計協議影響,後
B/S架構快速開發平臺如何用程式碼實現登陸
有時候我們可能要從別的系統直接登入到ES2007的Web系統中,並且可以希望利用原來系統的登入資訊直接登入。java中,利用com.egosystems.exkernel.Common類的public static boolean CheckUser(String username, String pwd,
音視訊即時通訊開發中使用P2P技術的好處
在伺服器的配置檔案“AnyChatCoreServer.ini”中網路配置部分,“RoutingPolicy”欄位表示了P2P資料路由傳輸策略的配置資訊,可取值分別表示: 1 伺服器轉發模式, 所有資料傳輸均由伺服器轉發(禁止P2P); 2 P2P直傳模式,NAT穿透成功的使用者之間互傳,穿透失敗的使
最近在推廣一款快速開發平臺,C/S架構中最好的快速開發平臺
如果您看了這篇文章,需要詳細瞭解的可以找我,微信QQ同號:418181574 度量快速開發平臺,是度量科技自主開發的基於SOA面向服務的應用系統開發平臺,可以方便快捷的搭建企業、醫院、工廠、學校等行業的企業級運營管理平臺。平臺採用.net.技術構架,webse
數字資產交易管理即時通訊平臺,區塊鏈IM即時通訊系統開發數字資產交易
區塊鏈 watermark 客戶 架構設計方法 這一 jpg src 比特 得到 從幣圈玩家的角度來看數字資產交易所的即時通訊問題,一直都存在著巨大的鴻溝。溝通難的問題一直沒有得到解決,之前對於客戶關系管理或者用戶與用戶之間都只是建立以論壇或者交易所聊天框的形式進行溝通。為
C#支付寶當面付掃碼支付開發,包括demo程式碼的修改和螞蟻金服開發平臺的配置
支付寶開發前配置: 第一步登陸螞蟻金服開放平臺服:支付寶掃碼登陸 登入之後看到一下介面,找到自主研發選項,點選開始入駐 配置自己的個人資訊: 到此為止我們所有應該做的配置基本上就完成了,但是我們要注意幾個概念: 支付閘道器
MQTT是IBM開發的一個即時通訊協議,構建於TCP/IP協議上,是物聯網IoT的訂閱協議,借助消息推送功能,可以更好地實現遠程控制
集合 cap 消息處理 簡易 遠程控制 mes ogr 設計思想 成本 最近一直做物聯網方面的開發,以下內容關於使用MQTT過程中遇到問題的記錄以及需要掌握的機制原理,主要講解理論。 背景 MQTT是IBM開發的一個即時通訊協議。MQTT構建於TCP/IP協議上
VisualStudio移動開發(C#、VB.NET)Smobiler開發平臺——AlbumView相冊控件的使用方式
vb.net add 使用 [1] 方式 enter 模式 bubuko aso AlbumView控件 一、 樣式一 我們要實現上圖中的效果,需要如下的操作: 從工具欄上的“Smobiler Components”拖動一個AlbumView控件到窗
高性能服務器開發基礎系列 (七)——開源一款即時通訊軟件的源碼
c++ 服務器 在我的《高性能服務器開發基礎系列》這個系列的第一篇至第六篇都是講了一些零散的不成體系的網絡編程細節。今天,在這篇文章中,我將介紹一款我自主開發的即時通訊軟件flamingo(中文:火烈鳥),並開源其服務器和pc客戶端代碼。以此來對前幾篇文章中說到的理論進行實踐。 代碼在github和c
HiSDP —— 高效的C++軟件開發平臺
eset padding http 成了 發出 software 服務器環境 維護 參考 目前阿裏集團每天有近1000PB的數據是通過LogAgent采集的,為了讓LogAgent做到資源占用節省和高效采集,背後是基於HiSDP去構建的。緣由當決定采用C++編程語言去開發一
自己練習極速賽車平臺開發寫的--C#基礎篇十小練習
{0} program num gen != pla tasks public static [csharp] view plain copy極速賽車平臺開發論壇:haozbbs.com Q1446595067 using System; using System.Co