目     录

一、功能介绍

二、代码说明


一、功能介绍

        AS-V1000视频监控平台,也可以称为:视频监控平台,视频监控接入平台,视频监控汇聚平台,视频监控管理平台,视频监控综合管理平台,是一套集成了用户管理、设备管理、权限管理、视音频监控、大容量存储、电子地图的系统平台软件。它结合了现代视频技术、网络通讯技术、计算机控制技术、流媒体传输技术的综合解决方案,为用户提供了强大的、灵活的组网和应用能力。

        系统平台内部采用服务器集群、负载均衡,按需平滑扩容、故障自动恢复等策略进行架构,整个平台实现了丰富的功能,包含:实时多媒体数据转发和管理、移动流媒体转发管理、不间断录像、录像文件检索和回放、录像下载、设备状态管理、系统报警管理、视频转码、视频点播等等;整个平台具备稳定可靠、使用安全、兼容性强、接口开放、服务可堆叠、服务可多级级联、系统可平滑扩容等特点。具体包括如下服务模块:(1)录像服务模块(2)视频接入服务模块(3)点播服务模块(4)报警服务模块(5)转发和转码服务模块。

        平台可以通过各种协议,接入IPC、DVR、DVS、NVR等设备,以及一些大型的视频监控平台,包括海康威视、浙江大华、苏州科达、杭州宇视等主流品牌的监控平台,对于有些特有品牌的平台,也能够通过SDK接口、私有协议等方式接入进入本系统平台。

二、代码说明

        视频流处理函数的功能,主要是一些与流处理、视频包检测以及发送方式等等功能,对不同设备的私有视频流需要进行不同的处理。同时格式要支持H265、H264、MPEG4、MPEG2。

        目前可以解析各种私有码流,包括海康、大华、宇视、科达的私有视频流,下面分享头文件定义的源码,相互学习。

/*
视频流和会话相关的定义,主要定义一些与流处理、视频包检测以及发送方式相关的常量和枚举类型,并为后续的代码提供必要的头文件引用和命名空间使用声明。
格式支持H265、H264、MPEG4、MPEG2
可以解析各种私有码流,包括海康、大华、宇视、科达的私有视频流 
*/

#if !defined(__SESSION_HEADER_H__)
#define __SESSION_HEADER_H__

#include <map>
#include <MyList.h>
#include "MsgCenter.h"
#include "Constant.h"
#include "StrHash.h"
#include "NetSdkApp.h"
#include "UdpTransport.h"
#include "InstructConvert.h"
#include "RtspClientLib/RtpApp.h"
#include "RtspClientLib/RtpApp2.h"
#include "rtppacket.h"
#include "SysIf.h"
#include "Panasonic/NetSdkForPanasonicOverView.h"
#include "StreamParse.h"
#include "g711.h"

using namespace std;

#define ONE_PACKET_SLEEP_ZERO    usleep(40)
#define ONE_PACKET_SLEEP_ONE     usleep(10)
#define ONE_PACKET_SLEEP_TWO     usleep(10)



enum EStreamType     //用于表示不同的流类型,如PS流、原始RTP流、H264流等
{
	E_STREAMSENDTYPE_NONE,				//未解析
	
	E_STREAMTYPE_PS = 96,		            //rtp ps
	E_STREAMTYPE_ORG = 97,		            //rtp 原始流
	E_STREAMTYPE_RTPH264 = 98,		        //rtp h264
	E_STREAMTYPE_NOMARK = 99,		        //rtp h264
	E_STREAMTYPE_HIK_158 = 102,		        //rtp hik私有流,imax158码流
	E_STREAMTYPE_HIK = 103,		            //rtp hik私有流
	E_STREAMTYPE_HIK_PS = 104,		        //rtp ps hik私有流
	E_STREAMTYPE_DAHUA = 105,		        //dahua 私有流 
	E_STREAMTYPE_KEDA = 106,		            //keda有流
	E_STREAMTYPE_UNIVIEW = 107,		            //宇视私有流

	E_STREAMTYPE_TS = 111,	                //TS
};


enum EDetectVideoPacketType       //用于检测视频包的类型,如TS包、ES包、PS包等
{
	E_DETECT_VIDEOPACKETTYPE_NONE,				//未解析
	E_DETECT_VIDEOPACKETTYPE_TS,	            //TS, for imax17
	E_DETECT_VIDEOPACKETTYPE_ES,		        //ES,for imax 17
	E_DETECT_VIDEOPACKETTYPE_PS,		        //PS
	E_DETECT_VIDEOPACKETTYPE_H264,		        //264
	E_DETECT_VIDEOPACKETTYPE_H265,		        //265
	E_DETECT_VIDEOPACKETTYPE_MPEG4,		        //MPEG4 //for rtsp
	E_DETECT_VIDEOPACKETTYPE_MPEG2,		        //MPEG2
	E_DETECT_VIDEOPACKETTYPE_RTP,				//RTP
};


enum ESendStreamType        //用于表示发送流的方式,如UDP、RTP over UDP、TCP等。
{
	E_SENDSTREAMTYPE_NONE,					//未解析
	E_SENDSTREAMTYPE_UDP,		            //udp (来的码流就有rtp头)
	E_SENDSTREAMTYPE_RTPOVERUDP,	        //rtp over udp
	E_SENDSTREAMTYPE_TCP,	        		//tcp (来的码流就有rtp头)
	E_SENDSTREAMTYPE_RTPOVERTCPO,	        //tcp over
};


#define TS_SYN_HEADER		0x47

typedef enum
{
	STREAM_MUX_UNKNOWN			= 0,
	STREAM_MUX_RTP				= 1,
	STREAM_MUX_UDP_TS			= 2,
	STREAM_MUX_UDP_PS			= 3
}STREAM_MUX_E;



typedef struct
{
    unsigned int Date;
	int X;
	int Y;
	int W;
	int H;
}FaceRecInfo;

typedef struct 
{
	/**//* byte 0 */
	unsigned char csrc_len:4;        /**//* expect 0 */
	unsigned char extension:1;        /**//* expect 1, see RTP_OP below */
	unsigned char padding:1;        /**//* expect 0 */
	unsigned char version:2;        /**//* expect 2 */
	/**//* byte 1 */
	unsigned char payload:7;        /**//* RTP_PAYLOAD_RTSP */
	unsigned char marker:1;        /**//* expect 1 */
	/**//* bytes 2, 3 */
	unsigned short seq_no;            
	/**//* bytes 4-7 */
	unsigned  int timestamp;        
	/**//* bytes 8-11 */
	unsigned int ssrc;            /**//* stream number is used here. */
} RTP_FIXED_HEADER;


#define RTPSTREAM_MAXLEN   2000
#define RTP_HEADER         12



#endif