11#include <promeki/config.h>
20PROMEKI_NAMESPACE_BEGIN
79class SrtGroup :
public IODevice {
80 PROMEKI_OBJECT(SrtGroup, IODevice)
83 using UPtr = UniquePtr<SrtGroup>;
86 static constexpr int InvalidHandle = -1;
97 SocketAddress sourceAddress;
99 SocketAddress peerAddress;
103 using MemberList = ::promeki::List<Member>;
106 struct MemberStatus {
108 int handle = InvalidHandle;
110 SocketAddress peerAddress;
120 using MemberStatusList = ::promeki::List<MemberStatus>;
127 explicit SrtGroup(Type type = Broadcast, ObjectBase *parent =
nullptr);
157 SrtGroup(
int adoptHandle, Type type, ObjectBase *parent =
nullptr);
160 ~SrtGroup()
override;
163 Type type()
const {
return _type; }
174 Error open(OpenMode mode)
override;
177 Error close()
override;
180 bool isOpen()
const override;
195 Error connect(
const MemberList &members);
198 int64_t read(
void *data, int64_t maxSize)
override;
201 int64_t write(
const void *data, int64_t maxSize)
override;
204 bool isSequential()
const override {
return true; }
207 int handle()
const {
return _sock; }
210 String lastSrtError()
const {
return _lastError; }
219 MemberStatusList memberStatus()
const;
224 Error setLatency(
int ms);
227 Error setPassphrase(
const String &passphrase);
230 Error setEncryptionKeyLength(
int bytes);
233 Error setStreamId(
const String &
id);
236 Error setPayloadSize(
int bytes);
239 Error setMaxBandwidth(int64_t bytesPerSec);
242 Error setReceiveTimeout(
int timeoutMs);
245 Error setSendTimeout(
int timeoutMs);
248 Error setConnectTimeout(
int timeoutMs);
254 void captureLastError();
264 Error applyPreConnectOptions();
267 int _sock = InvalidHandle;
268 Type _type = Broadcast;
272 int _latencyMs = 120;
273 int _payloadSize = 0;
275 int _connectTimeoutMs = 0;
276 int _recvTimeoutMs = 0;
277 int _sendTimeoutMs = 0;