/******************************************************************** * 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