SDK Version 1.2.0
AnsuR Technologies ASMIRA SDK
Loading...
Searching...
No Matches
example_complete.cpp

This is a minimal but complete example using ASMIRA SDK

#include <asmirasdk.h>
#include <string>
#include <thread>
#include <chrono>
#ifdef USE_STB_IMAGE_WRITE
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <stb_image_write.h>
static void WriteImage(const char* filename, const uint8_t* data,
const uint32_t width, const uint32_t height)
{
stbi_write_png(filename, width, height, 3, data, width * 3);
}
#endif
};
enum State {
};
struct context_s {
uint16_t clientRoomID = 0;
asdk::sdk_t* sdk = nullptr;
const int serverPort = 30100;
};
static bool Connect(context_s& context)
{
#ifdef EXAMPLE_TLS
if (context.sdk->RequestCertificate("127.0.0.1", context.serverPort + 1, "sender", "sender", &state, &cert) == asdk::StatusOK) {
puts("Connecting to server...");
if (context.sdk->ConnectSecured("127.0.0.1", context.serverPort, false, "sender", "sender",
puts("Conencted to server");
return true;
}
else
puts("Failed to connect to server");
}
else
puts("Failed to request certificate");
#else
if (context.sdk->Connect("127.0.0.1", context.serverPort, 5000, true, "test", "password",
puts("Conencted to server");
return true;
}
else
puts("Failed to connect to server");
#endif
std::this_thread::sleep_for(std::chrono::seconds(1));
return false;
}
static bool RequestRooms(context_s& context)
{
}
static bool JoinRoom(context_s& context, const char *roomName)
{
return context.sdk->SendRequestStr(asdk::RequestRoomJoin, roomName) == asdk::StatusOK;
}
int main()
{
context_s context;
context.sdk = asdk::Initialize();
if (context.sdk) {
void* opaque /* context* */) {
context_s* context = reinterpret_cast<context_s*>(opaque);
puts("Server authenticated your connection");
}
else {
printf("Server failed(%d) to authenticate your connection", response);
}
}, &context);
context.sdk->SetServerStateCallback([](const asdk::ServerState state, void* opaque /* context* */) {
reinterpret_cast<context_s*>(opaque)->serverState = state;
}, &context);
context.sdk->SetRoomAnnounceCallback([](const char* roomName, const uint32_t roomID,
const asdk::RoomStateValue state,
const asdk::RoomFlagValue flags,
void* opaque /* context* */) {
// Got first room, there may be many more
reinterpret_cast<context_s*>(opaque)->roomJoinedState = RoomJoinedStateReceivedList;
printf("Room(%s) with ID(%d) announced\n", roomName, roomID);
}, &context);
context.sdk->SetRoomResponseCallback([](const asdk::Request request, const asdk::RoomResponse response,
const void* optionalData, const uint32_t optionalDataSize,
void* opaque /* context* */) {
context_s* context = reinterpret_cast<context_s*>(opaque);
if (response == asdk::RoomResponseSuccess) {
if (optionalData && optionalDataSize == sizeof(uint16_t)) {
context->clientRoomID = *reinterpret_cast<const uint16_t*>(optionalData);
context->state = StateReady;
printf("Joined room and got asigned ID(%d)\n", context->clientRoomID);
}
else {
puts("Failed to join room");
}
}
else
printf("Failed(%d) to join room on command(%d)\n", response, request);
}, &context);
context.sdk->SetRoomClientAddedCallback([](const uint32_t clientID, const char* userName,
const asdk::UserCapabilityValue userCapability,
const asdk::DeviceCapabilityValue deviceCapability,
void* opaque /* context* */) {
printf("Client(%d) with name(%s) added to room\n", clientID, userName);
}, & context);
context.sdk->SetRoomClientRemovedCallback([](const uint32_t clientID, void* opaque /* context* */) {
printf("Client(%d) removed from room\n", clientID);
}, & context);
context.sdk->SetVideoModeCallback([](const asdk::video_mode_t* videoMode, void* opaque /* context* */) {
puts("Video mode changed");
}, &context);
context.sdk->SetVideoOptionsCallback([](const asdk::video_options_t* videoOptions, void* opaque /* context* */) {
puts("Video options changed");
}, &context);
context.sdk->SetFrameCallback([](const asdk::frame_t* frame, void* opaque /* context* */) {
#ifdef USE_STB_IMAGE_WRITE
WriteImage("frame.png", frame->data, frame->width, frame->height);
#endif // USE_STB_IMAGE_WRITE
}, &context);
context.sdk->SetEncodedStreamCallback([](const asdk::StreamType type, const void* data,
const uint32_t dataSize, void* opaque /* context* */) {
switch (type) {
break;
}
}, &context);
context.sdk->SetRoomPreviewImageCallback([](const uint32_t roomID, const uint64_t utc,
const asdk::ImageFormat imageFormat,
const uint8_t* data, const uint32_t size,
void* opaque /* context* */) {
printf("Room(%d) preview image received with format(%d) and size(%d)\n", roomID, imageFormat, size);
}, & context);
while (true) {
switch (context.state) {
context.state = StateConnect;
break;
if (Connect(context)) context.state = StateConnecting;
else context.state = StateDisconnect;
break;
puts("Server authenticated your connection");
}
puts("Server failed to authenticate your connection");
std::this_thread::sleep_for(std::chrono::seconds(5));
}
break;
if (RequestRooms(context)) context.state = StateRequestRoomsPending;
else context.state = StateDisconnect;
break;
if (JoinRoom(context, "test")) context.state = StateRequestJoinRoomPending;
else context.state = StateDisconnect;
}
break;
case StateReady:
break;
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
return 0;
}
int main()
RoomJoinedState
@ RoomJoinedStatePending
@ RoomJoinedStateSuccess
@ RoomJoinedStateError
@ RoomJoinedStateReceivedList
@ RoomJoinedStateUndef
@ StateRequestRooms
@ StateReady
@ StateDisconnect
@ StateConnecting
@ StateConnect
@ StateRequestRoomsPending
@ StateRequestJoinRoomPending
@ RequestRoomJoin
Definition asmirasdk.h:129
@ RequestRoomListSubscribe
Definition asmirasdk.h:127
int DeviceCapabilityValue
Definition asmirasdk.h:235
CertificateState
Definition asmirasdk.h:426
struct asdk::sdk_t sdk_t
uint32_t RoomStateValue
Definition asmirasdk.h:158
@ StatusOK
Definition asmirasdk.h:80
@ UserCapabilityViewer
Definition asmirasdk.h:192
uint32_t RoomFlagValue
Definition asmirasdk.h:151
AuthenticationResponse
Definition asmirasdk.h:101
@ AuthenticationResponseSuccess
Definition asmirasdk.h:103
ServerState
Definition asmirasdk.h:92
@ ServerStateAuthenticateError
Definition asmirasdk.h:97
@ ServerStateConnectedAndAuthenticated
Definition asmirasdk.h:96
@ ServerStateUndef
Definition asmirasdk.h:93
RoomResponse
Definition asmirasdk.h:133
@ RoomResponseSuccess
Definition asmirasdk.h:135
ImageFormat
Definition asmirasdk.h:177
@ DeviceCapabilityDisplay
Definition asmirasdk.h:213
@ DeviceCapabilityBasic
Definition asmirasdk.h:219
uint8_t UserCapabilityValue
Definition asmirasdk.h:197
StreamType
Definition asmirasdk.h:168
@ StreamTypeAV1Frame
Definition asmirasdk.h:172
@ StreamTypeWEBP
Definition asmirasdk.h:174
@ StreamType264Frame
Definition asmirasdk.h:170
@ StreamTypeUnknown
Definition asmirasdk.h:169
@ StreamType265Frame
Definition asmirasdk.h:171
@ StreamTypeMPEGTS
Definition asmirasdk.h:173
sdk_t * Initialize()
Definition asmirasdk.h:833
const char * data
Definition asmirasdk.h:435
int32_t height
Definition asmirasdk.h:274
uint8_t * data
Definition asmirasdk.h:278
int32_t width
Definition asmirasdk.h:273
void SetEncodedStreamCallback(EncodedStreamFunc func, void *opaque=nullptr)
Encoded Frame or stream callback.
Definition asmirasdk.h:720
void SetRoomClientRemovedCallback(RoomClientRemovedFunc func, void *opaque=nullptr)
Server room client removed callback.
Definition asmirasdk.h:690
void SetRoomPreviewImageCallback(RoomPreviewImageFunc func, void *opaque=nullptr)
Room Preview Image callback.
Definition asmirasdk.h:780
void SetAuthenticateResponseCallback(AuthenticateResponseFunc func, void *opaque=nullptr)
SetAuthenticateResponseCallback callback.
Definition asmirasdk.h:700
Status SendRequestStr(const Request request, const char *str, const char *option=nullptr)
Sends request string to ASMIRA server.
Definition asmirasdk.h:638
void SetVideoModeCallback(VideoModeFunc func, void *opaque=nullptr)
Video Mode callback.
Definition asmirasdk.h:750
void SetFrameCallback(FrameFunc func, void *opaque=nullptr)
Video/Photo Frame callback.
Definition asmirasdk.h:710
void SetServerStateCallback(ServerStateFunc func, void *opaque=nullptr)
Server state callback.
Definition asmirasdk.h:650
void SetRoomResponseCallback(RoomResponseFunc func, void *opaque=nullptr)
Server room response callback.
Definition asmirasdk.h:670
Status SendRequest(const Request request)
Sends request to ASMIRA server.
Definition asmirasdk.h:624
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.
Definition asmirasdk.h:582
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.
Definition asmirasdk.h:555
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.
Definition asmirasdk.h:528
void SetRoomClientAddedCallback(RoomClientAddedFunc func, void *opaque=nullptr)
Server room client added callback.
Definition asmirasdk.h:680
void SetRoomAnnounceCallback(RoomAnnounceFunc func, void *opaque=nullptr)
Server room announce callback.
Definition asmirasdk.h:660
void SetVideoOptionsCallback(VideoOptionsFunc func, void *opaque=nullptr)
Video Options callback.
Definition asmirasdk.h:740
asdk::ServerState serverState
const int serverPort
uint16_t clientRoomID
asdk::sdk_t * sdk
RoomJoinedState roomJoinedState