GB28181DeviceAPI.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #ifndef __GB28181_DEVICE_API_H__
  2. #define __GB28181_DEVICE_API_H__
  3. #ifdef ANDROID
  4. #include <android/log.h>
  5. #define LOG_TAG "GB28181Device"
  6. #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
  7. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
  8. #define LOGD(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
  9. #endif
  10. #ifdef _WIN32
  11. #include <winsock2.h>
  12. #define GB28181DEVICE_API __declspec(dllexport)
  13. #define GB28181DEVICE_APICALL __stdcall
  14. #define WIN32_LEAN_AND_MEAN
  15. #else
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18. #include <string.h>
  19. #define GB28181DEVICE_API __attribute__ ((visibility("default")))
  20. #define GB28181DEVICE_APICALL
  21. #define CALLBACK
  22. #endif
  23. typedef enum __GB28181_DEVICE_EVENT_TYPE_ENUM_T
  24. {
  25. GB28181_DEVICE_EVENT_CONNECTING = 1, //连接中
  26. GB28181_DEVICE_EVENT_REGISTER_ING, //注册中
  27. GB28181_DEVICE_EVENT_REGISTER_OK, //注册成功
  28. GB28181_DEVICE_EVENT_REGISTER_AUTH_FAIL, //用户验证失败
  29. GB28181_DEVICE_EVENT_START_AUDIO_VIDEO, //请求推送音视频
  30. GB28181_DEVICE_EVENT_STOP_AUDIO_VIDEO, //请求停止推送音视频
  31. GB28181_DEVICE_EVENT_TALK_AUDIO_DATA, //对端对讲数据
  32. GB28181_DEVICE_EVENT_DISCONNECT //已断线
  33. }GB28181_DEVICE_EVENT_TYPE_ENUM_T;
  34. #define MAX_CH_NUMS 8
  35. typedef struct __GB28181_CHANNEL_INFO_T
  36. {
  37. char id[32];
  38. char name[64];
  39. char manufacturer[32];
  40. char model[32];
  41. char parentId[32];
  42. char owner[32];
  43. char civilCode[32];
  44. char address[64];
  45. double longitude;
  46. double latitude;
  47. }GB28181_CHANNEL_INFO_T;
  48. typedef struct __GB28181_DEVICE_INFO_T
  49. {
  50. int version; // 0(2016) or 1(2022)
  51. char server_ip[128]; // server ip
  52. int server_port; // server port
  53. char server_id[32]; // server id
  54. char server_domain[64]; // server domain
  55. char device_id[32]; // device id
  56. int localSipPort; //Local sip port
  57. int channel_nums; // channel numbers
  58. GB28181_CHANNEL_INFO_T channel[MAX_CH_NUMS];
  59. char password[32]; // password
  60. int protocol; // 0 - udp; 1 - tcp
  61. int media_protocol; // 0 - udp; 1 - tcp
  62. int reg_expires; // sip reg user expires, unit is second
  63. int heartbeat_interval; // gb28181 heartbeat interval, unit is second
  64. int heartbeat_count; // gb28181 heartbeat count
  65. int log_enable; // log enable flag
  66. int log_level; // log level(0:TRACE,1:DEBUG,2:INFO,3:WARNING,4:ERROR,5:FATAL)
  67. }GB28181_DEVICE_INFO_T;
  68. typedef int (CALLBACK* GB28181DeviceCALLBACK)(void *userPtr, int channelId, int eventType, char *eventParams, int paramLength);
  69. //创建GB28181设备端资源
  70. /*
  71. pDeviceInfo: 设备端信息, 为NULL则从当前目录中读取config.xml
  72. callbackPtr: 回调函数
  73. userPtr: 用户自定义指针,用于在回调函数中回调给调用者
  74. */
  75. int GB28181DEVICE_API libGB28181Device_Create(GB28181_DEVICE_INFO_T *pDeviceInfo, GB28181DeviceCALLBACK callbackPtr, void *userPtr);
  76. int GB28181DEVICE_API libGB28181Device_Create2(char* serverIP, int serverPort, char* serverId, char* serverDomain,
  77. char* deviceId, int localSipPort, int channelNum,
  78. GB28181_CHANNEL_INFO_T*pChannel,
  79. char* password, int protocol, int mediaProtocol,
  80. int regExpires, int heartbeatInterval, int heartbeatCount,
  81. GB28181DeviceCALLBACK callbackPtr, void* userPtr);
  82. //指定视频格式
  83. /*
  84. codec:
  85. #define EASY_SDK_VIDEO_CODEC_H264 0x1C //H264
  86. #define EASY_SDK_VIDEO_CODEC_H265 0xAE //H265
  87. width: 可选
  88. height: 可选
  89. framerate: 可选
  90. */
  91. int GB28181DEVICE_API libGB28181Device_SetVideoFormat(int channelId, unsigned int codec, int width, int height, int framerate);
  92. //指定音频格式
  93. /*
  94. audioDstCodec:
  95. #define EASY_SDK_AUDIO_CODEC_AAC 0x15002 // AAC
  96. #define EASY_SDK_AUDIO_CODEC_G711U 0x10006 // G711 ulaw
  97. #define EASY_SDK_AUDIO_CODEC_G711A 0x10007 // G711 alaw
  98. samplerate: 采样率
  99. channels: 声道数
  100. bitPerSample: 采样精度
  101. */
  102. int GB28181DEVICE_API libGB28181Device_SetAudioFormat(int channelId, unsigned int audioDstCodec, int samplerate, int channels, int bitPerSamples);
  103. //设置通道实时经纬度信息
  104. int GB28181DEVICE_API libGB28181Device_SetLotLat(int channelId, double longitude, double latitude);
  105. //推送视频数据
  106. /*
  107. framedata: 视频帧数据
  108. framesize: 视频帧大小
  109. keyframe: 关键帧填1, 否则填0
  110. */
  111. int GB28181DEVICE_API libGB28181Device_AddVideoData(int channelId, char* framedata, int framesize, int keyframe);
  112. //推送音频数据
  113. /*
  114. audioSrcCodec: 当前音频源格式
  115. #define EASY_SDK_AUDIO_CODEC_G711U 0x10006 // G711 ulaw
  116. #define EASY_SDK_AUDIO_CODEC_G711A 0x10007 // G711 alaw
  117. #define EASY_SDK_AUDIO_CODEC_PCM 0x00007 // PCM
  118. 如果audioSrcCodec和libGB28181Device_SetAudioFormat中指定的audioDstCodec不一致时, 则会自动进行转换,
  119. 但仅限于从PCM转为G711,即此处的audioSrcCodec为PCM, 而audioDstCodec为G711
  120. framedata: 音频帧数据
  121. framesize: 音频帧大小
  122. nbsamples: 同音频帧大小
  123. */
  124. int GB28181DEVICE_API libGB28181Device_AddAudioData(int channelId, unsigned int audioSrcCodec, char* framedata, int framesize, int nbsamples);
  125. //释放资源
  126. int GB28181DEVICE_API libGB28181Device_Release();
  127. #ifdef ANDROID
  128. #include <jni.h>
  129. extern JavaVM *g_vm;
  130. #endif
  131. #endif