arduino-audio-tools
Loading...
Searching...
No Matches
RTSPMediaCallbackSource.h
Go to the documentation of this file.
1/*
2 * Author: Phil Schatzmann
3 * RTSP Media Callback Source for custom media data providers
4 */
5
6#pragma once
7
8#include "IMediaSource.h"
9#include "RTSPFormat.h"
10
11namespace audio_tools {
12
31 public:
37 typedef int (*read_callback_t)(uint8_t* buffer, int maxBytes, void* userData);
38
41 typedef void (*lifecycle_callback_t)(void* userData);
42
51 typedef int (*packet_size_callback_t)(void* userData);
52
57 read_callback = nullptr;
58 start_callback = nullptr;
59 stop_callback = nullptr;
60 packet_size_callback = nullptr;
61 user_data = nullptr;
63 is_active = false;
64 }
65
71 RTSPMediaCallbackSource(read_callback_t callback, void* userData = nullptr)
73 setReadCallback(callback, userData);
74 }
75
82 RTSPMediaCallbackSource(RTSPFormat& format, read_callback_t callback, void* userData = nullptr)
83 : RTSPMediaCallbackSource(callback, userData) {
84 setFormat(format);
85 }
86
88 stop();
89 }
90
96 void setReadCallback(read_callback_t callback, void* userData = nullptr) {
97 read_callback = callback;
98 user_data = userData;
99 }
100
106 start_callback = callback;
107 }
108
114 stop_callback = callback;
115 }
116
131
136 void setFormat(RTSPFormat& format) {
137 p_format = &format;
138 }
139
144 RTSPFormat& getFormat() override {
145 return *p_format;
146 }
147
154 int readBytes(void* dest, int maxBytes) override {
155 if (!is_active || read_callback == nullptr) {
156 return 0;
157 }
158
159 if (dest == nullptr || maxBytes <= 0) {
160 LOGW("RTSPMediaCallbackSource: invalid parameters");
161 return 0;
162 }
163
164 // Call user-provided callback
165 int result = read_callback((uint8_t*)dest, maxBytes, user_data);
166
167 // Log result for debugging
168 if (result > 0) {
169 LOGD("RTSPMediaCallbackSource: read %d bytes", result);
170 } else if (result < 0) {
171 LOGW("RTSPMediaCallbackSource: callback returned error %d", result);
172 }
173
174 return result;
175 }
176
184 int packetSize() override {
185 if (packet_size_callback == nullptr) return -1;
186 if (!is_active) return 0;
188 }
189
194 void start() override {
195 LOGI("RTSPMediaCallbackSource: starting");
196
197 if (read_callback == nullptr) {
198 LOGE("RTSPMediaCallbackSource: no read callback configured");
199 return;
200 }
201
203 is_active = true;
204
205 // Call optional start callback
206 if (start_callback != nullptr) {
208 }
209
210 LOGI("RTSPMediaCallbackSource: started successfully");
211 }
212
217 void stop() override {
218 LOGI("RTSPMediaCallbackSource: stopping");
219
220 is_active = false;
222
223 // Call optional stop callback
224 if (stop_callback != nullptr) {
226 }
227
228 LOGI("RTSPMediaCallbackSource: stopped");
229 }
230
235 bool isActive() const {
236 return is_active && read_callback != nullptr;
237 }
238
243 void* getUserData() const {
244 return user_data;
245 }
246
247 protected:
256};
257
266
267} // namespace audio_tools
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Media Source Interface - Contract for Media Data Providers.
Definition IMediaSource.h:19
virtual void start()
Initialize media source for streaming.
Definition IMediaSource.h:65
virtual void stop()
Cleanup media source after streaming.
Definition IMediaSource.h:78
Audio Format Definition - Base class for RTSP audio formats.
Definition RTSPFormat.h:57
Linear PCM Format for RTSP Streaming.
Definition RTSPFormat.h:169
Callback-based RTSP Media Source.
Definition RTSPMediaCallbackSource.h:30
RTSPFormat & getFormat() override
Get the current RTSP format configuration.
Definition RTSPMediaCallbackSource.h:144
void * user_data
Definition RTSPMediaCallbackSource.h:252
void setStartCallback(lifecycle_callback_t callback)
Set optional start callback (called when streaming begins)
Definition RTSPMediaCallbackSource.h:105
bool isActive() const
Check if the source is active.
Definition RTSPMediaCallbackSource.h:235
void * getUserData() const
Get the user data pointer.
Definition RTSPMediaCallbackSource.h:243
bool is_active
Definition RTSPMediaCallbackSource.h:255
RTSPMediaCallbackSource(read_callback_t callback, void *userData=nullptr)
Constructor with read callback.
Definition RTSPMediaCallbackSource.h:71
lifecycle_callback_t stop_callback
Definition RTSPMediaCallbackSource.h:250
void start() override
Start the media source Calls the optional start callback if configured.
Definition RTSPMediaCallbackSource.h:194
read_callback_t read_callback
Definition RTSPMediaCallbackSource.h:248
int packetSize() override
Report the size of the next queued fragment via the configured packet-size callback (packetized/video...
Definition RTSPMediaCallbackSource.h:184
RTSPMediaCallbackSource()
Default constructor.
Definition RTSPMediaCallbackSource.h:56
void setReadCallback(read_callback_t callback, void *userData=nullptr)
Set the callback function for reading media data.
Definition RTSPMediaCallbackSource.h:96
int(* packet_size_callback_t)(void *userData)
Definition RTSPMediaCallbackSource.h:51
packet_size_callback_t packet_size_callback
Definition RTSPMediaCallbackSource.h:251
void(* lifecycle_callback_t)(void *userData)
Definition RTSPMediaCallbackSource.h:41
void stop() override
Stop the media source Calls the optional stop callback if configured.
Definition RTSPMediaCallbackSource.h:217
int(* read_callback_t)(uint8_t *buffer, int maxBytes, void *userData)
Definition RTSPMediaCallbackSource.h:37
void setPacketSizeCallback(packet_size_callback_t callback)
Set the callback reporting the size of the next already- fragmented, ready-to-send packet....
Definition RTSPMediaCallbackSource.h:128
void setStopCallback(lifecycle_callback_t callback)
Set optional stop callback (called when streaming ends)
Definition RTSPMediaCallbackSource.h:113
virtual ~RTSPMediaCallbackSource()
Definition RTSPMediaCallbackSource.h:87
lifecycle_callback_t start_callback
Definition RTSPMediaCallbackSource.h:249
RTSPFormatPCM default_format
Definition RTSPMediaCallbackSource.h:254
int readBytes(void *dest, int maxBytes) override
Read media data using the configured callback.
Definition RTSPMediaCallbackSource.h:154
void setFormat(RTSPFormat &format)
Set the RTSP format configuration.
Definition RTSPMediaCallbackSource.h:136
RTSPFormat * p_format
Definition RTSPMediaCallbackSource.h:253
RTSPMediaCallbackSource(RTSPFormat &format, read_callback_t callback, void *userData=nullptr)
Constructor with format and read callback.
Definition RTSPMediaCallbackSource.h:82
RTSPMediaCallbackSource::packet_size_callback_t PacketSizeCallback
Definition RTSPMediaCallbackSource.h:264
RTSPMediaCallbackSource::lifecycle_callback_t LifecycleCallback
Definition RTSPMediaCallbackSource.h:263
RTSPMediaCallbackSource::read_callback_t ReadCallback
Definition RTSPMediaCallbackSource.h:262
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6