libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
srtgroup.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_SRT
13#include <promeki/iodevice.h>
14#include <promeki/error.h>
16#include <promeki/string.h>
17#include <promeki/list.h>
18#include <promeki/uniqueptr.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
79class SrtGroup : public IODevice {
80 PROMEKI_OBJECT(SrtGroup, IODevice)
81 public:
83 using UPtr = UniquePtr<SrtGroup>;
84
86 static constexpr int InvalidHandle = -1;
87
89 enum Type {
90 Broadcast,
91 Backup
92 };
93
95 struct Member {
97 SocketAddress sourceAddress;
99 SocketAddress peerAddress;
100 };
101
103 using MemberList = ::promeki::List<Member>;
104
106 struct MemberStatus {
108 int handle = InvalidHandle;
110 SocketAddress peerAddress;
112 int state = 0;
114 int membership = 0;
116 int weight = 0;
117 };
118
120 using MemberStatusList = ::promeki::List<MemberStatus>;
121
127 explicit SrtGroup(Type type = Broadcast, ObjectBase *parent = nullptr);
128
157 SrtGroup(int adoptHandle, Type type, ObjectBase *parent = nullptr);
158
160 ~SrtGroup() override;
161
163 Type type() const { return _type; }
164
174 Error open(OpenMode mode) override;
175
177 Error close() override;
178
180 bool isOpen() const override;
181
195 Error connect(const MemberList &members);
196
198 int64_t read(void *data, int64_t maxSize) override;
199
201 int64_t write(const void *data, int64_t maxSize) override;
202
204 bool isSequential() const override { return true; }
205
207 int handle() const { return _sock; }
208
210 String lastSrtError() const { return _lastError; }
211
219 MemberStatusList memberStatus() const;
220
221 // ---- Pre-connect group options (applied at @ref connect) ----
222
224 Error setLatency(int ms);
225
227 Error setPassphrase(const String &passphrase);
228
230 Error setEncryptionKeyLength(int bytes);
231
233 Error setStreamId(const String &id);
234
236 Error setPayloadSize(int bytes);
237
239 Error setMaxBandwidth(int64_t bytesPerSec);
240
242 Error setReceiveTimeout(int timeoutMs);
243
245 Error setSendTimeout(int timeoutMs);
246
248 Error setConnectTimeout(int timeoutMs);
249
250 protected:
254 void captureLastError();
255
264 Error applyPreConnectOptions();
265
266 private:
267 int _sock = InvalidHandle;
268 Type _type = Broadcast;
269 String _passphrase;
270 String _streamId;
271 String _lastError;
272 int _latencyMs = 120;
273 int _payloadSize = 0;
274 int _pbKeyLen = 0;
275 int _connectTimeoutMs = 0;
276 int _recvTimeoutMs = 0;
277 int _sendTimeoutMs = 0;
278 int64_t _maxBw = 0;
279};
280
281PROMEKI_NAMESPACE_END
282
283#endif // PROMEKI_ENABLE_SRT