libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtpaudiosinknode.h
Go to the documentation of this file.
1
8#pragma once
9
12#include <promeki/core/map.h>
13#include <promeki/core/buffer.h>
16
17#ifdef PROMEKI_HAVE_NETWORK
21#endif
22
24
50 PROMEKI_OBJECT(RtpAudioSinkNode, MediaNode)
51 public:
57
60
61#ifdef PROMEKI_HAVE_NETWORK
66 void setDestination(const SocketAddress &addr) { _destination = addr; return; }
67
69 const SocketAddress &destination() const { return _destination; }
70
79 void setRtpPayload(RtpPayload *handler) { _payload = handler; return; }
80
82 RtpPayload *rtpPayload() const { return _payload; }
83#endif
84
89 void setPayloadType(uint8_t pt) { _payloadType = pt; return; }
90
92 uint8_t payloadType() const { return _payloadType; }
93
98 void setClockRate(uint32_t hz) { _clockRate = hz; return; }
99
101 uint32_t clockRate() const { return _clockRate; }
102
107 void setPacketTime(double ptime) { _packetTime = ptime; return; }
108
110 double packetTime() const { return _packetTime; }
111
121 void setOutputFormat(AudioDesc::DataType fmt) { _outputFormat = fmt; return; }
122
124 AudioDesc::DataType outputFormat() const { return _outputFormat; }
125
130 void setDscp(uint8_t dscp) { _dscp = dscp; return; }
131
133 uint8_t dscp() const { return _dscp; }
134
135 // ---- Lifecycle overrides ----
136
146 Error configure() override;
147
152 Error start() override;
153
157 void stop() override;
158
167 void process() override;
168
172 void starvation() override;
173
179
180 private:
181 void sendAccumulatedPackets();
182 void flushRemaining();
183
184 uint8_t _payloadType = 97;
185 uint32_t _clockRate = 48000;
186 double _packetTime = 1.0;
187 uint8_t _dscp = 46;
189 uint32_t _rtpTimestamp = 0;
190 size_t _samplesPerPacket = 0;
191 size_t _bytesPerSampleFrame = 0;
192 size_t _packetBytes = 0;
193 uint64_t _packetsSent = 0;
194 uint64_t _samplesSent = 0;
195 uint64_t _underrunCount = 0;
196
197 Buffer::Ptr _accumBuffer;
198 size_t _accumOffset = 0;
199
200#ifdef PROMEKI_HAVE_NETWORK
202 RtpPayload *_payload = nullptr;
203 RtpSession *_session = nullptr;
204#endif
205};
206
DataType
Enumeration of supported audio sample data types.
Definition audiodesc.h:190
@ Invalid
Invalid / unset format.
Definition audiodesc.h:191
Lightweight error code wrapper for the promeki library.
Definition error.h:39
Dynamic array container wrapping std::vector.
Definition list.h:40
Base class for all pipeline processing nodes.
Definition medianode.h:81
Base object for promeki.
Definition objectbase.h:129
ObjectBase * parent() const
Returns the parent object, if one. nullptr if none.
Definition objectbase.h:258
Terminal sink node that sends audio samples over RTP.
Definition rtpaudiosinknode.h:49
void process() override
Accumulates audio samples and sends complete RTP packets.
Error start() override
Starts the RTP session and begins accepting audio.
~RtpAudioSinkNode() override
Destructor.
uint8_t payloadType() const
Returns the RTP payload type.
Definition rtpaudiosinknode.h:92
double packetTime() const
Returns the packet time in milliseconds.
Definition rtpaudiosinknode.h:110
AudioDesc::DataType outputFormat() const
Returns the output sample format.
Definition rtpaudiosinknode.h:124
void setClockRate(uint32_t hz)
Sets the RTP timestamp clock rate.
Definition rtpaudiosinknode.h:98
Map< String, Variant > extendedStats() const override
Returns audio sink statistics.
void setOutputFormat(AudioDesc::DataType fmt)
Sets the output sample format for RTP transmission.
Definition rtpaudiosinknode.h:121
void starvation() override
Records an audio underrun event.
uint32_t clockRate() const
Returns the RTP clock rate.
Definition rtpaudiosinknode.h:101
void setDscp(uint8_t dscp)
Sets the DSCP value for QoS marking.
Definition rtpaudiosinknode.h:130
void setPacketTime(double ptime)
Sets the packet time in milliseconds.
Definition rtpaudiosinknode.h:107
Error configure() override
Validates configuration and creates the RTP session.
void setPayloadType(uint8_t pt)
Sets the RTP payload type number.
Definition rtpaudiosinknode.h:89
uint8_t dscp() const
Returns the DSCP value.
Definition rtpaudiosinknode.h:133
RtpAudioSinkNode(ObjectBase *parent=nullptr)
Constructs an RtpAudioSinkNode.
void stop() override
Flushes remaining audio and stops the RTP session.
Abstract base class for RTP payload type handlers.
Definition rtppayload.h:32
RTP session for sending and receiving packets (RFC 3550).
Definition rtpsession.h:47
Network address with port number.
Definition socketaddress.h:50
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19