Files
ifish/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/P2PCInterface.h
T
2017-08-15 16:59:01 +08:00

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