libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtpaudiodepacketizerthread.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <cstdint>
14#include <functional>
15#include <promeki/function.h>
16#include <promeki/atomic.h>
17#include <promeki/audiodesc.h>
18#include <promeki/clockdomain.h>
19#include <promeki/namespace.h>
20#include <promeki/queue.h>
22#include <promeki/rtppacket.h>
25#include <promeki/string.h>
26#include <promeki/timestamp.h>
27
28PROMEKI_NAMESPACE_BEGIN
29
55struct RtpAudioDepacketizerContext {
61 Queue<RxAudioChunk> *payloadQueue = nullptr;
62
70 const Atomic<uint32_t> *resetEpoch = nullptr;
71
81 const bool *active = nullptr;
82
88 const AudioDesc *readerAudioDesc = nullptr;
89
96 const bool *hasSr = nullptr;
97
102 const RtpStreamClock *streamClock = nullptr;
103
107 Atomic<int64_t> *packetsReceived = nullptr;
108 Atomic<int64_t> *bytesReceived = nullptr;
109 Atomic<int64_t> *lastPacketArrivalNs = nullptr;
110 Atomic<int64_t> *framesReassembled = nullptr;
111
117 Function<void()> noteFrameReceived;
118
124 Function<void()> refreshStreamClock;
125
134 Function<TimeStamp(const NtpTime &)> ntpToSteady;
135};
136
161class RtpAudioDepacketizerThread : public RtpDepacketizerThread {
162 public:
173 RtpAudioDepacketizerThread(RtpAudioDepacketizerContext ctx,
174 const String &name,
175 uint32_t clockRateHz);
176
177 ~RtpAudioDepacketizerThread() override;
178
179 RtpAudioDepacketizerThread(const RtpAudioDepacketizerThread &) = delete;
180 RtpAudioDepacketizerThread &operator=(const RtpAudioDepacketizerThread &) = delete;
181
184 void handlePacketForTest(const RtpPacket &pkt) { handlePacket(pkt); }
185
186 protected:
187 void handlePacket(const RtpPacket &pkt) override;
188
189 private:
190 RtpAudioDepacketizerContext _ctx;
191 uint32_t _lastEpoch = 0;
192};
193
194PROMEKI_NAMESPACE_END
195
196#endif // PROMEKI_ENABLE_NETWORK