27#if defined (__WIN32__) || defined(__WIN64__) || defined(_WINDOWS)
31#define ASDK_LoadLib(a) (asdk::hsdk)LoadLibraryA(a)
34#define ASDK_GetProc(a1, a2) GetProcAddress((HINSTANCE__*)a1, a2)
37#define ASDK_FreeLib(a) FreeLibrary((HINSTANCE__*)a)
39#define ASDK_CALL __cdecl
40#elif defined(__GNUC__)
46#define ASDK_LoadLib(a) (asdk::hsdk)dlopen(a, RTLD_NOW)
49#define ASDK_GetProc(a1, a2) dlsym(a1, a2)
52#define ASDK_FreeLib(a) dlclose(a)
56#error Compiler unsupported
65#ifndef ASDK_SAFE_ALIAS
66 #define ASDK_SAFE_ALIAS
73 static const uint8_t VERSION_MAJOR = 2;
74 static const uint8_t VERSION_MINOR = 0;
75 static const uint8_t VERSION_PATCH = 1;
254#ifdef ASDK_SAFE_ALIAS
405 using TimePoint = std::chrono::high_resolution_clock::time_point;
406 using TimeMS = std::chrono::milliseconds;
409 return std::chrono::high_resolution_clock::now();
412 return std::chrono::duration_cast<TimeMS>(
TimeNow() - timeStart).count();
417 return std::chrono::steady_clock::now();
421 return std::chrono::duration_cast<TimeMS>(
TimeNowSteady() - time).count();
438#ifdef ASDK_SAFE_ALIAS
448 const void* optionalData,
const uint32_t optionalDataSize,
void* opaque);
457 const unsigned char* audioEncoded,
458 const size_t audioEncodedSize,
void* opaque);
465 const uint8_t *data,
const uint32_t size,
468#ifdef ASDK_SAFE_ALIAS
489 uint8_t *versionMinor,
490 uint8_t *versionPath);
507 ASDK_FreeLib(libraryHandle);
528 Status
Connect(
const char* ip,
const uint16_t port,
529 const uint32_t timeout,
const bool highLatency,
530 const char *username,
const char *password,
533 const char *displayName =
nullptr) {
535 return _connect_(
this, ip, port, timeout, highLatency, username,
536 password, userCapability, deviceCapability,
556 const uint32_t timeout,
const bool highLatency,
557 const char *username,
const char* password,
560 const char *certificate,
561 const char *displayName =
nullptr) {
562 if (_connect_secured_)
563 return _connect_secured_(
this, ip, port, timeout, highLatency, username,
564 password, userCapability, deviceCapability,
565 certificate, displayName);
583 const char* userName,
const char *password,
586 const int timeout = 3000) {
587 if (_request_certificate_)
588 return _request_certificate_(
this, address, port, userName, password,
590 certificateOut, timeout);
601 if (_cached_certificate_)
602 return _cached_certificate_(
this, certificateOut);
614 return _disconnect_(
this);
626 return _send_request_(
this, request);
639 const char *option =
nullptr) {
640 if (_send_request_string_)
641 return _send_request_string_(
this, request, str, option);
651 if (_cb_server_state_)
652 _cb_server_state_(
this, func, opaque);
661 if (_cb_room_announce_)
662 _cb_room_announce_(
this, func, opaque);
671 if (_cb_room_response_)
672 _cb_room_response_(
this, func, opaque);
681 if (_cb_room_client_added_)
682 _cb_room_client_added_(
this, func, opaque);
691 if (_cb_room_client_removed_)
692 _cb_room_client_removed_(
this, func, opaque);
701 if (_cb_authenticate_response_)
702 _cb_authenticate_response_(
this, func, opaque);
712 _cb_frame_(
this, func, opaque);
721 if (_cb_encoded_stream_)
722 _cb_encoded_stream_(
this, func, opaque);
731 if (_cb_encoded_audio_frame_)
732 _cb_encoded_audio_frame_(
this, func, opaque);
741 if (_cb_video_options_)
742 _cb_video_options_(
this, func, opaque);
752 _cb_video_mode_(
this, func, opaque);
761 if (_cb_position_values_)
762 _cb_position_values_(
this, func, opaque);
771 if (_cb_bandwidth_statistics_)
772 _cb_bandwidth_statistics_(
this, func, opaque);
781 if (_cb_room_preview_image_)
782 _cb_room_preview_image_(
this, func, opaque);
788 void (ASDK_CALL *_unload_)(
sdk_t* sdk);
789 Status (ASDK_CALL *_connect_)(
sdk_t* sdk,
const char* ip,
const uint16_t port,
790 const uint32_t timeout,
const bool highLatency,
791 const char* username,
const char* password,
794 const char *displayName);
795 Status (ASDK_CALL *_connect_secured_)(
sdk_t* sdk,
const char* ip,
const uint16_t port,
796 const uint32_t timeout,
const bool highLatency,
797 const char* username,
const char* password,
800 const char *certificate,
801 const char* displayName);
802 Status (ASDK_CALL *_request_certificate_)(
sdk_t* sdk,
const char* address,
const uint16_t port,
803 const char* userName,
const char* password,
810 const char* str,
const char *option);
818 void (ASDK_CALL *_cb_frame_)(
sdk_t* sdk,
FrameFunc func,
void* opaque);
829#ifdef ASDK_SAFE_ALIAS
834 typedef sdk_t* (ASDK_CALL *InitProc)(
void);
835 sdk_t* self =
nullptr;
837 const char *library =
"asmirasdk.dll";
839 const char *library =
"asmirasdk.so";
844 InitProc funcInit = (InitProc)ASDK_GetProc(
asdk,
"ASDKInitializeLibrary");
845 if (funcInit && funcVersion) {
846 uint8_t versionMajor = 0;
847 uint8_t versionMinor = 0;
848 uint8_t versionPatch = 0;
849 funcVersion(&versionMajor, &versionMinor, &versionPatch);
850 if (VERSION_MAJOR == versionMajor) {
851 if (VERSION_MINOR != versionMinor)
852 printf(
"Version mismatch warning\n");
857 self->version = funcVersion;
860 puts(
"Error occurred while initializing ASMIRA SDK");
866 puts(
"Version error");
872 puts(
"Failed to locate initialize proc");
880 char* err = dlerror();
882 printf(
"Failed to open: \"%s\" Reason: \"%s\"\n", library, err);
@ RequestRoomListUnsubscribe
@ RequestRoomListSubscribe
void(ASDK_CALL * PositionValuesFunc)(const position_values_t *positionValues, void *opaque)
int DeviceCapabilityValue
@ CertificateStateConnectError
@ CertificateStateReceived
@ CertificateStateConnected
void(ASDK_CALL * EncodedAudioFrameFunc)(const uint16_t srcID, const unsigned int timeStamp, const asdk::AudioFrameStateValue state, const unsigned char *audioEncoded, const size_t audioEncodedSize, void *opaque)
void(ASDK_CALL * RoomResponseFunc)(const Request request, const RoomResponse response, const void *optionalData, const uint32_t optionalDataSize, void *opaque)
std::vector< std::pair< TimePoint, unsigned int > > m_streamStats
TimePointSteady TimeNowSteady()
std::chrono::steady_clock::time_point TimePointSteady
void(ASDK_CALL * RoomPreviewImageFunc)(const uint32_t roomID, const uint64_t utc, const ImageFormat imageFormat, const uint8_t *data, const uint32_t size, void *opaque)
void(ASDK_CALL * FrameFunc)(const frame_t *frame, void *opaque)
struct asdk::position_klv_values_t position_klv_values_t
uint8_t AudioFrameStateValue
std::chrono::high_resolution_clock::time_point TimePoint
@ UserCapabilityController
void(ASDK_CALL * ServerStateFunc)(const ServerState serverState, void *opaque)
long long TimeSpentSteady(const TimePointSteady &time)
struct asdk::bandwidth_statistics_t bandwidth_statistics_t
void(ASDK_CALL * VideoOptionsFunc)(const video_options_t *videoOptions, void *opaque)
@ AuthenticationResponseKickedOther
@ AuthenticationResponseSuccess
@ AuthenticationResponseVersionRecUpgrade
@ AuthenticationResponseLoggedInOther
@ AuthenticationResponseUndef
@ AuthenticationResponseWrongLoginType
@ AuthenticationResponseFormatError
@ AuthenticationResponseVersionError
@ AuthenticationResponseVersionMayUpgrade
@ AuthenticationResponseTryAgainLater
@ AuthenticationResponseRequestedCapError
@ AuthenticationResponseError
void(ASDK_CALL * AuthenticateResponseFunc)(const AuthenticationResponse authenticateResponse, void *opaque)
@ ServerStateDisconnected
@ ServerStateAuthenticateError
@ ServerStateConnectedAndAuthenticated
@ RoomResponseErrorAlreadyJoined
@ RoomResponseErrorUnhandled
long long TimeSpent(const TimePoint &timeStart)
struct asdk::position_values_t position_values_t
void(ASDK_CALL * EncodedStreamFunc)(const StreamType type, const void *data, const uint32_t dataSize, void *opaque)
struct asdk::certificate_t certificate_t
void(ASDK_CALL * RoomClientRemovedFunc)(const uint32_t clientID, void *opaque)
@ DeviceCapabilityVideoH264
@ DeviceCapabilityAudioOpus
@ DeviceCapabilityVideoROI
@ DeviceCapabilityVideoH265
@ DeviceCapabilityPhotoModeWEBP
@ DeviceCapabilityDisplay
@ DeviceCapabilityHeadless
@ DeviceCapabilityPhotoModeAVIF
@ DeviceCapabilityPhotoROI
@ DeviceCapabilityVideoAV1
@ DeviceCapabilityAudioSpeex
@ DeviceCapabilityPhotoModeHEIF
@ DeviceCapabilityAudioMIC
void(ASDK_CALL * RoomClientAddedFunc)(const uint32_t clientID, const char *userName, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, void *opaque)
uint8_t UserCapabilityValue
@ PositionSourceUndefined
void(ASDK_CALL * VideoModeFunc)(const video_mode_t *videoMode, void *opaque)
struct asdk::position_nmea_values_t position_nmea_values_t
void(ASDK_CALL * RoomAnnounceFunc)(const char *roomName, const uint32_t roomID, const asdk::RoomStateValue state, const asdk::RoomFlagValue flags, void *opaque)
void(ASDK_CALL * BandwidthStatisticsFunc)(const bandwidth_statistics_simple_t *bandwidthStatistics, void *opaque)
std::chrono::milliseconds TimeMS
unsigned int packetsSentReceived
unsigned int packetsSentReceived
unsigned int rtcpPacketLostSize
unsigned int rtcpPacketLostCount
float sensorHorizontalFOV
float sensorElevationAngle
float sensorRelativeRollAngle
position_klv_values_t * klvValues
PositionSource positionSource
position_nmea_values_t * nmeaValues
Status CachedCertificate(certificate_t *certificateOut)
Get cached certificate from ASMIRA server.
void SetEncodedStreamCallback(EncodedStreamFunc func, void *opaque=nullptr)
Encoded Frame or stream callback.
void SetRoomClientRemovedCallback(RoomClientRemovedFunc func, void *opaque=nullptr)
Server room client removed callback.
void SetRoomPreviewImageCallback(RoomPreviewImageFunc func, void *opaque=nullptr)
Room Preview Image callback.
void(ASDK_CALL * VersionProc)(uint8_t *versionMajor, uint8_t *versionMinor, uint8_t *versionPath)
void SetAuthenticateResponseCallback(AuthenticateResponseFunc func, void *opaque=nullptr)
SetAuthenticateResponseCallback callback.
Status SendRequestStr(const Request request, const char *str, const char *option=nullptr)
Sends request string to ASMIRA server.
void SetVideoModeCallback(VideoModeFunc func, void *opaque=nullptr)
Video Mode callback.
void SetEncodedAudioFrameCallback(EncodedAudioFrameFunc func, void *opaque=nullptr)
Encoded Audio Frame callback.
void SetFrameCallback(FrameFunc func, void *opaque=nullptr)
Video/Photo Frame callback.
void SetServerStateCallback(ServerStateFunc func, void *opaque=nullptr)
Server state callback.
void SetRoomResponseCallback(RoomResponseFunc func, void *opaque=nullptr)
Server room response callback.
Status Unload()
Unloads SDK library.
Status SendRequest(const Request request)
Sends request to ASMIRA server.
Status RequestCertificate(const char *address, const uint16_t port, const char *userName, const char *password, CertificateState *certificateStateOut, certificate_t *certificateOut, const int timeout=3000)
Request certificate from ASMIRA server.
Status Disconnect()
Disconnects from ASMIRA server.
Status ConnectSecured(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *certificate, const char *displayName=nullptr)
Connect to ASMIRA server.
Status Connect(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *displayName=nullptr)
Connect to ASMIRA server.
void SetRoomClientAddedCallback(RoomClientAddedFunc func, void *opaque=nullptr)
Server room client added callback.
void SetRoomAnnounceCallback(RoomAnnounceFunc func, void *opaque=nullptr)
Server room announce callback.
void SetPositionValuesCallback(PositionValuesFunc func, void *opaque=nullptr)
Position Values callback.
void SetBandwidthStatisticsCallback(BandwidthStatisticsFunc func, void *opaque=nullptr)
Bandwidth Statistics callback.
void SetVideoOptionsCallback(VideoOptionsFunc func, void *opaque=nullptr)
Video Options callback.