#ifndef _X_H_ #define _X_H_ #if defined(_MSC_VER) #define DLLAPI __declspec(dllexport) #elif defined(__GNUC__) #define DLLAPI __attribute__((visibility("default"))) #else #define DLLAPI #endif #include #include enum DATA_TYPE { VIDEO = 0, AUDIO, DATA }; enum ConnectionStatus { Connecting = 0, Connected, Gathering, Disconnected, Failed, Closed, IncorrectPassword, NoSuchTransmissionId }; enum SignalStatus { SignalConnecting = 0, SignalConnected, SignalFailed, SignalClosed, SignalReconnecting, SignalServerClosed }; enum TraversalMode { P2P = 0, Relay, UnknownMode }; #ifdef __cplusplus extern "C" { #endif typedef struct { const char* data; size_t size; uint32_t width; uint32_t height; } XVideoFrame; typedef struct { uint64_t video_in; uint64_t video_out; uint64_t audio_in; uint64_t audio_out; uint64_t data_in; uint64_t data_out; uint64_t total_in; uint64_t total_out; } XNetTrafficStats; typedef struct Peer PeerPtr; typedef void (*OnReceiveBuffer)(const char*, size_t, const char*, const size_t, void*); typedef void (*OnReceiveVideoFrame)(const XVideoFrame*, const char*, const size_t, void*); typedef void (*OnSignalStatus)(SignalStatus, void*); typedef void (*OnConnectionStatus)(ConnectionStatus, const char*, const size_t, void*); typedef void (*NetStatusReport)(const char*, const size_t, TraversalMode, const XNetTrafficStats*, void*); typedef struct { bool use_cfg_file; const char* cfg_path; const char* signal_server_ip; int signal_server_port; const char* stun_server_ip; int stun_server_port; const char* turn_server_ip; int turn_server_port; const char* turn_server_username; const char* turn_server_password; bool hardware_acceleration; bool av1_encoding; bool enable_turn; OnReceiveBuffer on_receive_video_buffer; OnReceiveBuffer on_receive_audio_buffer; OnReceiveBuffer on_receive_data_buffer; OnReceiveVideoFrame on_receive_video_frame; OnSignalStatus on_signal_status; OnConnectionStatus on_connection_status; NetStatusReport net_status_report; void* user_data; } Params; DLLAPI PeerPtr* CreatePeer(const Params* params); DLLAPI void DestroyPeer(PeerPtr** peer_ptr); DLLAPI int Init(PeerPtr* peer_ptr, const char* user_id); DLLAPI int CreateConnection(PeerPtr* peer_ptr, const char* transmission_id, const char* password); DLLAPI int JoinConnection(PeerPtr* peer_ptr, const char* transmission_id, const char* password); DLLAPI int LeaveConnection(PeerPtr* peer_ptr, const char* transmission_id); DLLAPI int SendVideoFrame(PeerPtr* peer_ptr, const XVideoFrame* video_frame); DLLAPI int SendAudioFrame(PeerPtr* peer_ptr, const char* data, size_t size); DLLAPI int SendData(PeerPtr* peer_ptr, const char* data, size_t size); #ifdef __cplusplus } #endif #endif