You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
backend-duoji-monitor/libs/win6422/StreamPackage.h

226 lines
6.8 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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_)