871 lines
23 KiB
C++
Executable File
871 lines
23 KiB
C++
Executable File
#ifndef _P2PC_INTERFACE_H_
|
||
#define _P2PC_INTERFACE_H_
|
||
|
||
#ifdef WIN32
|
||
#define PACKED
|
||
#else
|
||
#define PACKED __attribute__((packed))
|
||
#endif
|
||
|
||
#define MAX_P2PCH_NS 4 //最大通道数,目前是4 请不要做更改
|
||
|
||
#define UPDATE_FLAG_SUPPORT
|
||
|
||
|
||
|
||
#define KTRUE 1
|
||
#define KFALSE 0
|
||
#define DWORD unsigned int //32bits
|
||
#define WORD unsigned short //16bits
|
||
#define BYTE unsigned char //8bits
|
||
#define KBOOL unsigned int //32bits
|
||
#define UINT64 unsigned long long //64bits
|
||
|
||
|
||
|
||
|
||
enum{
|
||
DEV_TYPE_NULL,
|
||
DEV_TYPE_SERVER,
|
||
DEV_TYPE_NPC,
|
||
DEV_TYPE_MOBILE,
|
||
DEV_TYPE_PC,
|
||
|
||
DEV_TYPE_DOORBELL,
|
||
DEV_TYPE_ALERTOR,
|
||
DEV_TYPE_IPC
|
||
};
|
||
|
||
///dwServerType
|
||
enum{
|
||
SERVER_TYPE_NULL,
|
||
SERVER_TYPE_P2P,
|
||
SERVER_TYPE_LIST,
|
||
SERVER_TYPE_EMAIL,
|
||
SERVER_TYPE_IOS_PUSH,
|
||
SERVER_TYPE_INDEX = 9,
|
||
SERVER_TYPE_DEV_UPG = 10,
|
||
SERVER_TYPE_LOG = 11,
|
||
|
||
};
|
||
|
||
#define CONN_TYPE_VIDEO_CALL 0x00
|
||
#define CONN_TYPE_MONITOR 0x01
|
||
#define CONN_TYPE_FILE_TRANS 0x02
|
||
|
||
#define VIDEO_ABILITY_320x240 (1<<0)
|
||
#define VIDEO_ABILITY_640x480 (1<<1)
|
||
#define VIDEO_ABILITY_1280x720 (1<<2)
|
||
#define VIDEO_ABILITY_1920x1080 (1<<3)
|
||
|
||
//sP2PInitPrm.vRejectSignal() 中参数dwErrorOption 的枚举定义,表示p2p连接失败的原因
|
||
enum
|
||
{
|
||
CALL_ERROR_NONE=0, //无原因
|
||
CALL_ERROR_DESID_NOT_ENABLE, // 对方的ID 被禁用
|
||
CALL_ERROR_DESID_OVERDATE, // 对方的ID 过期了
|
||
CALL_ERROR_DESID_NOT_ACTIVE, // 对方的ID 尚未激活
|
||
CALL_ERROR_DESID_OFFLINE, // 对方离线
|
||
CALL_ERROR_DESID_BUSY, // 对方忙线中
|
||
CALL_ERROR_DESID_POWERDOWN, //对方已关机
|
||
CALL_ERROR_NO_HELPER, // 没有找到协助人
|
||
CALL_ERROR_HANGUP, // 对方已经挂断
|
||
CALL_ERROR_TIMEOUT, // 连接超时
|
||
CALL_ERROR_INTER_ERROR, // 内部错误
|
||
CALL_ERROR_RING_TIMEOUT, // 无人接听
|
||
CALL_ERROR_PW_WRONG, //密码错误( 在远程监控时用到密码,在视频通话是不需要)
|
||
CALL_ERROR_CONN_FAIL,
|
||
CALL_ERROR_NOT_SUPPORT,
|
||
};
|
||
|
||
enum
|
||
{
|
||
MESG_TYPE_GET_SETTING, // 0
|
||
MESG_TYPE_SET_SETTING, // 1
|
||
MESG_TYPE_RET_SETTING,
|
||
MESG_TYPE_GET_REC_LIST,
|
||
MESG_TYPE_RET_REC_LIST,
|
||
MESG_TYPE_MESSAGE,
|
||
MESG_TYPE_DEBUG_LOG_ON,
|
||
MESG_TYPE_DEBUG_LOG_OFF,
|
||
MESG_TYPE_DEBUG_LOG_SUBMIT,
|
||
MESG_TYPE_ALARM_CALL,
|
||
|
||
MESG_TYPE_GET_DATETIME,
|
||
MESG_TYPE_SET_DATETIME, // 11
|
||
MESG_TYPE_RET_DATETIME, // 12
|
||
|
||
MESG_TYPE_GET_EMIAL, // 13
|
||
MESG_TYPE_SET_EMIAL, // 14
|
||
MESG_TYPE_RET_EMIAL, // 15
|
||
|
||
MESG_TYPE_GET_WIFILIST, // 16
|
||
MESG_TYPE_SET_WIFILIST, // 17
|
||
MESG_TYPE_RET_WIFILIST, // 18
|
||
|
||
MESG_TYPE_GET_ALARMCODE_STATUS, // 19
|
||
MESG_TYPE_SET_ALARMCODE_STATUS, // 20
|
||
MESG_TYPE_RET_ALARMCODE_STATUS, // 21
|
||
|
||
MESG_TYPE_GET_APPID, // 22
|
||
MESG_TYPE_SET_APPID, // 23
|
||
MESG_TYPE_RET_APPID, // 24
|
||
|
||
MESG_TYPE_SET_INIT_PASSWD, // 25
|
||
MESG_TYPE_RET_INIT_PASSWD, // 26
|
||
|
||
MESG_TYPE_USER_CMD, // 27
|
||
MESG_TYPE_USER_CMD_RET, // 28
|
||
|
||
|
||
MESG_TYPE_UPG_CHEK_VERSION, // 29
|
||
MESG_TYPE_UPG_CHEK_VERSION_RET, // 30
|
||
MESG_TYPE_UPG_FILE_TO_DOWNLOAD, // 31
|
||
MESG_TYPE_UPG_FILE_TO_DOWNLOAD_RET, // 32
|
||
MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD, // 33
|
||
MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD_RET, //34
|
||
|
||
MESG_TYPE_UPG_CHEK_CUR_VERSION, // 35
|
||
MESG_TYPE_UPG_CHEK_CUR_VERSION_RET, //36
|
||
|
||
MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE, // 37
|
||
MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE_RET, // 38
|
||
MESG_TYPE_GET_SYS_VERSION, // 39
|
||
MESG_TYPE_GET_SYS_VERSION_RET, // 40
|
||
|
||
|
||
LAN_TRANS_SET_INIT_PASSWD = 48, // 48
|
||
LAN_TRANS_RET_INIT_PASSWD, // 49
|
||
|
||
MESG_TYPE_DRBL_ACK_GET = 58,
|
||
MESG_TYPE_DRBL_ACK_RET, // 59
|
||
MESG_TYPE_DRBLCALL, //60
|
||
MESG_TYPE_DRBL_HOSTSTA_RET, // 61
|
||
|
||
MESG_TYPE_DEV_CHKCODE_SEND, // 62
|
||
MESG_TYPE_DRBL_CHKCODE_SEND, // 63
|
||
MESG_TYPE_DEV_UNLOCK_DRBL, // 64
|
||
MESG_TYPE_UNLOCK_DRBL_RET, // 65
|
||
|
||
MESG_TYPE_GET_SDCARD_INFO = 80,
|
||
MESG_TYPE_SET_FORMAT_SDCARD = 81,
|
||
|
||
MESG_TYPE_GET_DEFENCE_SWITCH_STATE, //82 获取防区开关
|
||
MESG_TYPE_SET_DEFENCE_SWITCH_STATE, //83 设置防区开关
|
||
MESG_TYPE_RET_DEFENCE_SWITCH_STATE, //84 设置返回值
|
||
|
||
MESG_TYPE_SET_MOTOR_PRESET_POS = 87, //预置位
|
||
MESG_TYPE_RET_MOTOR_PRESET_POS = 88,
|
||
|
||
MESG_TYPE_GET_ALARM_TYPE_MOTOR_PRESET_POS,//89
|
||
MESG_TYPE_SET_ALARM_TYPE_MOTOR_PRESET_POS,//90
|
||
MESG_TYPE_RET_ALARM_TYPE_MOTOR_PRESET_POS,//91 预置位
|
||
|
||
MESG_TYPE_SET_GPIO_CTL = 95,
|
||
MESG_TYPE_RET_GPIO_CTL, //值:96
|
||
|
||
MESG_TYPE_WORKMODE_SETTING =149,
|
||
|
||
MESG_TYPE_QRCODE_LEARN_CODE =216,
|
||
|
||
MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_SET = 127,
|
||
MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_RET, //128
|
||
|
||
MESG_TYPE_GET_NVR_INFO = 131,
|
||
MESG_TYPE_RET_NVR_INFO,
|
||
|
||
MESG_TYPE_GET_DEVICE_LANGUAGE = 211,
|
||
MESG_TYPE_SET_DEVICE_LANGUAGE, //212
|
||
MESG_TYPE_RET_DEVICE_LANGUAGE, //213
|
||
|
||
MESG_TYPE_GET_SCHEDULE_DEFENCE_INFO, //214 获取布撤防
|
||
MESG_TYPE_SET_SCHEDULE_DEFENCE_INFO, //215
|
||
|
||
MESG_TYPE_MAIN_NEED_PASSPWD = 223, //223 获取和修改433传感器名字 预置位转动好后截图
|
||
|
||
MESG_TYPE_SETORGET_LENS_FOCUS_PARAMS = 224, // 自动变焦 获取和设置变焦镜头马达当前位置的命令是一样滴 消息头命令
|
||
|
||
MESG_TYPE_GET_FISHEYE = 228, //获取当前全景相机配置信息
|
||
MESG_TYPE_SET_FISHEYE,//229 设置当前全景相机配置信息
|
||
MESG_TYPE_RET_FISHEYE,//230 返回当前全景相机配置信息
|
||
|
||
MESG_TYPE_RET_RECORD_STATE = 237, //设备当前的录像状态、有没有TF卡
|
||
|
||
MESG_TYPE_SET_VIDEO_CLEAR_LEVEL = 239, /**< 设置录像质量 */
|
||
MESG_TYPE_GET_VIDEO_CLEAR_LEVEL = 240, /**< 获取录像质量 */
|
||
MESG_TYPE_RET_VIDEO_CLEAR_LEVEL = 241, /**< 录像质量返回 */
|
||
|
||
MESG_TYPE_DEVICE_NOT_SUPPORT_RET = 0XFF,
|
||
|
||
};
|
||
enum
|
||
{
|
||
OS_ARM_LINUX,
|
||
OS_ANDROID,
|
||
OS_IOS,
|
||
OS_MAC,
|
||
OS_WINDOWS,
|
||
OS_X86_LINUX,
|
||
|
||
OS_NONE = 0xFF,
|
||
|
||
};
|
||
|
||
|
||
|
||
enum {
|
||
PUSH_MESG_SYSTEM,
|
||
PUSH_MESG_VERIFY,
|
||
PUSH_MESG_FRIEND,
|
||
PUSH_MESG_ALARM,
|
||
PUSH_MESG_CALL,
|
||
PUSH_MESG_DOORBELL
|
||
};
|
||
|
||
enum
|
||
{
|
||
ID_STATUS_OFFLINE,
|
||
ID_STATUS_ONLINE,
|
||
ID_STATUS_INACTIVE,
|
||
};
|
||
|
||
#define MAX_FRIENDS_NS 256
|
||
|
||
typedef struct sFriendsType
|
||
{
|
||
DWORD dwFriendsCount;
|
||
DWORD dwFriends[MAX_FRIENDS_NS];
|
||
BYTE bStatus[MAX_FRIENDS_NS];
|
||
BYTE bType[MAX_FRIENDS_NS];
|
||
|
||
}PACKED sFriendsType;
|
||
|
||
typedef struct sCallingPrmType
|
||
{
|
||
KBOOL fgBCalled;
|
||
DWORD dwHisID;
|
||
DWORD dwHisDevType;
|
||
KBOOL fgInSameDomain;
|
||
KBOOL fgSuperCall;
|
||
DWORD dwRemoteChNs;
|
||
DWORD dwCallPrm[4];
|
||
|
||
}sCallingPrmType;
|
||
|
||
|
||
#if 1 //def SUPPORT_GET_REMOTE_FILE
|
||
enum
|
||
{
|
||
GET_FILE_CMD_ERR_NONE,
|
||
GET_FILE_CMD_ERR_PW_INCRRECT,
|
||
GET_FILE_CMD_ERR_IP_FREEZE,
|
||
GET_FILE_CMD_ERR_NO_SUCH_FILE,
|
||
GET_FILE_CMD_ERR_NOT_ALLOWED,
|
||
GET_FILE_CMD_ERR_READ_FILE_FAIL,
|
||
GET_FILE_CMD_ERR_BUZY,
|
||
GET_FILE_CMD_ERR_MEMORY_LIMITED,
|
||
GET_FILE_CMD_ERR_TIMEOUT,
|
||
};
|
||
#endif
|
||
|
||
|
||
//网络库的初始化参数
|
||
typedef struct sP2PInitPrm
|
||
{
|
||
DWORD dw3CID; // 本机ID ; 调试时可以使用: dw3CID=2000, dwR1=0x5a8d47b0, dwR2=0x4fd73aa3
|
||
DWORD dwCode1; // 检验码1
|
||
DWORD dwCode2; // 检验码2
|
||
char * pHostName; // 服务器表,请传入: "|www.cloudlinks.cn|www.cloud-links.net|www.gwelltimes.com"
|
||
DWORD dwChNs; // 本机通道数目,请设为1
|
||
DWORD dwChBufSize[MAX_P2PCH_NS]; // 每个通道的缓存大小,请统一设置为(1024*512)
|
||
DWORD dwPassword; //密码,请设为十进制数: 123456
|
||
DWORD dwCustomerID[10];
|
||
|
||
// 被呼叫 时,当有人拨打进来,通过此函数 告知上层。
|
||
// 主叫时,拨打已经通了。对方正在响铃,也回调此函数。
|
||
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
|
||
// dwHisID : 对方ID 号。
|
||
// fgInSameDomain :对方跟本机在 同一个局域网里。
|
||
// fgMonitorOnly : 暂时没有用。
|
||
// dwRemoteChNs : 暂时没有用。
|
||
void (* vCallingSignal )(sCallingPrmType *sCallPrm);
|
||
|
||
//呼叫被拒绝或者连接断开的回调函数
|
||
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
|
||
// dwErrorOption: 断开的原因,请参见前述枚举。
|
||
void (* vRejectSignal )(BOOL fgBCalled, DWORD dwErrorOption);
|
||
|
||
//接听回调函数, 当对方接通了或本机接听了来电,通过此函数告知上层。
|
||
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
|
||
void (* vAcceptSignal )(BOOL fgBCalled, DWORD *pdwPrm);
|
||
|
||
// 连接OK 回调函数,当主叫时对方已经接听并且连接通道一切就绪,告诉上层开始传输音视频。
|
||
void (* vP2PConnReady)(void);
|
||
void (* vRecvRemoteMessage)(DWORD dwSrcID, KBOOL fgHasCheckdPassword, void *pMesg, DWORD dwMesgSize);
|
||
|
||
void (* vSendMessageAck)(DWORD dwDesID, DWORD dwMesgID, DWORD dwError);
|
||
|
||
void (* vFriendsStatusUpdate)(sFriendsType * pFriends);
|
||
|
||
|
||
#ifdef UPDATE_FLAG_SUPPORT
|
||
void (* vFlagUpdate)(DWORD *pdwFlags );
|
||
#endif
|
||
|
||
//【远程获取文件结果回调】
|
||
//参数-dwDesID: 目标设备ID
|
||
//参数-pFilename: 文件名
|
||
//参数-dwErrorCode: 错误代码(详情见上枚举)
|
||
void (* vGetFileCmdACK)(DWORD dwDesID, char *pFilename, DWORD dwErrorCode);
|
||
|
||
}sP2PInitPrm;
|
||
|
||
#ifdef UPDATE_FLAG_SUPPORT
|
||
void vP2PSetUpdateFlag(DWORD *pdwFlag);
|
||
#endif
|
||
enum
|
||
{
|
||
MESG_ERROR_NONE,
|
||
MESG_ERROR_PASSWORD_FAIL ,
|
||
MESG_ERROR_TIMEOUT,
|
||
MESG_IOS_PUSH_ERROR,
|
||
MESG_ERROR_NO_RIGHT,
|
||
};
|
||
|
||
KBOOL fgP2PInit(sP2PInitPrm * pPrm); // 网络库初始化
|
||
void vP2PExit(void); // 网络库退出并释放资源
|
||
|
||
|
||
KBOOL fgP2PLinkOK(void); // 查看网络库状态.(类似与QQ 是否在线)
|
||
|
||
//呼叫一个ID
|
||
// dwId: 对方ID 号。
|
||
// fgSuperCall: KTRUE:监控, KFALSE : 视频电话。
|
||
// dwPassword : 如果视频监控,此为对方的监控密码。
|
||
|
||
// 16-code 48 手机号
|
||
KBOOL fgP2PCall(UINT64 u64Id, KBOOL fgSuperCall, DWORD dwPassword, DWORD *pdwPrm, char *strPushMesg);
|
||
void vP2PHungup(KBOOL fgWaitFinish); // 挂断连接
|
||
void vP2PAccept(DWORD *pdwPrm); // 接受呼叫
|
||
|
||
KBOOL fgP2PSendRemoteMessage(DWORD dwDesID, DWORD dwRemotePW, DWORD dwMesgID, void * pMesg, DWORD dwMesgSize, char * pPushMesg, DWORD dwPushMesgLen, DWORD dwType);
|
||
KBOOL fgP2PGetFriendsStatus(DWORD *pFriendsTable, DWORD dwCount);
|
||
|
||
|
||
//--------------------------------------------
|
||
//【获取远程文件】
|
||
//参数-dwDesID: 目标设备ID号。
|
||
//参数-dwPassword: 远程设备的密码。
|
||
//参数-pRemoteFilename: 远程文件的文件名(带完整路径)
|
||
//参数-pLocalSaveFilename: 存到本地的文件名(带完整路径)
|
||
BOOL fgP2PGetRemoteFile(DWORD dwDesID, DWORD dwPassword, char *pRemoteFilename, char *pLocalSaveFilename);
|
||
|
||
//--------------------------------------------
|
||
//【获取远程文件的进度】
|
||
//返回值- 0 ~ 100 的整数
|
||
DWORD dwP2PGetFileProgress(void);
|
||
|
||
//--------------------------------------------
|
||
//【取消(中断) 获取远程文件】
|
||
void vP2PCancelGetRemoteFile(void);
|
||
|
||
|
||
///////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
//////////////////////////
|
||
enum
|
||
{
|
||
PACKET_TYPE_AV_DATA = 0,
|
||
PACKET_TYPE_HEADER_ONLY ,
|
||
PACKET_TYPE_USR_DATA,
|
||
|
||
};
|
||
|
||
//AV 数据分组头结构
|
||
|
||
typedef struct sAVBlockHeaderType
|
||
|
||
{
|
||
|
||
BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88
|
||
|
||
BYTE bVersion; // 版本号
|
||
|
||
BYTE bPacketType; // 此分组的类型,
|
||
|
||
|
||
|
||
WORD wAudioPackCnt; //当前分组中音频帧的数量
|
||
|
||
DWORD dwVideoDataLen; //当前分组中视频数据的长度
|
||
|
||
UINT64 u64VPTS; //当前分组中视频帧时间戳,uS为单位
|
||
|
||
UINT64 u64APTS; //当前分组中音频帧时间戳,uS为单位
|
||
|
||
|
||
|
||
}PACKED sAVBlockHeaderType;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
typedef struct sAVInfoType
|
||
{
|
||
WORD AudioType: 3; //音频编码格式
|
||
WORD AudioCodecOption: 4; //音频编码的参数
|
||
WORD AudioMode: 1; // 音频模式: 单声道/双声道
|
||
WORD AudioBitWidth: 2; // 音频位宽,目前只支持16bit
|
||
WORD AudioSampleRate : 3; // 音频采样率
|
||
WORD SampleNumPerFrame : 3; //每帧数据里的采样数
|
||
|
||
DWORD VideoType: 4; /// 视频类型,目前只支持H264
|
||
DWORD VideoWidth: 12; // 视频像素宽度
|
||
DWORD VideoHeight: 10; //视频像素高度
|
||
DWORD videoFrameRate: 6; // 视频帧率
|
||
}PACKED sAVInfoType;
|
||
|
||
|
||
//AV 信息分组数据结构
|
||
typedef struct sAVBlockHeader2Type
|
||
{
|
||
BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88
|
||
BYTE bVersion; // 版本号
|
||
BYTE bPacketType; // 此分组的类型
|
||
|
||
sAVInfoType sAvInfo; //音视频格式信息
|
||
UINT64 u64VPTS; //当前分组中视频帧时间戳,uS为单位
|
||
UINT64 u64APTS; //当前分组中音频帧时间戳,uS为单位
|
||
|
||
}PACKED sAVBlockHeader2Type;
|
||
|
||
|
||
/////音频类型
|
||
enum
|
||
{
|
||
AUDIO_TYPE_NONE = 0,
|
||
AUDIO_TYPE_G711A ,
|
||
AUDIO_TYPE_G711U ,
|
||
AUDIO_TYPE_PT_G726 ,
|
||
AUDIO_TYPE_PT_AAC,
|
||
AUDIO_TYPE_PT_AMR,
|
||
AUDIO_TYPE_PT_ADPCMA,
|
||
AUDIO_TYPE_MAX,
|
||
};
|
||
|
||
///AMR音频编码选项
|
||
enum
|
||
{
|
||
AMR_FORMAT_MMS,
|
||
AMR_FORMAT_IF1,
|
||
AMR_FORMAT_IF2,
|
||
AMR_FORMAT_NONE,
|
||
};
|
||
|
||
|
||
//音频模式 单声道/立体声
|
||
enum
|
||
{
|
||
AUDIO_SOUND_MODE_MOMO =0,/*mono*/
|
||
AUDIO_SOUND_MODE_STEREO =1,/*stereo*/
|
||
AUDIO_SOUND_MODE_NONE ,
|
||
};
|
||
|
||
|
||
// 音频采样位宽
|
||
enum
|
||
{
|
||
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
|
||
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
|
||
AUDIO_BIT_WIDTH_32 = 2, /* 32bit width*/
|
||
AUDIO_BIT_WIDTH_NONE,
|
||
};
|
||
|
||
////音频采样率
|
||
enum
|
||
{
|
||
AUDIO_SAMPLE_RATE_8K = 0, /* 8K samplerate*/
|
||
AUDIO_SAMPLE_RATE_11K , /* 11.025K samplerate*/
|
||
AUDIO_SAMPLE_RATE_16K , /* 16K samplerate*/
|
||
AUDIO_SAMPLE_RATE_22K , /* 22.050K samplerate*/
|
||
AUDIO_SAMPLE_RATE_24K , /* 24K samplerate*/
|
||
AUDIO_SAMPLE_RATE_32K , /* 32K samplerate*/
|
||
AUDIO_SAMPLE_RATE_44K , /* 44.1K samplerate*/
|
||
AUDIO_SAMPLE_RATE_48K , /* 48K samplerate*/
|
||
|
||
};
|
||
|
||
|
||
|
||
////音频每帧采样数
|
||
enum
|
||
{
|
||
SAMPLE_NUM_80 = 0,
|
||
SAMPLE_NUM_160 ,
|
||
SAMPLE_NUM_320 ,
|
||
SAMPLE_NUM_480 ,
|
||
SAMPLE_NUM_1024 ,
|
||
SAMPLE_NUM_2048 ,
|
||
|
||
};
|
||
|
||
|
||
///视频类型
|
||
enum
|
||
{
|
||
VIDEO_TYPE_NONE = 0 ,
|
||
VIDEO_TYPE_H264 ,
|
||
VIDEO_TYPE_MPEG4 ,
|
||
VIDEO_TYPE_JPEG,
|
||
VIDEO_TYPE_MJPEG,
|
||
};
|
||
|
||
|
||
//user data bCommandType
|
||
enum
|
||
{
|
||
USR_CMD_PTZ_CTL, //云台控制
|
||
USR_CMD_VIDEO_CTL, // 视频控制
|
||
USR_CMD_REMOTLY_DEFENCE_CTL, //
|
||
USR_CMD_PLAY_CTL,
|
||
USR_CMD_AUDIO_ONLY,
|
||
USR_CMD_FM1188_CTL,
|
||
USR_CMD_CURRENT_USERS_NS,
|
||
USR_CMD_MAX_NS,
|
||
};
|
||
|
||
|
||
|
||
//bCommandOption
|
||
enum
|
||
{
|
||
USR_CMD_OPTION_PTZ_TURN_LEFT,
|
||
USR_CMD_OPTION_PTZ_TURN_RIGHT,
|
||
USR_CMD_OPTION_PTZ_TURN_UP,
|
||
USR_CMD_OPTION_PTZ_TURN_DOWN,
|
||
};
|
||
|
||
enum
|
||
{
|
||
USR_CMD_OPTION_VIDEO_PAUSE, //暂停
|
||
USR_CMD_OPTION_VIDEO_RESUME, // 继续
|
||
USR_CMD_OPTION_VIDEO_FAST_FORWARD, // 快进
|
||
USR_CMD_OPTION_VIDEO_SLOW_FORWARD, //慢进
|
||
USR_CMD_OPTION_VIDEO_STEP, // 单步
|
||
};
|
||
|
||
//bCommandOption
|
||
enum
|
||
{
|
||
USR_CMD_OPTION_START_DEFENCE,
|
||
USR_CMD_OPTION_STOP_DEFENCE,
|
||
USR_CMD_OPTION_READ_DEFENCE_STATUS,
|
||
USR_CMD_OPTION_WRITE_DEFENCE_STATUS,
|
||
};
|
||
|
||
//bCommandOption
|
||
enum
|
||
{
|
||
USR_CMD_OPTION_NONE,
|
||
USR_CMD_OPTION_FILE_INFO, //begin PTS = (((UINT64)(pUserData->dwCmdData[0])<<32) |pUserData->dwCmdData[1]);//End PTS = (((UINT64)(pUserData->dwCmdData[2])<<32) |pUserData->dwCmdData[3]);
|
||
USR_CMD_OPTION_FILE_END, //
|
||
|
||
USR_CMD_OPTION_PAUSE,
|
||
USR_CMD_OPTION_PAUSE_RET,
|
||
|
||
USR_CMD_OPTION_RESUME,
|
||
USR_CMD_OPTION_RESUME_RET,
|
||
|
||
USR_CMD_OPTION_JUMP,//memcpy(&u64JumpTargetPTS , pUsrCmd->dwCmdData, sizeof(UINT64) );
|
||
USR_CMD_OPTION_JUMP_RET, //pUserData->dwCmdData[0] : true , false
|
||
|
||
USR_CMD_OPTION_NEXT_FILE, //memcpy(&sTargetNextFile, pUsrCmd->dwCmdData, sizeof(sRecFilenameType) );
|
||
USR_CMD_OPTION_NEXT_FILE_RET, ////pUserData->dwCmdData[0] : true , false
|
||
|
||
USR_CMD_OPTION_STOP,
|
||
USR_CMD_OPTION_STOP_RET,//pUserData->dwCmdData[0] : true , false
|
||
|
||
USR_CMD_OPTION_PLAY,
|
||
USR_CMD_OPTION_PLAY_RET,//pUserData->dwCmdData[0] : true , false
|
||
|
||
USR_CMD_OPTION_FAST_PLAY, //快进播放
|
||
USR_CMD_OPTION_FAST_PLAY_RET,
|
||
|
||
USR_CMD_OPTION_FAST_PLAY_CANCEL, //不要快进
|
||
USR_CMD_OPTION_FAST_PLAY_CANCEL_RET
|
||
|
||
|
||
|
||
};
|
||
|
||
////用户数据分组结构
|
||
|
||
typedef struct sUsrDataBlockHeaderType
|
||
{
|
||
BYTE bHeaderFlag[4];
|
||
BYTE bVersion;
|
||
BYTE bPacketType; ////PACKET_TYPE_USR_DATA
|
||
|
||
BYTE bCommandType; //
|
||
BYTE bCommandOption;
|
||
DWORD dwCmdData[5]; //保留
|
||
}PACKED sUsrDataBlockHeaderType;
|
||
|
||
////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
#define SUPPORT_REC_TO_FILE
|
||
|
||
#define GBOOL unsigned int
|
||
|
||
|
||
|
||
/////////////////////av encode interface///////////////////////////
|
||
GBOOL fgStartAVEncAndSend(DWORD dwVideoFrameRate);
|
||
void vStopAVEncAndSend(void);
|
||
GBOOL fgFillVideoRawFrame(BYTE *pbData, DWORD dwSize, DWORD dwWidth, DWORD dwHeight, GBOOL fgX2Reflection);
|
||
void vFillAudioRawData(BYTE *pbData, DWORD dwSize);
|
||
GBOOL fgSendUserData(DWORD dwCmd, DWORD dwOption , BYTE * pData, DWORD dwDataLen) ;
|
||
|
||
///////////////////////end of av encode interface///////////////////////////////////
|
||
|
||
typedef struct GAVFrame
|
||
{
|
||
BYTE *data[3];
|
||
int linesize[3];
|
||
int width;
|
||
int height;
|
||
uint64_t pts;
|
||
}GAVFrame;
|
||
|
||
|
||
#define CONN_TYPE_VIDEO_CALL 0x00
|
||
#define CONN_TYPE_MONITOR 0x01
|
||
#define CONN_TYPE_FILE_TRANS 0x02
|
||
#define CONN_TYPE_PLAY_REC_FILE 0x02
|
||
|
||
typedef struct sRecAndDecPrm
|
||
{
|
||
DWORD dwConnectType;//以前是传的1或者0 现在需要改一改
|
||
void (* vRecvUserDataCallBack )(DWORD dwCmd, DWORD dwOption , DWORD * pdwData, DWORD dwDataLen);
|
||
void (*vRecvAVHeader)(sAVInfoType * pAVInfo) ;
|
||
void (*vRecvAVData)(BYTE *pAudioData, DWORD dwAudioDataLen, DWORD dwFrames, UINT64 u64APTS, BYTE *pVideoData, DWORD dwVideoLen, UINT64 u64VPTS) ;
|
||
|
||
}sRecAndDecPrm;
|
||
////////////////////////av decode interface //////////////////////////////////
|
||
GBOOL fgStartRecvAndDec(sRecAndDecPrm *psInitPrm);
|
||
void vStopRecvAndDec(void);
|
||
GBOOL fgGetAudioDataToPlay(BYTE * pDesBuf, DWORD dwSize) ;
|
||
GBOOL fgGetVideoFrameToDisplay(GAVFrame ** pFrame);
|
||
void vReleaseVideoFrame(void) ;
|
||
void vSetSupperDrop(KBOOL fgDrop);
|
||
//////////////////////end of av decode interface////////////////////////////////
|
||
//暂停两者不播放
|
||
#ifdef SUPPORT_REC_TO_FILE
|
||
GBOOL fgStartRecordToFile(char *pFileName);
|
||
void vStopRecord(void);
|
||
#endif
|
||
|
||
BOOL fgGetServerIPAddr(DWORD *pdwIPAddr,WORD *pwPort,const DWORD dwSerType);
|
||
|
||
|
||
#ifdef __cplusplus
|
||
class ShapeWarp
|
||
{
|
||
|
||
public:
|
||
ShapeWarp();
|
||
~ShapeWarp();
|
||
|
||
//key status
|
||
const static int KEY_NONE = -1;
|
||
const static int KEY_DOWN = 0;
|
||
const static int KEY_UP = 1;
|
||
const static int KEY_MOVE = 2;
|
||
|
||
//animation
|
||
const static int ANI_NONE = 0;
|
||
const static int ANI_ZOOM_AUTO_IN = 1;
|
||
const static int ANI_ZOOM_AUTO_OUT = 2;
|
||
const static int ANI_FLING = 3;
|
||
const static int ROTE_SLOWLY = 4;
|
||
|
||
// graph mode
|
||
const static int MANUL = 0; //manual
|
||
const static int PANORAMA = 1; //panorama
|
||
const static int PLAN = 2; //plan
|
||
|
||
//GestrueMode
|
||
const static int GESTRUE_MODE_NONE = -1;
|
||
const static int GESTRUE_MODE_FINGER = 0;
|
||
const static int GESTRUE_MODE_SENSOR = 1;
|
||
|
||
//fisheye position
|
||
const static int FISHEYE_TOP = 0;
|
||
const static int FISHEYE_BOTTOM = 1;
|
||
const static int FISHEYE_WALL = 2;
|
||
|
||
//fisheye type
|
||
const static int FISHEYE_360 = 0;
|
||
const static int FISHEYE_180 = 1;
|
||
|
||
// shape type
|
||
const static int SHAPE_CIRCLE = 0;
|
||
const static int SHAPE_180_HALF_SPHERE = 1;
|
||
const static int SHAPE_CYLIDER = 2;
|
||
const static int SHAPE_BOWLE = 3;
|
||
|
||
|
||
|
||
typedef void (*ShapeNotify)(int MsgType, int MsgAction);
|
||
|
||
//-------------------- method --------------------------//
|
||
|
||
/*Description:init data
|
||
*Arguments:
|
||
* width --- texture width,
|
||
* height --- texture height,
|
||
* w_width --- windows width,
|
||
* w_height --- windows height,
|
||
* instalType --- shape type, sphere, cylinder , 180°...
|
||
* *cVersion --- IOS version
|
||
* deviceID ----- camara ID
|
||
* *cUUID --- phone UUID.
|
||
* iUniformMatrix ---shader Matrix id
|
||
* iFishEyeType --- FISHEYE_180, FISHEYE_360
|
||
*/
|
||
void initData(int width, int height, int w_width, int w_height, int installType, const char *cVersion, long deviceID, const char* cUUID, long iUniformMatrix, int iFishEyeType);
|
||
|
||
/*
|
||
*release render data
|
||
*/
|
||
void releaseData();
|
||
|
||
/*
|
||
* must call initData() firstly
|
||
*/
|
||
void ChangeScreen(int width, int height, int isFullScreen);
|
||
|
||
/*
|
||
*draw shapes
|
||
*/
|
||
void drawself();
|
||
|
||
/*
|
||
*Description:zoom out
|
||
*Arguments: x, y Zoom out position on screen
|
||
*/
|
||
void setZoomOut(int x, int y);
|
||
|
||
|
||
/*
|
||
*Description:zoom out without position
|
||
*
|
||
*/
|
||
void setZoomOut();
|
||
|
||
/*
|
||
*Description:zoom in
|
||
*Arguments: x, y Zoom in position on screen
|
||
*/
|
||
void setZoomIN(int x, int y);
|
||
|
||
|
||
/*
|
||
*Description:zoom in without position
|
||
*
|
||
*/
|
||
void setZoomIN();
|
||
|
||
/*
|
||
*Description:move a step when drag,
|
||
*Arguments: x, y velocity of x and y derection on scrren
|
||
*
|
||
*/
|
||
void setFling(float x, float y);
|
||
|
||
/*
|
||
*Description: move a step when drag,
|
||
*Arguments: x, y position in screen
|
||
*Arguments: dx, dy distance of moved
|
||
*/
|
||
void setMoveStep(float x, float y, float dx, float dy);
|
||
|
||
/*
|
||
*sing tap
|
||
*/
|
||
void singalTap();
|
||
|
||
/*
|
||
* Description: set a key status, eg. up move and down
|
||
* Arguments:
|
||
* KEY_NONE
|
||
* KEY_DOWN
|
||
* KEY_UP
|
||
* KEY_MOVE
|
||
*/
|
||
void setKeyStatus(int key);
|
||
|
||
/*
|
||
*
|
||
*/
|
||
void buildMaps(int w, int h);
|
||
|
||
/*
|
||
*Description: set a sensor quarter
|
||
*/
|
||
void setTrackerQuat(float x, float y, float z, float w);
|
||
|
||
/*
|
||
*get gesture mode
|
||
*/
|
||
int getGestureMode();
|
||
|
||
/*
|
||
*Description: set a Gesture mode eg. sensor finger
|
||
*Arguments:
|
||
*GESTRUE_MODE_NONE
|
||
*GESTRUE_MODE_FINGER
|
||
*GESTRUE_MODE_SENSOR
|
||
*/
|
||
void setGestureMode(int mode);
|
||
|
||
/*
|
||
*Description: set fish eye position , must be used before initData method.
|
||
*FISHEYE_TOP default.
|
||
*Arguments:iPostion FISHEYE_TOP --- top, FISHEYE_BOTTOM --- bottom, FISHEYE_WALL --- wall;
|
||
*
|
||
*/
|
||
void setFisheyePosition(int iPostion);
|
||
|
||
/*
|
||
*Description: set a notify function , must be used after initData method.
|
||
*
|
||
*/
|
||
void setNotifyFunction(ShapeNotify ShapeNotify);
|
||
|
||
/*
|
||
* Description: set max scale after spread.
|
||
*/
|
||
void setMaxScale(float maxScale);
|
||
|
||
|
||
/*
|
||
* Description: set the speed of drift.
|
||
*/
|
||
void setDriftSpeed(float speed);
|
||
|
||
|
||
|
||
};
|
||
#endif
|
||
|
||
|
||
#endif //_P2PC_INTERFACE_H
|