libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtpvideosinknode.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <chrono>
11#include <promeki/core/string.h>
14#include <promeki/core/map.h>
17
18#ifdef PROMEKI_HAVE_NETWORK
22#endif
23
25
51 PROMEKI_OBJECT(RtpVideoSinkNode, MediaNode)
52 public:
58
61
62#ifdef PROMEKI_HAVE_NETWORK
67 void setDestination(const SocketAddress &addr) { _destination = addr; return; }
68
70 const SocketAddress &destination() const { return _destination; }
71
76 void setMulticast(const SocketAddress &group) { _multicast = group; return; }
77
79 const SocketAddress &multicast() const { return _multicast; }
80#endif
81
86 void setFrameRate(const FrameRate &fps) { _frameRate = fps; return; }
87
89 const FrameRate &frameRate() const { return _frameRate; }
90
91#ifdef PROMEKI_HAVE_NETWORK
100 void setRtpPayload(RtpPayload *handler) { _payload = handler; return; }
101
103 RtpPayload *rtpPayload() const { return _payload; }
104#endif
105
110 void setPayloadType(uint8_t pt) { _payloadType = pt; return; }
111
113 uint8_t payloadType() const { return _payloadType; }
114
119 void setClockRate(uint32_t hz) { _clockRate = hz; return; }
120
122 uint32_t clockRate() const { return _clockRate; }
123
133 void setDumpPath(const String &path) { _dumpPath = path; return; }
134
136 const String &dumpPath() const { return _dumpPath; }
137
142 void setDscp(uint8_t dscp) { _dscp = dscp; return; }
143
145 uint8_t dscp() const { return _dscp; }
146
147 // ---- Lifecycle overrides ----
148
158 Error configure() override;
159
164 Error start() override;
165
169 void stop() override;
170
178 void process() override;
179
183 void starvation() override;
184
190
191 private:
192 FrameRate _frameRate;
193 uint8_t _payloadType = 96;
194 uint32_t _clockRate = 90000;
195 uint8_t _dscp = 34;
196 uint32_t _rtpTimestamp = 0;
197 uint32_t _timestampIncrement = 0;
198 uint64_t _packetsSent = 0;
199 uint64_t _bytesSent = 0;
200 uint64_t _underrunCount = 0;
201
202 std::chrono::nanoseconds _frameInterval{0};
203 std::chrono::steady_clock::time_point _nextFrameTime;
204 bool _firstFrame = true;
205 String _dumpPath;
206
207#ifdef PROMEKI_HAVE_NETWORK
210 RtpPayload *_payload = nullptr;
211 RtpSession *_session = nullptr;
212#endif
213};
214
Lightweight error code wrapper for the promeki library.
Definition error.h:39
Represents a video frame rate as a rational number.
Definition framerate.h:36
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
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
Terminal sink node that sends video frames over RTP.
Definition rtpvideosinknode.h:50
Error configure() override
Validates configuration and creates the RTP session.
void setFrameRate(const FrameRate &fps)
Sets the video frame rate for pacing.
Definition rtpvideosinknode.h:86
void setClockRate(uint32_t hz)
Sets the RTP timestamp clock rate.
Definition rtpvideosinknode.h:119
Map< String, Variant > extendedStats() const override
Returns video sink statistics.
Error start() override
Starts the RTP session and optionally joins a multicast group.
void starvation() override
Records a video underrun event.
void setPayloadType(uint8_t pt)
Sets the RTP payload type number.
Definition rtpvideosinknode.h:110
void stop() override
Stops the RTP session.
void setDscp(uint8_t dscp)
Sets the DSCP value for QoS marking.
Definition rtpvideosinknode.h:142
uint8_t dscp() const
Returns the DSCP value.
Definition rtpvideosinknode.h:145
RtpVideoSinkNode(ObjectBase *parent=nullptr)
Constructs an RtpVideoSinkNode.
uint8_t payloadType() const
Returns the RTP payload type.
Definition rtpvideosinknode.h:113
void setDumpPath(const String &path)
Sets a file path to dump the first frame's raw data.
Definition rtpvideosinknode.h:133
const FrameRate & frameRate() const
Returns the configured frame rate.
Definition rtpvideosinknode.h:89
uint32_t clockRate() const
Returns the RTP clock rate.
Definition rtpvideosinknode.h:122
const String & dumpPath() const
Returns the dump path.
Definition rtpvideosinknode.h:136
~RtpVideoSinkNode() override
Destructor.
void process() override
Sends a video frame over RTP with real-time pacing.
Network address with port number.
Definition socketaddress.h:50
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
#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