// StreamPackage.h: interface for the StreamPackage class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_STREAMPACKAGE_H__014CF316_354F_47ED_B30D_D39912DD250D__INCLUDED_) #define AFX_STREAMPACKAGE_H__014CF316_354F_47ED_B30D_D39912DD250D__INCLUDED_ #if (defined(WIN32) || defined(WIN64)) #define SG_PACKAGE_API __declspec(dllimport) #define CALLMETHOD __stdcall #define CALLBACK __stdcall #else #define CALLMETHOD #define CALLBACK #define SG_PACKAGE_API #endif #ifdef __cplusplus extern "C" { #endif /*码流封装错误类型*/ typedef enum { SG_ERR_NOERR = 0, /*成功*/ SG_ERR_HANDLE_EMPTY, /*句柄无效*/ SG_ERR_INIT_FAIL, /*初始化失败*/ SG_ERR_PARAM_ERR, /*参数错误*/ }SG_ERR_TYPE; /*码流封装类型*/ typedef enum { SG_STREAM_TYPE_DAV_STREAM = 19, /* 封装格式 DAV */ }SG_STREAM_TYPE; /*帧类型*/ typedef enum { SG_FRAME_TYPE_VIDEO = 1, /* 视频帧 */ SG_FRAME_TYPE_AUDIO, /* 音频帧 */ SG_FRAME_TYPE_EXT /* 大华扩展帧 */ }SG_FRAME_TYPE; /*视频帧子类型*/ typedef enum { SG_FRAME_SUB_TYPE_I, /* I帧 */ SG_FRAME_SUB_TYPE_P, /* P帧 */ SG_FRAME_SUB_TYPE_B, /* B帧 */ SG_FRAME_SUB_TYPE_JPEG_FRAME = 8, /*JPEG 帧*/ }SG_FRAME_SUB_TYPE; /*编码类型*/ typedef enum { SG_ENCODE_VIDEO_UNKNOWN = 0, /*视频编码格式不可知*/ SG_ENCODE_VIDEO_MPEG4 = 1 , /*视频编码格式是MPEG4*/ SG_ENCODE_VIDEO_JPEG = 3, /*视频编码格式是标准JPEG*/ SG_ENCODE_VIDEO_H264 = 4, /*视频编码格式是大华码流H264*/ SG_ENCODE_AUDIO_PCM = 7, /*音频编码格式是PCM8*/ SG_ENCODE_AUDIO_G711A = 14, /*音频编码格式是G711A*/ SG_ENCODE_AUDIO_PCM16 = 16, /*音频编码格式是PCM16*/ SG_ENCODE_AUDIO_AAC = 26, /*音频编码格式是AAC*/ SG_ENCODE_AUDIO_MP2 = 31, /*音频编码格式是MP2*/ }SG_ENCODE_TYPE; /*解交错标志*/ typedef enum { SG_DEINTERLACE_NONE = 2, /*无解交错*/ }SG_DEINTERLACE_TYPE; /*加密类型*/ typedef enum { SG_ENCRYPT, }SG_ENCRYPT_TYPE; #pragma pack(1) /*文件头信息*/ typedef struct { unsigned int struct_size; }SGHeaderInfo; /*文件尾信息*/ typedef struct { unsigned int struct_size; }SGTailerInfo; //帧数据信息 typedef struct { unsigned int struct_size; unsigned char* frame_pointer; /*帧数据指针*/ unsigned int frame_size; /*帧数据长度*/ unsigned int frame_type; /*帧类型 SG_FRAME_TYPE*/ unsigned int frame_sub_type; /*帧子类型 SG_FRAME_SUB_TYPE*/ unsigned int frame_encode; /*编码类型 SG_ENCODE_TYPE*/ unsigned int frame_time; /*帧时间戳*/ unsigned int frame_data; /*日期时间,UTC时间*/ unsigned int width; /*视频宽度*/ unsigned int heigth; /*视频高度*/ unsigned int frame_rate; /*视频帧率*/ unsigned int deinter_lace; /*解交错信息 SG_DEINTERLACE_TYPE*/ unsigned int sample_rate; /*音频采样率*/ unsigned int bit_per_sample; /*音频采样位数*/ unsigned int channels; /*音频通道数*/ unsigned int bit_rate; /*音频比特率*/ unsigned char rtp_channel; /*通道号*/ unsigned char reserved1[7]; unsigned int frame_seq; /*帧序号*/ unsigned char reserved[152]; /*保留字段*/ }SGFrameInfo; //数据输出信息 typedef struct { unsigned int struct_size; unsigned char* data_pointer; /*数据指针*/ int data_size; /*数据长度*/ int offset_type; /*数据偏移类型*/ unsigned int offset_pos; /*数据偏移位置*/ }SGOutputData; typedef void* (*SGMalloc_t)(int memory_size); /*内存分配函数*/ typedef void (*SGFree_t)(void* memory_pointer, int memory_size); /*内存释放函数*/ typedef void (*SGDataCB_t)(SGOutputData* data, void* user); /*数据输出回调函数*/ //创建流封装器信息 typedef struct { unsigned int struct_size; void* user; /*用户自定义数据*/ SGMalloc_t sg_malloc; /*用户自定义内存分配函数指针*/ SGFree_t sg_free; /*用户自定义内存释放函数指针*/ SGDataCB_t sg_datacb; /*用户自定义数据输出回调函数指针*/ }SGCreateParam; #pragma pack() /******************************************************************** * Funcname: SG_CreateHandle * Purpose: 创建流封装器 * InputParam: nType : 码流封装类型 SG_STREAM_TYPE * pCreateParam : 创建流封装器信息 * Return: void* : 返回打包句柄, 失败返回NULL * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API void* CALLMETHOD SG_CreateHandle(unsigned int nType, SGCreateParam* pCreateParam); /******************************************************************** * Funcname: SG_DestroyHandle * Purpose: 销毁流封装器 * InputParam: handle : 流封装器句柄 * Return: 成功返回 SG_ERR_NOERR,失败返回错误码 * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API int CALLMETHOD SG_DestroyHandle(void* handle); /******************************************************************** * Funcname: SG_CreateHeader * Purpose: 创建文件头 * InputParam: handle : 流封装器句柄 * pHeader : 文件头信息 * Return: 成功返回 SG_ERR_NOERR,失败返回错误码 * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API int CALLMETHOD SG_CreateHeader(void* handle, SGHeaderInfo* pHeader); /******************************************************************** * Funcname: StreamPacket_InputData * Purpose: 传入媒体数据 * InputParam: handle : 打包句柄 * frame_info : 需要打包的媒体信息 * Return: 成功返回 SG_ERR_NOERR,失败返回错误码 * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API int CALLMETHOD SG_InputFrame(void* handle, SGFrameInfo* pFrame); /******************************************************************** * Funcname: StreamPacket_CreateTailer * Purpose: 删除打包句柄 * InputParam: handle : 打包句柄 * Return: 成功返回 SG_ERR_NOERR,失败返回错误码 * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API int CALLMETHOD SG_CreateTailer(void* handle, SGTailerInfo* pTailer); /******************************************************************** * Funcname: SG_SetEncryptType * Purpose: 设置加密类型 * InputParam: handle : 打包句柄 type: 加密类型,见SG_ENCRYPT_TYPE key: 秘钥指针 keylen: 秘钥长度 * Return: 成功返回 SG_ERR_NOERR,失败返回错误码 * Created: 2013.11.28 * Revision Record: Ver 1.0:z_junjie *********************************************************************/ SG_PACKAGE_API int CALLMETHOD SG_SetEncryptType(void* handle, int type, unsigned char* key, int keylen); #ifdef __cplusplus } #endif #endif // !defined(AFX_STREAMPACKAGE_H__014CF316_354F_47ED_B30D_D39912DD250D__INCLUDED_)