精华内容
下载资源
问答
  • 国标编码省市区

    2020-11-16 15:26:13
    国标编码省市区国标编码省市区链接地址 国标编码省市区链接地址 中华人民共和国民政部— http://www.mca.gov.cn/ 说明:不定期根据市级情况更新数据,2020-11-16 最新的一份数据...

    国标编码省市区链接地址

    1. 中华人民共和国民政部— http://www.mca.gov.cn/
      在这里插入图片描述
      说明:不定期根据市级情况更新数据,2020-11-16 最新的一份数据http://www.mca.gov.cn//article/sj/xzqh/2020/202011/202011060901.html
    展开全文
  • 国标28181地址编码遵循国标文档,下面是简单对28181地址编码进行解析,主要解析成不同的类型来使用。 下面粘贴一下地址编码的解析代码: #ifndef __PUBLICID_H__ #define __PUBLICID_H__ #include <stdio.h....

                                  视频监控安防平台-GB28181-20位地址编码解析

    国标28181地址编码遵循国标文档,下面是简单对28181地址编码进行解析,主要解析成不同的类型来使用。

    下面粘贴一下地址编码的解析代码:

     

    #ifndef __PUBLICID_H__
    #define __PUBLICID_H__
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include "../Common/MyThread.h"
    
    #define PUBID_PROVINCE_POS	0
    #define PUBID_PROVINCE_LEN	2
    
    #define PUBID_CIRY_POS		PUBID_PROVINCE_LEN
    #define PUBID_CITY_LEN		2
    
    #define PUBID_AREA_POS		(PUBID_CIRY_POS + PUBID_CITY_LEN)
    #define PUBID_AREA_LEN		2
    
    #define PUBID_UNIT_POS		(PUBID_AREA_POS + PUBID_AREA_LEN)
    #define PUBID_UNIT_LEN		2
    
    #define PUBID_VOCATION_POS	(PUBID_UNIT_POS + PUBID_UNIT_LEN)
    #define PUBID_VOCATION_LEN	2
    
    #define PUBID_TYPE_POS		(PUBID_VOCATION_POS + PUBID_VOCATION_LEN)
    #define PUBID_TYPE_LEN		3
    
    #define PUBID_SN_POS		(PUBID_TYPE_POS + PUBID_TYPE_LEN)
    #define PUBID_SN_LEN		7
    
    #define PUBID_TOTAL_LEN		(PUBID_SN_POS + PUBID_SN_LEN)
    
    typedef enum{
    	PUBIDTYPE_ERROR = 0,
    	PUBIDTYPE_DEVICE = 100,
    	PUBIDTYPE_DEVICE_DVR = 111,					//DVR编码
    	PUBIDTYPE_DEVICE_VIDEO_SVR = 112,			//视频服务器编码
    	PUBIDTYPE_DEVICE_ENCODER = 113,				//编码器编码
    	PUBIDTYPE_DEVICE_DECODER = 114,				//解码器编码
    	PUBIDTYPE_DEVICE_VIDEO_SWITCH_MATRIX = 115,	//视频切换矩阵编码
    	PUBIDTYPE_DEVICE_AUDIO_SWITCH_MATRIX = 116,//音频切换矩阵编码
    	PUBIDTYPE_DEVICE_ALARM_CTRL = 117,			//报警控制器编码
    	PUBIDTYPE_DEVICE_NVR = 118,					//网络视频录像机(NVR)编码
    	PUBIDTYPE_DEVICE_HVR = 119,					//混合硬盘录像机(HVR)编码
    	PUBIDTYPE_DEVICE_VIDEOSTITCH = 121,			//画面分割器设备
    	PUBIDTYPE_DEVICE_CAM = 130,					//混合硬盘录像机(HVR)编码
    	PUBIDTYPE_DEVICE_2 = 131,					//摄像机编码
    	PUBIDTYPE_DEVICE_IPC = 132,					//网络摄像机(IPC)编码
    	PUBIDTYPE_DEVICE_MONITOR = 133,				//显示器编码
    	PUBIDTYPE_DEVICE_ALARMINPUT= 134,			//报警输入设备编码(如红外、烟感、门禁等报警设备)
    	PUBIDTYPE_DEVICE_ALARMOUTPUT= 135,			//报警输出设备编码(如警灯、警铃等设备)
    	PUBIDTYPE_DEVICE_AUDIOINPUT= 136,			//语音输入设备编码
    	PUBIDTYPE_DEVICE_AUDIOOUTPUT= 137,			//语音输出设备
    	PUBIDTYPE_DEVICE_MOBILE= 138,					//移动传输设备编码
    	PUBIDTYPE_SIPSVR = 200,
    	PUBIDTYPE_WEBSVR = 201,
    	PUBIDTYPE_MEDIASVR = 202,
    	PUBIDTYPE_PROXYSVR = 203,
    	PUBIDTYPE_SAFESVR = 204,
    	PUBIDTYPE_ALARMSVR = 205,
    	PUBIDTYPE_DBSVR = 206,
    	PUBIDTYPE_GISSVR,
    	PUBIDTYPE_ADMINSVR,
    	PUBIDTYPE_GATEWAY = 209,
    	PUBIDTYPE_MSS = 210,
    	PUBIDTYPE_VOD = 212,
    	//UpdateServer
    	PUBIDTYPE_UPDATECENTER = 213,				//中心升级服务器编码
    	PUBIDTYPE_UPDATESVR = 214,
    	PUBIDTYPE_BUSINESS_GROUP = 215,   			//业务分组  角色
    	PUBIDTYPE_VIRTUAL_GROUP = 216,				//虚拟分组  资源组
    	PUBIDTYPE_EXTENDPLATFORM = 220,
    	PUBIDTYPE_CENTERUSER = 300,
    	PUBIDTYPE_CLIENT = 400,
    	PUBIDTYPE_EXTEND = 500,
    	PUBIDTYPE_CAM_GROUP = 501,
    	PUBIDTYPE_MON_GROUP = 503,
    	PUBIDTYPE_VIDEOSTITCH_GROUP = 521,
    	PUBIDTYPE_OTHER_GROUP = 522,    //其他资源组,包含报警输入输出,音频输入输出等
    }PUBIDTYPE_E;
    
    class CPublicID
    {
    public:
    	//sip:22345599818717@192.168.1.21:2039
    	CPublicID(const char *idstr = NULL);
    	~CPublicID();
    	char* GetPubID(const char *idstr, char XBuf[PUBID_TOTAL_LEN+1]);
    //	char* GetPubID(const char *idstr);
    	void PrasePubID(const char *idstr);
    
    	PUBIDTYPE_E GetSvrType();
    	int	GetProvice();
    	int GetCity();
    	int GetArea();
    	int GetUnit();
    	int GetVocation();
    
    	int GetType();
    	int GetSN();
    
    	bool IsSvr();
    	bool IsDev();
    	bool IsClient();
    	bool IsExtReg();
    
    	bool IsOurPlatFrorm();
    	bool IsOurPlatFrorm(const char aor[]);
    
    	char* BuildPubID(int type,int sn);
    	char *GetAdministrativeAreaID(); 
    
    	static int GetSN_s(const char *idstr);
    	static int GetType_s(const char *idstr);
    	static char* BuildPubID_s(int type,int sn);
    	static bool IsOurPlatForm_s(const char *idstr);
    	static bool ClonePubID_s(char* destid,const char*idstr);
    	static char* GetPubID_s(const char *idstr);
    	static bool IsSamePubID(const char *idstr1,const char *idstr2);
    	static bool IsSvr_s(const char *idstr);
    	static bool IsDev_S(const char *idstr);
    	static bool IsClient_S(const char *idstr);
    	static char* ToDevAorForRegister(char Aor[], char XBuf[128+1])
    	{
    		strcpy(XBuf, Aor);
    		memset(XBuf + PUBID_TYPE_POS, '0', PUBID_TOTAL_LEN - PUBID_TYPE_POS);
    		return XBuf;
    	}
    	static bool ISAtOuerPlatForm_s(const char* aor,const char *idstr);
    	static bool IsExtReg_s(const char *idstr);
    	
    	static char *GetAdministrativeAreaID_s(const char *idstr);
    	char* GetAreaUnitID(void);
    private:
    	PUBIDTYPE_E svrtype;
    	int provice;
    	int city;
    	int area;
    	int unit;
    	int vocation;
    	int type;
    	int sn;
    	static CCritSec CritSec_Publicid;
    };
    
    #define PUBIDMAXTYPEVALUE	999
    #define PUBIDMAXSNVALUE		9999999
    #define PUBIDGetSN(idstr)	CPublicID::GetSN_s(idstr)
    #define PUBIDGetType(idstr)	CPublicID::GetType_s(idstr)
    #define PUBIDBuild(type,sn)	CPublicID::BuildPubID_s(type,sn)
    #define PUBIDIsOurPlatForm(idstr) CPublicID::IsOurPlatForm_s(idstr)
    #define PUBIDClonePubid(destid,srcstr) CPublicID::ClonePubID_s(destid,srcstr)
    #define PUBIDGetPubID(idstr)	CPublicID::GetPubID_s(idstr)
    #define PUBIDIsSamePubID(idstr1,idstr2) CPublicID::IsSamePubID(idstr1,idstr2)
    #define PUBIDISTHESAMEPlatForm(aor,idstr) CPublicID::ISAtOuerPlatForm_s(aor,idstr)
    #define PUBIDISSVR(idstr) CPublicID::IsSvr_s(idstr)
    #define PUBIDISDEV(idstr) CPublicID::IsDev_S(idstr)
    #define PUBIDISCLIENT(idstr) CPublicID::IsClient_S(idstr)
    #define PUBIDISEXTREG(idstr) CPublicID::IsExtReg_s(idstr)
    
    
    void PUBIDSETPLATFORMID(char* myid);
    
    
    
    #endif 
    

     

    #include "publicid.h"
    #include "Log.h"
    
    static char * myplatformid = NULL;
    
    void PUBIDSETPLATFORMID(char* myid)
    {
    	myplatformid = myid;
    }
    
    #define PUBLICIDOURPLATFORMID	myplatformid
    
    CCritSec CPublicID::CritSec_Publicid;
    
    CPublicID::CPublicID(const char *idstr):svrtype(PUBIDTYPE_ERROR)
    {
    	if(idstr != NULL)
    	{
    		PrasePubID(idstr);
    	}
    }
    CPublicID::~CPublicID()
    {
    
    }
    
    char* CPublicID::GetPubID(const char *idstr, char XBuf[PUBID_TOTAL_LEN+1])
    {
    	if(idstr == NULL)
    	{
    		DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:idstr is null!!", __FUNCTION__);
    		return NULL;
    	}
    
    	char* string = (char*)idstr;
    	char *ptmp;
    	if(memcmp(string,"sip:",4) == 0)
    	{
    		string += 4;
    	}
    	ptmp = strchr(string,'@');
    	if(ptmp != NULL)
    	{
    		if(ptmp - string != PUBID_TOTAL_LEN)
    		{
    			DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:<%s>ptmp - string != %d!", __FUNCTION__, idstr, PUBID_TOTAL_LEN);
    			return NULL;
    		}
    		memcpy(XBuf,string,ptmp-string);
    		XBuf[ptmp-string] = '\0';
    	}
    	else
    	{
    		if(strlen(string) != PUBID_TOTAL_LEN)
    		{
    			//DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:<%s>len<%d> is not <%d>!", __FUNCTION__, idstr, strlen(string), PUBID_TOTAL_LEN);
    			return NULL;
    		}
    		memcpy(XBuf,string,PUBID_TOTAL_LEN);
    		XBuf[PUBID_TOTAL_LEN] = '\0';
    	}
    
    	return XBuf;
    }
    
    /*
    char* CPublicID::GetPubID(const char *idstr)
    {
    	if(idstr == NULL)
    	{
    		DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:idstr is null!!", __FUNCTION__);
    		return NULL;
    	}
    
    	static char buffer[PUBID_TOTAL_LEN + 0];
    	char* string = (char*)idstr;
    	char *ptmp;
    	if(memcmp(string,"sip:",4) == 0)
    	{
    		string += 4;
    	}
    	ptmp = strchr(string,'@');
    	if(ptmp != NULL)
    	{
    		if(ptmp - string != PUBID_TOTAL_LEN)
    		{
    			DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:<%s>ptmp - string != %d!", __FUNCTION__, idstr, PUBID_TOTAL_LEN);
    			return NULL;
    		}
    		memcpy(buffer,string,ptmp-string);
    		buffer[ptmp-string] = '\0';
    	}
    	else
    	{
    		if(strlen(string) != PUBID_TOTAL_LEN)
    		{
    			DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:<%s>len<%d> is not <%d>!", __FUNCTION__, idstr, strlen(string), PUBID_TOTAL_LEN);
    			return NULL;
    		}
    		memcpy(buffer,string,PUBID_TOTAL_LEN);
    		buffer[PUBID_TOTAL_LEN] = '\0';
    	}
    
    	return buffer;
    }
    */
    
    void CPublicID::PrasePubID(const char *idstr)
    {
    	if(idstr == NULL)
    	{
    		DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:%idstr is null!!", __FUNCTION__);
    		return;
    	}
    	svrtype = PUBIDTYPE_ERROR;
    
    	char buffer[PUBID_TOTAL_LEN + 1] = {0};
    	GetPubID(idstr, buffer);
    	
    	if(buffer == NULL)
    	{
    		DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s:GetPubID<%s> is failed!buffer is null!", __FUNCTION__, idstr);
    		return;
    	}
    	if(sscanf(buffer,"%02d%02d%02d%02d%02d%03d%07d",&provice,&city,&area,&unit,&vocation,&type,&sn) != 7)
    	{
    		//DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s: <%s>sscanf   failed!!!!", __FUNCTION__, idstr);
    		return;
    	}
    	
    	if(type>= 111 && type <= 199)
    	{
    		svrtype = PUBIDTYPE_DEVICE;
    	}
    	else if(type >= 200 && type <= 212)
    	{
    		svrtype = (PUBIDTYPE_E)type;
    	}
    	else if(type >= 213 && type <= 299)
    	{
    		svrtype = PUBIDTYPE_EXTENDPLATFORM;
    	}
    	else if(type >= 300 && type <= 399)
    	{
    		svrtype = PUBIDTYPE_CENTERUSER;
    	}
    	else if(type >= 400 && type <= 499)
    	{
    		svrtype = PUBIDTYPE_CLIENT;
    	}
    	else if(type >= 500 && type <= 999)
    	{
    		svrtype = PUBIDTYPE_EXTEND;
    	}
    	else
    	{
    		DBGPrint(ERROR_LEVEL, ERROR_LEVEL,"%s: get svrtype ID<%s> GetPubID <%s>Type<%d> Failed!!!!", __FUNCTION__, idstr, buffer, type);
    		return;
    	}
    //	DBGPrint(BREAK_LEVEL, BREAK_LEVEL,"%s: Prase Pubid<%s> GetPubID<%s> provice<%02d> city<%02d> area<%02d> unit<%02d> vocation<%02d> type<%03d> sn<%07d> svrtype<%03d>!!!!",  __FUNCTION__, idstr, buffer, provice, city, area, unit, vocation, type, sn, (int)svrtype);
    }
    
    PUBIDTYPE_E CPublicID::GetSvrType()
    {
    	return svrtype;
    }
    int	CPublicID::GetProvice()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:provice;
    }
    int CPublicID::GetCity()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:city;
    }
    int CPublicID::GetArea()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:area;
    }
    int CPublicID::GetUnit()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:unit;
    }
    int CPublicID::GetVocation()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:vocation;
    }
    
    int CPublicID::GetType()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:type;
    }
    int CPublicID::GetSN()
    {
    	return (svrtype == PUBIDTYPE_ERROR)?-1:sn;
    }
    
    bool CPublicID::IsSvr() 
    {
    	return (svrtype >= PUBIDTYPE_SIPSVR && svrtype < PUBIDTYPE_CENTERUSER);
    }
    bool CPublicID::IsDev() 
    {
    	return svrtype == PUBIDTYPE_DEVICE;
    }
    bool CPublicID::IsClient() 
    {
    	return svrtype == PUBIDTYPE_CLIENT;
    }
    
    bool CPublicID::IsExtReg()
    {
    	return ( (svrtype == PUBIDTYPE_DEVICE) || (svrtype == PUBIDTYPE_SIPSVR) || (svrtype == PUBIDTYPE_GATEWAY));
    }
    
    bool CPublicID::IsOurPlatFrorm()
    {
    	return IsOurPlatFrorm(PUBLICIDOURPLATFORMID);
    }
    
    bool CPublicID::IsOurPlatFrorm(const char aor[])
    {
    	CPublicID pubid(aor);
    
    	if(svrtype == PUBIDTYPE_ERROR || pubid.GetSvrType() == PUBIDTYPE_ERROR)
    	{
    		return false;
    	}
    	return (GetProvice() == pubid.GetProvice() && GetCity() == pubid.GetCity() && GetArea() == pubid.GetArea()
    				&& GetUnit() == pubid.GetUnit() && GetVocation() == pubid.GetVocation());
    }
    
    char* CPublicID::BuildPubID(int _type,int _sn)
    {
    	static char pubid[32];
    
    	if(svrtype == PUBIDTYPE_ERROR)
    	{
    		return NULL;
    	}
    	_type = (_type > PUBIDMAXTYPEVALUE)?(_type%PUBIDMAXTYPEVALUE):_type;
    	_sn   = (_sn > PUBIDMAXSNVALUE)?(_sn%PUBIDMAXSNVALUE):_sn;
    	
    	sprintf(pubid,"%02d%02d%02d%02d%02d%03d%07d",provice,city,area,unit,vocation,_type,_sn);
    
    	return pubid;
    }
    
    char* CPublicID::GetAdministrativeAreaID()
    {
    	static char AreaID[32] = {0};
    	AreaID[0] = '\0';
    	if(provice > 0)
    		sprintf(AreaID + strlen(AreaID), "%02d", provice);
    	if(city > 0)
    		sprintf(AreaID + strlen(AreaID), "%02d", city);
    	if(area > 0)
    		sprintf(AreaID + strlen(AreaID), "%02d", area);
    	if(unit > 0)
    		sprintf(AreaID + strlen(AreaID), "%02d", unit);
    	if(vocation > 0)
    		sprintf(AreaID + strlen(AreaID), "%02d", vocation);
    
    	AreaID[strlen(AreaID)] = '\0';
    	return AreaID;
    }
    char* CPublicID::GetAreaUnitID(void)
    {
    	static char AreaUnitID[5] = {0};
    	AreaUnitID[0] = '\0';
    	if(area > 0)
    		sprintf(AreaUnitID + strlen(AreaUnitID), "%02d", area);
    	if(unit > 0)
    		sprintf(AreaUnitID + strlen(AreaUnitID), "%02d", unit);
    	AreaUnitID[strlen(AreaUnitID)] = '\0';
    	return AreaUnitID;
    }
    int CPublicID::GetSN_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    
    	return pubid.GetSN();
    }
    int CPublicID::GetType_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    
    	return pubid.GetType();
    }
    char* CPublicID::BuildPubID_s(int _type,int _sn)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(PUBLICIDOURPLATFORMID);
    
    	return pubid.BuildPubID(_type,_sn);
    }
    bool CPublicID::IsOurPlatForm_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    
    	return pubid.IsOurPlatFrorm();
    }
    
    bool CPublicID::ClonePubID_s(char* destid,const char*idstr)
    {
    	char*srcstr = GetPubID_s(idstr);
    	if(destid == NULL || srcstr == NULL)
    	{
    		return false;
    	}
    
    	memcpy(destid,srcstr,PUBID_TOTAL_LEN);
    	destid[PUBID_TOTAL_LEN] = 0;
    	return true;
    }
    
    char* CPublicID::GetPubID_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid;
    	char buffer[PUBID_TOTAL_LEN + 1] = {0};
    	
    	return pubid.GetPubID(idstr, buffer);
    }
    
    bool CPublicID::IsSamePubID(const char *idstr1,const char *idstr2)
    {
    	char pubid1[PUBID_TOTAL_LEN + 1];
    	char pubid2[PUBID_TOTAL_LEN + 1];
    	char* pid1;
    	char* pid2;
    	if(idstr1 == NULL || idstr2 == NULL)
    	{
    		return false;
    	}
    	pid1 = PUBIDGetPubID(idstr1);
    	if(pid1 == NULL)
    	{
    		return false;
    	}
    	strcpy(pubid1,pid1);
    	pid2 = PUBIDGetPubID(idstr2);
    	if(pid2 == NULL)
    	{
    		return false;
    	}
    	strcpy(pubid2,pid2);
    
    
    	return strcmp(pubid1,pubid2) == 0;
    }
    
    bool CPublicID::ISAtOuerPlatForm_s(const char* aor,const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	if(aor == NULL || idstr == NULL)
    	{
    		return false;
    	}
    
    	CPublicID pubid1(aor);
    	CPublicID pubid2(idstr);
    
    	if(pubid1.GetProvice() == pubid2.GetProvice() && pubid1.GetCity() == pubid2.GetCity() &&
    		pubid1.GetArea() == pubid2.GetArea() && pubid1.GetUnit() == pubid2.GetUnit() && pubid1.GetVocation() == pubid2.GetVocation())
    	{
    		return true;
    	}
    
    	return false;
    }
    
    bool  CPublicID::IsSvr_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    	return pubid.IsSvr();
    }
    
    bool CPublicID::IsDev_S(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    	return pubid.IsDev();
    }
    
    bool CPublicID::IsClient_S(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    	return pubid.IsClient();
    }
    
    bool CPublicID::IsExtReg_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    	if(pubid.IsExtReg())
    	{
    		return true;
    	}
    	return false;
    }
    
    char *CPublicID::GetAdministrativeAreaID_s(const char *idstr)
    {
    	CAutoLock AutoLock(&CritSec_Publicid);
    	CPublicID pubid(idstr);
    	
    	return pubid.GetAdministrativeAreaID();
    }
    
    

     

     

     

     

     

    展开全文
  • 国标码查询系统\国家标准信息汉字交换码、国标码查询软件免费下载地址HTTP://WWW.SLPMRJ.COM/GBMCX.RAR为客户提供单个或多个姓名国标码/交换码、国家标准信息汉字编码的查询与报表打印功能,软件不限班级,不限人数
  • (GBT28181国标平台软件下载地址:https://github.com/QuickGBLink88/GB28181_ServerPlatform) 一、操作步骤 在一个国标系统中,包含的设备角色一般可分为:中心信令服务器、SIP设备、SIP客户端和流媒体服务器。...

    这篇文章讲解一下QuickGBLink开发的国标服务器如何对接海康IPC。

     (GBT28181国标平台软件下载地址:https://github.com/QuickGBLink88/GB28181_ServerPlatform

    一、操作步骤

    在一个国标系统中,包含的设备角色一般可分为:中心信令服务器、SIP设备、SIP客户端和流媒体服务器。而SIP设备也分不同类型,比如是编码设备、解码设备或其他。按照国标通信流程,SIP设备必须注册上中心信令服务器,才能进行其他的信令交互。在我们的这个系统中,中心信令服务器就是我们的服务器软件GBServerPlatform,而SIP设备就是指海康IPC。IPC注册前,需要在IPC的配置页面设置好服务器的IP、服务器端口号、SIP ID、登录密码等信息,这些信息要和服务器上配置的一致。下面演示如何配置这些基本信息。

    1. 在服务器这边,进去配置页面,填写好配置页面左栏(即本机参数)的信息,示意图如下:

    其中本机IP要填写对,设置的IP要跟本机实际IP不一致,否则可能会出现与其他设备通信不正常的问题。 

    其中国标编码(又叫国标设备ID、SIP ID)是一个20位的数字,由中心编码(8位)、行业编码(2位)、类型编码(3位)和序号(7位)四个码段共20位十进制数字字符构成,即系统编码 =中心编码 + 行业编码 + 类型编码 + 序号。(详情见:《安全防范视频监控联网系统信息传输、交换、控制技术要求)。

    其中,类型编码指定了设备或用户的具体类型,由3位数字组成,即20位国标编码中的第11、12、13位。这三位组成的数值在某个范围段表示一种设备类型,例如:200-299是指平台,111-199是指前端设备,而网络IPC一般是132。

    2. 让我们看看IPC页面上怎么配置,打开海康IPC后台配置页面,进入网络-》高级配置,点击“平台接入”页面,如下图所示:

    下面介绍下各配置项基本意义:

     本地SIP端口:默认为5060,是指IPC本地绑定的服务通信端口。

    SIP用户名,SIP用户认证ID:这两个是填IPC的设备ID(即IPC的国标设备编码)。

    SIP服务器ID: 就是服务器的国标设备ID,也就是服务器的标识,

    SIP服务域:跟服务器上配置的域名一致,一般是SIP服务器ID前8-10位。

    SIP服务器地址:SIP服务所在机器的IP地址。

    SIP服务器端口:SIP服务端口,其他SIP设备发送命令到此端口与之通信。

    密码:填写登录服务器的密码。

    其他的配置默认即可。

    上面有个协议版本的选项,目前国标有GB28181-2011和 GB28181-2016两个版本。一般来说大部分国标设备对2011版本的属性支持度比较好,所以用这个版本兼容性好,但是2011版本信令传输使用的是UDP的;如果需要用TCP传输,则选择用2016版本。选择2016版本,传输协议可以选“UDP”,也可以选“TCP”。

       注意:上面的“启用”选项要勾选,否则IPC的GB28181服务没有启动。

    GB28181配置好以后,IPC启动GB28181服务。启动成功后,IPC会向SIP Server发送注册消息。

    注册成功后,服务器左边的树状控件能看到这个IPC的国标ID。

     

    点击这个IPC节点,进入实时预览页面,点击播放,如果正常就会看到IPC的视频。

    二、SIP命令交互

    什么是SIP?SIP(会话初始化协议)是在 IP网络上进行多媒体通信的应用层控制协议,用来创建,修改和终止有多个参与者的多媒体会话进程。SIP协议使用 RTP协议传送音视频数据流,使用 SDP协议进行媒体描述。
     GB28181将 SIP定位为联网系统的主要信令基础协议,并利用 SIP协议的有关扩展,实现了对非会话业务的兼顾,例如,对报警业务、历史视音频回放、下载等的支持。

    本系统中,服务器和IPC交互用到的主要SIP信令有:

     1. 注册(Register)
        安全注册 GB28181使用的是SIP规定的 Register方法实现。
        当客户端第一次接入时,客户端将持续向 Server端发送 REGISTER消息,直到 Server端回复"200 OK"代表注册成功。每隔一定时间客户端都会再次向服务器注册一遍,防止注册过期导致断开连接。

    2. 信息查询
        注册成功后,客户端与服务器之间信息查询操作,如目录查询、设备信息查看等,GB28181使用 SIP扩展协议规定的 Message方法实现。服务器发送的查询信息命令基本有3条:

    1.Catalog: 设备目录查询消息;
    2.DeviceInfo:设备信息;
    3.DeviceStatus:设备状态信息;

    查询信息信令的主要流程图如下:


    3. 实时音视频
        获取摄像头上的实时音视频,GB28181使用 SIP扩展协议规定的 Invite方法实现。

    4.  注销
    客户端向服务器发送Register注册消息,消息中的Expire字段的值设为0即为注销。

    通信过程的抓包报文截图如下:

    展开全文
  • UTF8编码

    千次阅读 2017-08-19 00:40:07
    这里有一篇utf8汉字编码表,可以备不时之需。 地址:http://blog.csdn.net/qiaqia609/article/details/8069678 ...都叫编码,准确说国标码、Unicode码其实是对人类的字符进行统一编码的码表。 而UTF-8是对Uni

    这里有一篇utf8汉字编码表,可以备不时之需。

    地址:http://blog.csdn.net/qiaqia609/article/details/8069678

    第一列为国标码码位

    第二列为16位Unicode字符集编码码位

    第三列为UTF-8编码

    第四列为对应的中文符号


    都叫编码,准确说国标码、Unicode码其实是对人类的字符进行统一编码的码表。

    而UTF-8是对Unicode字符做编码,因为编码后可以节省空间,因为Unicode码表中的每个字符在码位长度是2或者4个字节。

    展开全文
  • J.18.1 SUBSCRIBEsip:事件源编码@事件源域名或IP地址SIP/2.0 Via:SIP/2.0/UDP 事件观察者域名或IP地址 Max-Forwards:70 From:显示名<sip:事件观察者编码@事件观察者域名或IP地址>;tag=BK32B1U8DKDrB To:显示名...
  • day 06 小数据池和编码

    2018-11-06 19:30:00
    1.小数据池,常量池,id()查看变量的内存地址, is 判断内存地址是否一致, == 判断内容是否一致 小数据池的作用:为了快速的创建字符串对象,可以减少内存的浪费。用缓存的前提:数据可以被共享。不可变 2.编码...
  • 1. 小数据池,(其他语言又叫常量池) id() 查看变量的内存地址 is和== is 判断内存地址是否一致 ...2. 再谈编码 ascii: 数字,字母, 特殊字符。 字节: 8bit = 1byte gbk: 国标码。16bit, 2...
  • 由于数据较大,完整的GBK编码表按GBK规范分成3部分 GBK/2为与GB2312兼容的国标汉字部分,GBK/3和GBK/4为扩展汉字部分 每一部分都有自己的地址计算公式 若输入是acsii则返回同样的acsii 若输入是中文字符则返回...
  • 由于数据较大,完整的GBK编码表按GBK规范分成3部分 GBK/2为与GB2312兼容的国标汉字部分,GBK/3和GBK/4为扩展汉字部分 每一部分都有自己的地址计算公式 若输入是acsii则返回同样的acsii 若输入是中文字符则返回拼音的...
  • 每个多功能电能表均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。每帧由帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成。每部分由若干字节组成。 ...
  • 前言:之前在项目开发中,经常需要用户录入身份证信息,同时还要提供籍贯等信息。那么,如何从身份证号码中解析...这里面的信息量,估计没有几个愿意根据国标录完之后在进行比较的(太多)。后面,在项目的省市区三级...
  • 一般会从地址区域结构的国标那里获取数据,网址:http://www.stats.gov.cn/tjbz/xzqhdm/t20120105_402777427.htm 但是常常希望得到更多的数据。。比如邮政编码。。上面的国标网址是没有提供的。。于是我去翻google...
  • 基于android开发的GB28181前端设备的app,像一个支持GB28181协议的IPC一样,可以接入到GB28181平台里。... (4)GB28181平台给设备分配的国标编码(一般为20位数字的唯一编码),设备注册到平台时需要...
  • gb2312/gbk 国标 Unicode 国际编码集 utf-8 utf-16(子集) latin1(ISO-8859-1)欧洲编码 设置(端口号,编码,优化) 修改安装目录的my.ini文件 保存后,重启mysql服务 数据库机制 数据持久化的一种方式:数据存储...
  • is 和 ==的区别

    2018-08-02 21:42:00
    is比较的是id 比较的内存地址  == ; 比较 比较的是两边的值 回顾编码: 1;Ascii 最早的编码至今还在使用,8位一个字节 2;GBK 国标码,16位2字节 3;Unicode 万国码 ,32位4字节 4;Utf-8 可变长度的Unicode is...
  • 上节课回顾1. python里的(int,str)存在一个小数据池主要是为了节约内存. int: -5~256 str: is和 == 的区别:...编码 1.ASCII, 英文, 数字, 一些特殊符号 8bit 1byte 2. GBK, 国标码, 汉字. 16bit 2byte 必须兼容ASCI...
  • python 学习DAY06

    2018-08-03 21:31:00
    is 判断两边的内存地址是否一样 小数据池int -5到256 str 没有特殊字符 ascii 码不支持中文八位一个字节 gbk码 国标码 支持大部分中文 占两个字节 unicode 万国码 支持世界上大部分的语言 所有字符都是四个字节...
  • Linux环境下解决通过Tomcat访问中文资源文件乱码问题1....http://ip:8080/pdf/tdzs/国标200-221号.pdf,前端直接在游览器访问这个地址时候出现404错误。在linux系统中,如果将项目部署在tomcat下,项目中包含中文名称
  • 公司简介:上海菁园科技有限公司前身为上海琼谊贸易有限公司,成立于2007年9月19日,因为股东的变化与办公地址的更换故在2013年7月29日重新申请了新公司取名曰:上海菁园科技有限公司,新公司坐落于国标大都市上海...
  • 所有打印内容(邮政编码地址、单位、电话、姓名、称谓、传真、EMAIL、网址等)平滑拖动设置;全部使用所见即所得的设置方式,由于使用图片为背景,不管这些表单如何变化,设置都变得易如反掌。是为国家事业、企业...
  • EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)视频直播与视频点播等多种协议,支持H.264、H.265、AAC等多种音视频编码格式,支持mse、wasm等多种解码方式,支持Windows、Linux、Android、...
  • 会计理论考试题

    2012-03-07 21:04:40
    第一套 选择题 1.计算机感染病毒后会产生各种现象,以下不属于病毒现象的是__D__。 A、文件占用的空间变大 B、发生异常蜂鸣声 C、屏幕显示异常图形 D、机内的电扇不转 2. Windows98支持下面___C__网络协议。...
  • 1.10 用GAL器件设计地址译码器的新方法 1.11 高速低功耗FCT器件 1.12 DS80C320的特点及应用 1.13 AT89C系列单片机的解密与加密技术 1.14 滚动码发生器HCS300 1.15 IC卡技术概述 1.16 智能IC...
  • 深入理解计算机系统(中文版)

    热门讨论 2014-03-05 22:49:05
    国标编号:ISBN 7-5083-2175-8 条形码 :9787508321752 字数 :1209千字  内容提要:  本书英文版久负盛名,被众多专业人士称为“最伟大的计算机教材”之一,着名的美国卡内基梅隆大学计算机科学系一直将...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
     B)地址码是指令中给出源操作数地址或运算结果的目的地址的有关信息部分  C)地址总线上既可传送地址信息,也可传送控制信息和其他信息  D)地址总线上除传送地址信息外,不可以用于传输控制信息和其它信息  23、...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

地址国标编码