目 录
一、功能介绍
二、代码说明
一、功能介绍
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