arduino-audio-tools
Loading...
Searching...
No Matches
RTSPAudioSource.h
Go to the documentation of this file.
1/*
2 * Author: Phil Schatzmann
3 *
4 * Based on Micro-RTSP library:
5 * https://github.com/geeksville/Micro-RTSP
6 * https://github.com/Tomp0801/Micro-RTSP-Audio
7 */
8
9#pragma once
10
12#include "IAudioSource.h"
13#include "RTSPFormat.h"
14#include "RTSPPlatform.h"
15
16
17namespace audio_tools {
18
32 public:
33 RTSPAudioSource() = default;
34
38 virtual ~RTSPAudioSource() {
39 TRACEI();
40 stop(); // Ensure we're properly stopped
41 m_magic = 0xDEADFACE; // Invalidate magic number
42 }
43
48 RTSPAudioSource(AudioStream &stream) { setInput(stream); }
49
55 RTSPAudioSource(Stream &stream, AudioInfo info) { setInput(stream, info); }
56
62 RTSPAudioSource(Stream &stream, RTSPFormat &format) {
63 setInput(stream);
64 setFormat(format);
65 }
66
71 void setInput(AudioStream &stream) {
72 p_stream = &stream;
73 p_audiostream = &stream;
74 }
75
81 void setInput(Stream &stream, AudioInfo info) {
82 p_stream = &stream;
83 p_audiostream = nullptr;
84 setAudioInfo(info);
85 }
86
91 void setInput(Stream &stream) {
92 p_stream = &stream;
93 p_audiostream = nullptr;
94 }
95
105 TRACEI();
106 default_format.begin(info);
107 if (p_audiostream) {
109 }
110 }
111
118 int readBytes(void *dest, int byteCount) override {
119 // Validate object integrity
120 if (m_magic != MAGIC_NUMBER) {
121 LOGE("RTSPAudioSource: invalid magic number 0x%08x, object corrupted",
122 m_magic);
123 return 0;
124 }
125
126 // Validate parameters
127 if (dest == nullptr || byteCount <= 0) {
128 LOGW("RTSPAudioSource: invalid parameters dest=%p byteCount=%d", dest,
129 byteCount);
130 return 0;
131 }
132
134
135 int result = 0;
136 LOGD("readDataTo: %d", byteCount);
137 if (started && p_stream) {
138 result = p_stream->readBytes((uint8_t *)dest, byteCount);
139 }
140 return result;
141 }
142
149 void start() override {
150 TRACEI();
151
152 // Validate object integrity
153 if (m_magic != MAGIC_NUMBER) {
154 LOGE("RTSPAudioSource: start called on corrupted object, magic=0x%08x",
155 m_magic);
156 return;
157 }
158
160 if (p_audiostream) {
162 }
163 started = true;
164 }
165
172 void stop() override {
173 TRACEI();
174
175 // Validate object integrity (allow stop even if corrupted for cleanup)
176 if (m_magic != MAGIC_NUMBER) {
177 LOGW(
178 "RTSPAudioSource: stop called on corrupted object, magic=0x%08x, "
179 "proceeding anyway",
180 m_magic);
181 }
182
184 started = false;
185 if (p_audiostream) {
187 }
188 }
189
191 void setFragmentSize(int fragmentSize) {
192 getFormat().setFragmentSize(fragmentSize);
193 }
194
197
202 bool isActive() {
203 if (!started) return false;
204 if (timeout > 0) {
205 return millis() - time_of_last_read < timeout;
206 }
207 return true;
208 }
209
211 bool isStarted() { return started; }
212
213 void setFormat(RTSPFormat &format) { p_format = &format; }
214
215 RTSPFormat &getFormat() override { return *p_format; }
216
217 void setTimeout(uint16_t to) { timeout = to; }
218
219 protected:
221 0xFEEDFACE; // Magic number for object validation
222 uint32_t m_magic = MAGIC_NUMBER; // Object validity marker
223 Stream *p_stream = nullptr;
226 bool started = false;
227 RTSPFormatPCM default_format; // Used for AudioStream sources
228 RTSPFormat *p_format = &default_format; // kept internally as pointer;
229 // externally exposed as reference
231};
232
233} // namespace audio_tools
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:122
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition BaseStream.h:130
virtual bool begin()
Definition BaseStream.h:43
virtual void end()
Definition BaseStream.h:44
Audio Source Interface - Contract for Audio Data Providers.
Definition IAudioSource.h:19
virtual void start()
Initialize audio source for streaming.
Definition IAudioSource.h:65
virtual void stop()
Cleanup audio source after streaming.
Definition IAudioSource.h:78
Unified RTSP Audio Source - Works with both Stream and AudioStream.
Definition RTSPAudioSource.h:31
RTSPFormat & getFormat() override
Get the audio format configuration.
Definition RTSPAudioSource.h:215
const uint32_t MAGIC_NUMBER
Definition RTSPAudioSource.h:220
RTSPAudioSource(Stream &stream, RTSPFormat &format)
Construct with custom format.
Definition RTSPAudioSource.h:62
uint32_t time_of_last_read
Definition RTSPAudioSource.h:225
bool started
Definition RTSPAudioSource.h:226
void start() override
Start the audio source.
Definition RTSPAudioSource.h:149
void setAudioInfo(AudioInfo info)
Set audio configuration manually.
Definition RTSPAudioSource.h:104
bool isStarted()
Returns true after start() has been called.
Definition RTSPAudioSource.h:211
void setTimeout(uint16_t to)
Definition RTSPAudioSource.h:217
void setInput(Stream &stream, AudioInfo info)
Set input from generic Stream with explicit audio info.
Definition RTSPAudioSource.h:81
void setTimerPeriod(int period)
Defines the timer period.
Definition RTSPAudioSource.h:196
Stream * p_stream
Definition RTSPAudioSource.h:223
uint16_t timeout
Definition RTSPAudioSource.h:230
void setFragmentSize(int fragmentSize)
Defines the fragment size.
Definition RTSPAudioSource.h:191
RTSPAudioSource(Stream &stream, AudioInfo info)
Construct from generic Stream with explicit audio info.
Definition RTSPAudioSource.h:55
uint32_t m_magic
Definition RTSPAudioSource.h:222
bool isActive()
Check if source is actively being read (AudioStream only)
Definition RTSPAudioSource.h:202
RTSPAudioSource(AudioStream &stream)
Construct from AudioStream with automatic audio info detection.
Definition RTSPAudioSource.h:48
void stop() override
Stop the audio source.
Definition RTSPAudioSource.h:172
virtual ~RTSPAudioSource()
Destructor - Clean up resources.
Definition RTSPAudioSource.h:38
void setInput(AudioStream &stream)
Set input from AudioStream (with auto-detection)
Definition RTSPAudioSource.h:71
RTSPFormatPCM default_format
Definition RTSPAudioSource.h:227
AudioStream * p_audiostream
Definition RTSPAudioSource.h:224
void setInput(Stream &stream)
Set input from generic Stream (audio info must be set separately)
Definition RTSPAudioSource.h:91
void setFormat(RTSPFormat &format)
Definition RTSPAudioSource.h:213
RTSPFormat * p_format
Definition RTSPAudioSource.h:228
int readBytes(void *dest, int byteCount) override
Read audio data for RTSP streaming.
Definition RTSPAudioSource.h:118
Audio Format Definition - Base class for RTSP audio formats.
Definition RTSPFormat.h:48
void setTimerPeriodUs(int period)
Defines the timer period in microseconds.
Definition RTSPFormat.h:83
void setFragmentSize(int fragmentSize)
Defines the fragment size in bytes.
Definition RTSPFormat.h:69
Linear PCM Format for RTSP Streaming.
Definition RTSPFormat.h:121
void begin(AudioInfo info)
Definition RTSPFormat.h:136
Definition NoArduino.h:142
virtual size_t readBytes(uint8_t *data, size_t len)
Definition NoArduino.h:147
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
uint32_t millis()
Returns the milliseconds since the start.
Definition Time.h:12
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:55