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/StreamParser.h

236 lines
7.6 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.

/********************************************************************
* Copyright 1992-2008, ZheJiang Dahua Technology Stock Co.Ltd.
* All Rights Reserved
* File Name: StreamParser.h
* Description: interface for streamParser
*********************************************************************/
#ifndef __STREAM_PARSER_H_
#define __STREAM_PARSER_H_
#if (defined(WIN32) || defined(WIN64))
#define SP_API __declspec(dllimport)
#define CALLMETHOD __stdcall
#else /*linux or mac*/
#define SP_API
#define CALLMETHOD
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*接口返回值*/
enum SP_RESULT
{
SP_SUCCESS = 0, /*成功*/
SP_ERROR_INVALID_HANDLE = 1, /*无效句柄*/
SP_ERROR_FILE_TYPE_NOSUPPORT = 2, /*文件类型不支持*/
SP_ERROR_STREAM_NOSUPPORT = 3, /*流类型不支持*/
SP_ERROR_PARAMETER = 6, /*参数有误*/
SP_ERROR_BAD_FORMATTED = 9, /*文件格式错误*/
SP_ERROR_BUFFER_OVERFLOW = 12, /*内部缓冲区溢出*/
SP_ERROR_SYSTEM_OUT_OF_MEMORY = 13, /*系统内存不够*/
SP_ERROR_LIST_EMPTY = 14, /*列表为空*/
};
/*帧类型*/
enum SP_FRAME_TYPE
{
SP_FRAME_TYPE_UNKNOWN = 0, /*帧类型不可知*/
SP_FRAME_TYPE_VIDEO, /*帧类型是视频帧*/
SP_FRAME_TYPE_AUDIO, /*帧类型是音频帧*/
SP_FRAME_TYPE_DATA /*帧类型是数据帧*/
};
/*帧子类型*/
enum SP_FRAME_SUB_TYPE
{
SP_FRAME_SUB_TYPE_DATA_INVALID = -1, /*数据无效*/
SP_FRAME_SUB_TYPE_VIDEO_I_FRAME = 0 , /*I帧*/
SP_FRAME_SUB_TYPE_VIDEO_P_FRAME, /*P帧*/
SP_FRAME_SUB_TYPE_VIDEO_B_FRAME, /*B帧*/
SP_FRAME_SUB_TYPE_VIDEO_JPEG_FRAME=8, /*JPEG帧*/
};
/*编码类型*/
enum SP_ENCODE_VIDEO_TYPE
{
SP_ENCODE_VIDEO_UNKNOWN = 0, /*视频编码格式不可知*/
SP_ENCODE_VIDEO_MPEG4 , /*视频编码格式是MPEG4*/
SP_ENCODE_VIDEO_HI_H264, /*视频编码格式是海思H264*/
SP_ENCODE_VIDEO_JPEG, /*视频编码格式是标准JPEG*/
SP_ENCODE_VIDEO_DH_H264, /*视频编码格式是大华码流H264*/
SP_ENCODE_VIDEO_MPEG2 = 9, /*视频编码格式是MPEG2*/
SP_ENCODE_VIDEO_DH_H265 = 12, /*视频编码格式是H265*/
SP_ENCODE_VIDEO_H263 = 35, /*视频编码格式是H263*/
};
enum SP_ENCODE_AUDIO_TYPE
{
SP_ENCODE_AUDIO_UNKNOWN = 0,
SP_ENCODE_AUDIO_PCM = 7, /*音频编码格式是PCM8*/
SP_ENCODE_AUDIO_G729, /*音频编码格式是G729*/
SP_ENCODE_AUDIO_IMA, /*音频编码格式是IMA*/
SP_ENCODE_PCM_MULAW, /*音频编码格式是PCM MULAW*/
SP_ENCODE_AUDIO_G721, /*音频编码格式是G721*/
SP_ENCODE_PCM8_VWIS, /*音频编码格式是PCM8_VWIS*/
SP_ENCODE_MS_ADPCM, /*音频编码格式是MS_ADPCM*/
SP_ENCODE_AUDIO_G711A, /*音频编码格式是G711A*/
SP_ENCODE_AUDIO_AMR, /*音频编码格式是AMR*/
SP_ENCODE_AUDIO_PCM16, /*音频编码格式是PCM16*/
SP_ENCODE_AUDIO_G711U = 22, /*音频编码格式是G711U*/
SP_ENCODE_AUDIO_G723, /*音频编码格式是G723*/
SP_ENCODE_AUDIO_AAC = 26, /*音频编码格式是AAC*/
SP_ENCODE_AUDIO_MP2 = 31, /*音频编码格式是mp2*/
SP_ENCODE_AUDIO_OGG, /*音频编码格式是ogg vorbis*/
SP_ENCODE_AUDIO_MP3, /*音频编码格式是mp3*/
SP_ENCODE_AUDIO_G722_1, /*音频编码格式是G722.1*/
SP_ENCODE_AUDIO_AC = 49, /*音频编码格式是AC3*/
};
/*加密类型*/
enum SP_ENCRYPT_TYPE
{
SP_ENCRYPT_UNKOWN = 0,
SP_ENCRYPT_AES,
};
/*时间信息*/
typedef struct
{
int nYear; /*年*/
int nMonth; /*月*/
int nDay; /*日*/
int nHour; /*小时*/
int nMinute; /*分钟*/
int nSecond; /*秒*/
int nMilliSecond; /*毫秒*/
} SP_TIME;
#pragma pack(1)
/*帧信息 256字节*/
typedef struct
{
/*类型*/
int frameType; /*帧类型*/
int frameSubType; /*帧子类型*/
int frameEncodeType; /*帧编码类型*/
unsigned char reserved[4];
/*数据*/
unsigned char* streamPointer; /*指向码流数据,NULL表示无效数据*/
int streamLen; /*码流长度*/
unsigned char* framePointer; /*指向帧头,NULL表示无效数据*/
int frameLen; /*帧长度(包括帧头、帧体、帧尾)*/
/*时间*/
SP_TIME frameTime; /*时间信息*/
int timeStamp; /*时间戳*/
/*序号*/
int frameSeq; /*帧序号*/
/*视频属性,关键帧才有*/
int frameRate; /*帧率*/
int width; /*宽*/
int height; /*高*/
unsigned char reserved2[8];
/*音频属性*/
int samplesPerSec; /*采样频率*/
int bitsPerSample; /*采样位数*/
int channels; /*声道数*/
/*错误标志*/
int isValid; /*0为有效非0表示帧错误*/
#if defined(_WIN64) || defined(__x86_64__)
/*扩展*/
unsigned char reserved3[432]; /*保留字节*/
#else
/*扩展*/
unsigned char reserved3[412]; /*保留字节*/
#endif
} SP_FRAME_INFO;
#pragma pack()
/********************************************************************
* Funcname: SP_CreateStreamParser
* Purpose: 创建流分析器
* InputParam: nBufferSize: 需要开辟的缓冲区大小不能小于SP_PaseData每次传入的数据流长度
* OutputParam: 无
* Return: NULL: 创建流分析器失败
* 其他值:流解析器句柄
*********************************************************************/
SP_API void* CALLMETHOD SP_CreateStreamParser(int nBufferSize);
/********************************************************************
* Funcname: SP_ParseData
* Purpose: 输入数据流,并同步进行分析
* InputParam: handle: 通过SP_CreateStreamParser返回的句柄
* stream: 数据流缓冲地址
* length: 数据流长度
* OutputParam: 无
* Return: 0:调用成功
* 其他值失败通过SP_GetLastError获取错误码
*********************************************************************/
SP_API SP_RESULT CALLMETHOD SP_ParseData(void* handle, unsigned char* stream, int length);
/********************************************************************
* Funcname: SP_GetOneFrame
* Purpose: 同步获取一帧信息,反复调用直到失败
* InputParam: handle: 通过SP_CreateStreamParser返回的句柄
* frameInfo: 外部SP_FRAME_INFO的一个结构地址。
* OutputParam: 无
* Return: 0:调用成功
* 其他值失败通过SP_GetLastError获取错误码
*********************************************************************/
SP_API SP_RESULT CALLMETHOD SP_GetOneFrame(void* handle, SP_FRAME_INFO* frameInfo);
/********************************************************************
* Funcname: SP_StreamEncryptKey
* Purpose: 设置实时流解析秘钥
* InputParam: handle: 通过SP_CreateStreamParser或SP_CreateFileParser返回的句柄。
* type : 秘钥类型 SP_ENCRYPT
* key秘钥数据
* keylen秘钥长度
* OutputParam: 无
* Return: 0:调用成功
* 其他值:失败,
*********************************************************************/
SP_API SP_RESULT CALLMETHOD SP_StreamEncryptKey(void* handle, unsigned int type, unsigned char* key, int keylen);
/********************************************************************
* Funcname: SP_Destroy
* Purpose: 销毁码流分析器
* InputParam: handle: 通过SP_CreateStreamParser返回的句柄。
* OutputParam: 无
* Return: 0:调用成功
* 其他值失败通过SP_GetLastError获取错误码
*********************************************************************/
SP_API SP_RESULT CALLMETHOD SP_Destroy(void* handle);
/********************************************************************
* Funcname: SP_GetLastError
* Purpose: 获得码流分析库错误码
* InputParam: handle: 通过SP_CreateStreamParser或SP_CreateFileParser返回的句柄。
* OutputParam: 无
* Return: 0:调用成功
* 其他值失败通过SP_GetLastError获取错误码 值
*********************************************************************/
SP_API SP_RESULT CALLMETHOD SP_GetLastError(void* handle);
#ifdef __cplusplus
}
#endif
#endif