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