فهرست منبع

新增Linux x64版本库

LAPTOP-V47PCT1U\Gavin 4 ماه پیش
والد
کامیت
c63874ca6c
4فایلهای تغییر یافته به همراه341 افزوده شده و 1 حذف شده
  1. 168 0
      Linux/EasyTypes.h
  2. 172 0
      Linux/GB28181DeviceAPI.h
  3. 1 1
      Linux/README.md
  4. BIN
      Linux/libeasygbd.a

+ 168 - 0
Linux/EasyTypes.h

@@ -0,0 +1,168 @@
+/*
+	Copyright (c) 2012-2019 TSINGSEE.COM.  All rights reserved.
+	Github: https://github.com/tsingsee
+	WEChat: tsingsee
+	Website: http://www.tsingsee.com
+*/
+#ifndef _Easy_Types_H
+#define _Easy_Types_H
+
+#ifdef _WIN32
+#define Easy_API  __declspec(dllexport)
+#define Easy_APICALL  __stdcall
+#define WIN32_LEAN_AND_MEAN
+#else
+#define Easy_API __attribute__ ((visibility("default")))
+#define Easy_APICALL  __attribute__ ((visibility("default")))
+#endif
+
+#define Easy_Handle void*
+
+typedef int						Easy_I32;
+typedef unsigned char           Easy_U8;
+typedef unsigned char           Easy_UChar;
+typedef unsigned short          Easy_U16;
+typedef unsigned int            Easy_U32;
+typedef unsigned char			Easy_Bool;
+
+enum
+{
+    Easy_NoErr						= 0,
+    Easy_RequestFailed				= -1,
+    Easy_Unimplemented				= -2,
+    Easy_RequestArrived				= -3,
+    Easy_OutOfState					= -4,
+    Easy_NotAModule					= -5,
+    Easy_WrongVersion				= -6,
+    Easy_IllegalService				= -7,
+    Easy_BadIndex					= -8,
+    Easy_ValueNotFound				= -9,
+    Easy_BadArgument				= -10,
+    Easy_ReadOnly					= -11,
+	Easy_NotPreemptiveSafe			= -12,
+    Easy_NotEnoughSpace				= -13,
+    Easy_WouldBlock					= -14,
+    Easy_NotConnected				= -15,
+    Easy_FileNotFound				= -16,
+    Easy_NoMoreData					= -17,
+    Easy_AttrDoesntExist			= -18,
+    Easy_AttrNameExists				= -19,
+    Easy_InstanceAttrsNotAllowed	= -20,
+	Easy_InvalidSocket				= -21,
+	Easy_MallocError				= -22,
+	Easy_ConnectError				= -23,
+	Easy_SendError					= -24
+};
+typedef int Easy_Error;
+
+typedef enum __EASY_ACTIVATE_ERR_CODE_ENUM
+{
+	EASY_ACTIVATE_INVALID_KEY		=		-1,			/* 无效Key */
+	EASY_ACTIVATE_TIME_ERR			=		-2,			/* 时间错误 */
+	EASY_ACTIVATE_PROCESS_NAME_LEN_ERR	=	-3,			/* 进程名称长度不匹配 */
+	EASY_ACTIVATE_PROCESS_NAME_ERR	=		-4,			/* 进程名称不匹配 */
+	EASY_ACTIVATE_VALIDITY_PERIOD_ERR=		-5,			/* 有效期校验不一致 */
+	EASY_ACTIVATE_PLATFORM_ERR		=		-6,			/* 平台不匹配 */
+	EASY_ACTIVATE_COMPANY_ID_LEN_ERR=		-7,			/* 授权使用商不匹配 */
+	EASY_ACTIVATE_SUCCESS			=		9999,		/* 激活成功 */
+
+}EASY_ACTIVATE_ERR_CODE_ENUM;
+
+/* 视频编码 */
+#define EASY_SDK_VIDEO_CODEC_H264	0x1C		/* H264  */
+#define EASY_SDK_VIDEO_CODEC_H265	0xAE	  /* H265 */
+#define	EASY_SDK_VIDEO_CODEC_MJPEG	0x08		/* MJPEG */
+#define	EASY_SDK_VIDEO_CODEC_MPEG4	0x0D		/* MPEG4 */
+
+/* 音频编码 */
+#define EASY_SDK_AUDIO_CODEC_AAC	0x15002		/* AAC */
+#define EASY_SDK_AUDIO_CODEC_G711U	0x10006		/* G711 ulaw*/
+#define EASY_SDK_AUDIO_CODEC_G711A	0x10007		/* G711 alaw*/
+#define EASY_SDK_AUDIO_CODEC_G726	0x1100B		/* G726 */
+
+#define EASY_SDK_EVENT_CODEC_ERROR	0x63657272	/* ERROR */
+#define EASY_SDK_EVENT_CODEC_EXIT	0x65786974	/* EXIT */
+
+/* 音视频帧标识 */
+#define EASY_SDK_VIDEO_FRAME_FLAG	0x00000001		/* 视频帧标志 */
+#define EASY_SDK_AUDIO_FRAME_FLAG	0x00000002		/* 音频帧标志 */
+#define EASY_SDK_EVENT_FRAME_FLAG	0x00000004		/* 事件帧标志 */
+#define EASY_SDK_RTP_FRAME_FLAG		0x00000008		/* RTP帧标志 */
+#define EASY_SDK_SDP_FRAME_FLAG		0x00000010		/* SDP帧标志 */
+#define EASY_SDK_MEDIA_INFO_FLAG	0x00000020		/* 媒体类型标志*/
+#define EASY_SDK_SNAP_FRAME_FLAG	0x00000040		/* 图片标志*/
+
+/* 视频关键字标识 */
+#define EASY_SDK_VIDEO_FRAME_I		0x01		/* I帧 */
+#define EASY_SDK_VIDEO_FRAME_P		0x02		/* P帧 */
+#define EASY_SDK_VIDEO_FRAME_B		0x03		/* B帧 */
+#define EASY_SDK_VIDEO_FRAME_J		0x04		/* JPEG */
+
+/* 连接类型 */
+typedef enum __EASY_RTP_CONNECT_TYPE
+{
+	EASY_RTP_OVER_TCP	=	0x01,		/* RTP Over TCP */
+	EASY_RTP_OVER_UDP,					/* RTP Over UDP */
+	EASY_RTP_OVER_MULTICAST				/* RTP Over MULTICAST */
+}EASY_RTP_CONNECT_TYPE;
+
+typedef struct __EASY_AV_Frame
+{
+	Easy_U32    u32AVFrameFlag;		/* 帧标志  视频 or 音频 */
+	Easy_U32    u32AVFrameLen;		/* 帧的长度 */
+	Easy_U32    u32VFrameType;		/* 视频的类型,I帧或P帧 */
+	Easy_U8     *pBuffer;			/* 数据 */
+	Easy_U32	u32TimestampSec;	/* 时间戳(秒)*/
+	Easy_U32	u32TimestampUsec;	/* 时间戳(微秒) */
+	Easy_U32    u32PTS;
+} EASY_AV_Frame;
+
+/* 媒体信息 */
+typedef struct __EASY_MEDIA_INFO_T
+{
+	Easy_U32 u32VideoCodec;				/* 视频编码类型 */
+	Easy_U32 u32VideoFps;				/* 视频帧率 */
+
+	Easy_U32 u32AudioCodec;				/* 音频编码类型 */
+	Easy_U32 u32AudioSamplerate;		/* 音频采样率 */
+	Easy_U32 u32AudioChannel;			/* 音频通道数 */
+	Easy_U32 u32AudioBitsPerSample;		/* 音频采样精度 */
+
+	Easy_U32 u32VpsLength;
+	Easy_U32 u32SpsLength;
+	Easy_U32 u32PpsLength;
+	Easy_U32 u32SeiLength;
+	Easy_U8	 u8Vps[256];
+	Easy_U8	 u8Sps[256];
+	Easy_U8	 u8Pps[128];
+	Easy_U8	 u8Sei[128];
+}EASY_MEDIA_INFO_T;
+
+/* 帧信息 */
+typedef struct 
+{
+	unsigned int	codec;				/* 音视频格式 */
+
+	unsigned int	type;				/* 视频帧类型 */
+	unsigned char	fps;				/* 视频帧率 */
+	unsigned short	width;				/* 视频宽 */
+	unsigned short  height;				/* 视频高 */
+
+	unsigned int	reserved1;			/* 保留参数1 */
+	unsigned int	reserved2;			/* 保留参数2 */
+	unsigned int	reserved3;			/* 保留参数3 */
+
+	unsigned int	sample_rate;		/* 音频采样率 */
+	unsigned int	channels;			/* 音频声道数 */
+	unsigned int	bits_per_sample;	/* 音频采样精度 */
+
+	unsigned int	length;				/* 音视频帧大小 */
+	unsigned int    timestamp_usec;		/* 时间戳,微妙 */
+	unsigned int	timestamp_sec;		/* 时间戳 秒 */
+	unsigned int	pts;
+	
+	float			bitrate;			/* 比特率 */
+	float			losspacket;			/* 丢包率 */
+}EASY_FRAME_INFO;
+
+#endif

