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