/**
* 发起的包
*/
public static class TRANSFER_AV_INFO extends IM_CONTENTU {
//
public byte ucbResp;
/**
* 任务类型:
* public final static int CONST_imTaskType_transferAvInfo = 25; // 会议类型(点对点、组)
* public final static int CONST_imTaskType_shareScreen = 26; // 共享屏幕
* public final static int CONST_imTaskType_remoteAssist = 27; // 远程协助 (操作屏幕)
* public final static int CONST_imTaskType_shareMediaFile = 28; // 共享媒体文件
* public final static int CONST_imTaskType_shareDynBmp = 29; // 共享视频源
* public final static int CONST_imTaskType_viewDynBmp = 30; // 查看视频源
* public final static int CONST_imTaskType_queryCustomerServiceOfficer = 31; // 视频客服(已弃用)
* public final static int CONST_imTaskType_shareGps = 40; // 共享Gps
* public final static int CONST_imTaskType_viewGps = 41; // 查看Gps
*/
public int uiTaskType; //
/**
* 汇款信息
*/
public TRAN_conf_cfg confCfg = new TRAN_conf_cfg();
//
//public AV_TRAN_INFO tranInfo;
/**
* 音视频信息(格式)
*/
public AV_stream_simple ass = new AV_stream_simple();
// 2014/11/07
/**
* 视频组合的信息
* 1. video -> 发言人(视频)
* 2. resource -> 屏幕共享
*/
public MOSAIC_TRAN_INFO confMosaicTranInfo_video = new MOSAIC_TRAN_INFO();
public MOSAIC_TRAN_INFO confMosaicTranInfo_resource = new MOSAIC_TRAN_INFO();
/**
* 属于TRANSFER_AV_INFO的一个子集,查看远程视频源的一些扩展信息
*/
public TRANSFER_AV_INFO_viewDynBmp viewDynBmp = new TRANSFER_AV_INFO_viewDynBmp(); // 2009/09/06
/**
* Talk的号,IdInfo
*/
public qyDefs.QY_MESSENGER_ID idInfo_logicalPeer = new qyDefs.QY_MESSENGER_ID(); // 2009/10/18
public int uiTranNo_avTask_starter; // 暂时弃用 // 2014/11/22. 这个tranNo用来在会议和共享资料等任务里建立关联。
// 2014/11/20
public PROXIED_TRAN_INFO proxiedTranInfo = new PROXIED_TRAN_INFO(); // 弃用
/**
* 无用,用来标志上面的信息是发送的,下面的字段是临时(不发送的)
*/
public Object pInternal = new Object();
/**
* 区分这个实时任务是不是组的还是联系人的
*/
public boolean bGrpTask;
public int tmp_usSubtype; // 已弃用
// 记录一些信息
public TRANSFER_AV_INFO_tmpInternal_streamInfo tmp_internal_streamInfo = new TRANSFER_AV_INFO_tmpInternal_streamInfo();
public AV_stream tmp_internal_tmpAs = new AV_stream(); // 临时记录的一些信息
}
/**
* 响应的包
*/
public static class TRANSFER_AV_replyInfo extends IM_CONTENTU { // 2007/07/06
/**
* tStartTime_org 和 uiTranNo_org 唯一表示一个包
*/
public long tStartTime_org; // 发送的时间(秒级时间戳)
public int uiTranNo_org; // 发送的序号
public short usOp; // 表明会议(我)拒绝、允许
public AV_TRAN_INFO tranInfo = new AV_TRAN_INFO();
public TransferAvReplyInfo_viewDynBmpReply viewDynBmpReply = new TransferAvReplyInfo_viewDynBmpReply(); // 远程查看视频的时候响应包的一个辅助结构
public Object pInternal = new Object(); // 标志位,上面的发送,下面的不发送,无用
public int tmp_usSubtype;
public TransferAvReplyInfo_tmp_internal tmp_internal = new TransferAvReplyInfo_tmp_internal();
}
/**
* 传输音频数据包
*/
public static class TRANSFER_AUDIO_DATA extends IM_CONTENTU {
/**
* 唯一值,标识打开音频设备的序号
*/
public int uiTranNo_openAvDev;
public long tLastTime_showFrameInfo_020534; // 已弃用
public short usCnt_pkts; // 暂时无用
/**
* 临时的变量, 不是很重要
*/
public TRANSFER_AUDIO_DATA_tmpInternal tmpInternal = new TRANSFER_AUDIO_DATA_tmpInternal();
/**
* 计数器:下面几个成员
*/
public short usCnt;
/**
* Member的结构体
*/
TRANSFER_AUDIO_dataMemHead[] mems = new TRANSFER_AUDIO_dataMemHead[CONST_maxTransferAvDataMems];
/**
* 整个数据长度(上面的memes所有的帧的数据之和)
*/
public int uiLen; // 2009/05/20
public ByteBuffer buf = ByteBuffer.allocateDirect(bufSize_transferAudioData);//[]; // 2009/05/20
}
/**
* 传输视频数据包,同音频
*/
public static class TRANSFER_VIDEO_DATA extends IM_CONTENTU {
/**
* 唯一值,标识打开视频设备的序号
*/
public int uiTranNo_openAvDev;
public TRANSFER_VIDEO_DATA_tmpInternal tmpInternal = new TRANSFER_VIDEO_DATA_tmpInternal(); // 临时的变量,不重要
/**
* 计数器:Members的数量(视频的每一帧)
*/
public short usCnt;
/**
* 视频每一帧的头信息
*/
public TRANSFER_VIDEO_dataMemHead[] mems = new TRANSFER_VIDEO_dataMemHead[CONST_maxTransferAvDataMems];
/**
* 数据总长度(上面mems之和)
*/
public int uiLen;
public ByteBuffer buf = ByteBuffer.allocateDirect(bufSize_transferVideoData);
}
/**
* 修改任务的包
*/
public static class TASK_PROC_REQ extends IM_CONTENTU {
/**
* 开始的时间戳, 搭配uiTranNo_org 用来标识唯一的请求
*/
public long tStartTime_org;
public int uiTranNo_org;
public int uiSerialNo_org; // 没用
/**
* 用来标识原始请求时干啥的
*/
public int uiContentType_org;
/**
* 表明操作: 接受、拒绝、取消等等
*/
public short usOp;
public short usTaskProcObjType; // 已弃用
public TaskProcReq_vStream vStream = new TaskProcReq_vStream(); // 应该无用
public int uiTaskType; // 应该无用
public TaskProcReq_viewDynBmp viewDynBmp = new TaskProcReq_viewDynBmp(); // 应该无用
public Object pInternal = new Object(); // 应该无用
public Object hWnd_task = new Object(); // 应该无用
}
/**
* 申请发言的包
*/
public static class TASK_INTERACTION_REQ extends IM_CONTENTU {
/**
* tStartTime_org(开始时间戳) + uiTranNo_org 用来标识唯一包
*/
public long tStartTime_org;
public int uiTranNo_org;
/**
* 申请发言操作:申请、取消
*/
public short usOp;
/**
* 发言人的音视频参数
*/
public AV_stream avStream = new AV_stream();
/**
* 发言人的显示信息(会场名称)
*/
public String talkerDesc;
/**
* 一个请求里发送的时候,需要告诉这个请求时哪个组的
* 用于标识这个发言请求时归哪个组的
*/
public qyDefs.QY_MESSENGER_ID idInfo_imGrp_related = new qyDefs.QY_MESSENGER_ID();
public Object pInternal = new Object(); // 无用
}
/**
* 会议关键信息包
*/
public static class CONF_KEY extends IM_CONTENTU {
/**
* 关联组
*/
public qyDefs.QY_MESSENGER_ID idInfo_imGrp_related = new qyDefs.QY_MESSENGER_ID(); // 2009/02/23
/**
* 发言人的相关信息
*/
VIDEO_CONFERENCE_MEM[] mems = new VIDEO_CONFERENCE_MEM[Consts.MAX_conf_activeMems];
//
public static class ConfKey_tmpInternal {
public int usCnt_mems;
public byte[] toByteArray() {
int size = Integer.BYTES;
ByteBuffer buffer = ByteBuffer.allocateDirect(size);
buffer.putInt(usCnt_mems);
return buffer.array();
}
}
public ConfKey_tmpInternal tmpInternal = new ConfKey_tmpInternal();
public short usLayoutType_starter; // 2010/12/29
public short usCnt;
public CONF_requesting_mems requestingMems = new CONF_requesting_mems();
public ConfLayoutParam confLayoutParam = new ConfLayoutParam();
}
-------------------------------------------------------------------------------------------------------------------------------- 上面包含的结构体
public static class TRAN_conf_cfg {
public int usMaxSpeakers; // 最多几个发言人,发言前做判断
public TRAN_conf_cfg_conf conf = new TRAN_conf_cfg_conf(); // 视频的一些信息(帧率、宽高、编码)
public byte ucbVideoConference; // 是否是组会议
// 2017/07/17
//public byte ucbAvConsole;
// 2017/08/25
public int usConfType; // 暂时没用
public qyDefs.QY_MESSENGER_ID idInfo_initiator = new qyDefs.QY_MESSENGER_ID(); // 会议发起方(召集人)的id
public CONF_hg_info hgInfo = new CONF_hg_info(); // 汇款信息
}
public static class AV_stream_simple {
public RES_obj_simple resObj = new RES_obj_simple(); // 视频源类型
public AV_TRAN_INFO tranInfo = new AV_TRAN_INFO(); // 音视频格式
}
public static class MOSAIC_TRAN_INFO {
public RES_obj_simple resObj = new RES_obj_simple(); // 资源类型
public TRAN_video video = new TRAN_video();
}
public static class RES_obj_simple {
public int uiObjType; // 类型(屏幕共享、发言人)
public int usIndex_obj; // 索引用来区分ObjType
public int usHelp_subIndex; // 用来区分不同的球机
}
public static class TRAN_video {
public int uiTranNo_openAvDev; // 唯一值,用来标识打开视频设备的序号
public qyCommProc_open.VIDEO_COMPRESSOR_cfgCommon_head compressor = new qyCommProc_open.VIDEO_COMPRESSOR_cfgCommon_head(); // 视频压缩信息
public qyCommProc_open.QY_VIDEO_HEADER vh_compress = new qyCommProc_open.QY_VIDEO_HEADER(); // 视频压缩格式
public qyCommProc_open.VH_stream vh_stream = new qyCommProc_open.VH_stream(); // 编码格式的一些信息
public qyCommProc_open.QY_VIDEO_HEADER vh_decompress = new qyCommProc_open.QY_VIDEO_HEADER(); // 原始格式(压缩前)
}
public static class TRANSFER_AV_INFO_viewDynBmp {
public byte ucbSaveVideo; // 是否存储
}
}
public static class QY_MESSENGER_ID { //
public long ui64Id;
}
public static class MOSAIC_TRAN_INFO {
public RES_obj_simple resObj = new RES_obj_simple(); // 资源类型
//
public TRAN_video video = new TRAN_video();
public byte[] toByteArray() {
int bufferSize = resObj.toByteArray().length + video.toByteArray().length;
ByteBuffer buf = ByteBuffer.allocateDirect(bufferSize);
buf.put(resObj.toByteArray());
buf.put(video.toByteArray());
return buf.array();
}
}