+ 172 - 0
Linux/GB28181DeviceAPI.h

@@ -0,0 +1,172 @@
+#ifndef __GB28181_DEVICE_API_H__
+#define __GB28181_DEVICE_API_H__
+
+#ifdef ANDROID
+#include <android/log.h>
+#define  LOG_TAG  "GB28181Device"
+#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
+#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
+#define LOGD(...)  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
+#endif
+
+#ifdef _WIN32
+#include <winsock2.h>
+#define GB28181DEVICE_API  __declspec(dllexport)
+#define GB28181DEVICE_APICALL  __stdcall
+#define WIN32_LEAN_AND_MEAN
+#else
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#define GB28181DEVICE_API __attribute__ ((visibility("default")))
+#define GB28181DEVICE_APICALL 
+#define CALLBACK
+#endif
+
+typedef enum __GB28181_DEVICE_EVENT_TYPE_ENUM_T
+{
+	GB28181_DEVICE_EVENT_CONNECTING = 1,		//连接中
+	GB28181_DEVICE_EVENT_REGISTER_ING,			//注册中
+	GB28181_DEVICE_EVENT_REGISTER_TIMEOUT,		//注册超时
+	GB28181_DEVICE_EVENT_REGISTER_OK,			//注册成功
+	GB28181_DEVICE_EVENT_REGISTER_AUTH_FAIL,	//用户验证失败
+	GB28181_DEVICE_EVENT_START_AUDIO_VIDEO,		//请求推送音视频
+	GB28181_DEVICE_EVENT_STOP_AUDIO_VIDEO,		//请求停止推送音视频
+	GB28181_DEVICE_EVENT_TALK_AUDIO_DATA,		//对端对讲数据
+	GB28181_DEVICE_EVENT_DISCONNECT,			//已断线
+
+	GB28181_DEVICE_EVENT_SUBSCRIBE_ALARM,		// 报警订阅
+	GB28181_DEVICE_EVENT_SUBSCRIBE_CATALOG,		// 目录订阅
+	GB28181_DEVICE_EVENT_SUBSCRIBE_MOBILEPOSITION,		// 位置订阅
+
+
+	GB28181_DEVICE_EVENT_PTZ_MOVE_LEFT,			// 云台-左
+	GB28181_DEVICE_EVENT_PTZ_MOVE_UP,			// 云台-上
+	GB28181_DEVICE_EVENT_PTZ_MOVE_RIGHT,		// 云台-右
+	GB28181_DEVICE_EVENT_PTZ_MOVE_DOWN,			// 云台-下
+	GB28181_DEVICE_EVENT_PTZ_MOVE_STOP,			// 云台-停
+	GB28181_DEVICE_EVENT_PTZ_ZOOM_IN,			// 云台-拉近
+	GB28181_DEVICE_EVENT_PTZ_ZOOM_OUT,			// 云台-拉远
+
+
+}GB28181_DEVICE_EVENT_TYPE_ENUM_T;
+
+#define MAX_CH_NUMS     8
+
+
+typedef struct __GB28181_CHANNEL_INFO_T
+{
+	char	id[32];
+	char	name[64];
+	char	manufacturer[32];
+	char	model[32];
+	char	parentId[32];
+	char	owner[32];
+	char	civilCode[32];
+	char	address[64];
+	double	longitude;
+	double  latitude;
+
+}GB28181_CHANNEL_INFO_T;
+
+typedef struct __GB28181_DEVICE_INFO_T
+{
+	int		version;			// 0(2016) or 1(2022)
+	char	server_ip[128];     // server ip
+	int		server_port;        // server port
+	char    server_id[32];      // server id
+	char	server_domain[64];  // server domain
+	char	device_id[32];      // device id
+	char	device_name[64];	// device name  2024.12.04
+	int		localSipPort;		//Local sip port
+	int     channel_nums;       // channel numbers
+	GB28181_CHANNEL_INFO_T channel[MAX_CH_NUMS];
+	char	password[32];	    // password
+	int		protocol;			// 0 - udp; 1 - tcp
+	int		media_protocol;		// 0 - udp; 1 - tcp
+	int		reg_expires;        // sip reg user expires, unit is second
+	int		heartbeat_interval; // gb28181 heartbeat interval, unit is second
+	int		heartbeat_count;    // gb28181 heartbeat count
+	int     log_enable;         // log enable flag
+	int     log_level;          // log level(0:TRACE,1:DEBUG,2:INFO,3:WARNING,4:ERROR,5:FATAL)
+}GB28181_DEVICE_INFO_T;
+
+typedef int (CALLBACK* GB28181DeviceCALLBACK)(void *userPtr, int channelId, int eventType, char *eventParams, int paramLength);
+
+
+//创建GB28181设备端资源
+/*
+pDeviceInfo:		设备端信息, 为NULL则从当前目录中读取config.xml
+callbackPtr:		回调函数
+userPtr:			用户自定义指针,用于在回调函数中回调给调用者
+*/
+int GB28181DEVICE_API	libGB28181Device_Create(GB28181_DEVICE_INFO_T *pDeviceInfo, GB28181DeviceCALLBACK callbackPtr, void *userPtr);
+
+int GB28181DEVICE_API	libGB28181Device_Create2(char* serverIP, int serverPort, char* serverId, char* serverDomain,
+													char* deviceId, char* deviceName, int localSipPort, int channelNum,
+													GB28181_CHANNEL_INFO_T*pChannel,
+													char* password, int protocol, int mediaProtocol,
+													int regExpires, int heartbeatInterval, int heartbeatCount,
+													GB28181DeviceCALLBACK callbackPtr, void* userPtr);
+
+//指定视频格式
+/*
+codec:
+		#define EASY_SDK_VIDEO_CODEC_H264	0x1C		//H264
+		#define EASY_SDK_VIDEO_CODEC_H265	0xAE		//H265
+width:	可选
+height:	可选
+framerate: 可选
+*/
+int GB28181DEVICE_API	libGB28181Device_SetVideoFormat(int channelId, unsigned int codec, int width, int height, int framerate);
+
+//指定音频格式
+/*
+audioDstCodec:
+		#define EASY_SDK_AUDIO_CODEC_AAC	0x15002		// AAC
+		#define EASY_SDK_AUDIO_CODEC_G711U	0x10006		// G711 ulaw
+		#define EASY_SDK_AUDIO_CODEC_G711A	0x10007		// G711 alaw
+samplerate:		采样率
+channels:		声道数
+bitPerSample:	采样精度
+*/
+int GB28181DEVICE_API	libGB28181Device_SetAudioFormat(int channelId, unsigned int audioDstCodec, int samplerate, int channels, int bitPerSamples);
+
+//设置通道实时经纬度信息
+int GB28181DEVICE_API	libGB28181Device_SetLotLat(int channelId, double longitude, double latitude);
+
+//推送视频数据
+/*
+framedata:	视频帧数据
+framesize:	视频帧大小
+keyframe:	关键帧填1, 否则填0
+*/
+int GB28181DEVICE_API	libGB28181Device_AddVideoData(int channelId, char* framedata, int framesize, int keyframe);
+
+//推送音频数据
+/*
+audioSrcCodec:	当前音频源格式
+		#define EASY_SDK_AUDIO_CODEC_G711U	0x10006		// G711 ulaw
+		#define EASY_SDK_AUDIO_CODEC_G711A	0x10007		// G711 alaw
+		#define EASY_SDK_AUDIO_CODEC_PCM	0x00007		// PCM
+
+		如果audioSrcCodec和libGB28181Device_SetAudioFormat中指定的audioDstCodec不一致时, 则会自动进行转换, 
+		但仅限于从PCM转为G711,即此处的audioSrcCodec为PCM, 而audioDstCodec为G711
+framedata:	音频帧数据
+framesize:  音频帧大小
+nbsamples:	同音频帧大小
+*/
+int GB28181DEVICE_API	libGB28181Device_AddAudioData(int channelId, unsigned int audioSrcCodec, char* framedata, int framesize, int nbsamples);
+
+
+//释放资源
+int GB28181DEVICE_API	libGB28181Device_Release();
+
+
+#ifdef ANDROID
+#include <jni.h>
+extern JavaVM *g_vm;
+#endif
+
+
+#endif

+ 1 - 1
Linux/README.md

@@ -1 +1 @@
-README
+EasyGBD Linux_x64°æ±¾¿â

BIN
Linux/libeasygbd.a