arduino-audio-tools
Loading...
Searching...
No Matches
RTSPServer.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
10#pragma once
11#include "RTSPAudioStreamer.h"
12#include "RTSPServerBase.h"
13#ifdef ESP32
14#include <WiFi.h>
15#include <esp_wifi.h>
16
18#endif
19
20namespace audio_tools {
21
39template <typename Platform>
40class RTSPServer : public RTSPServerBase<Platform> {
41 public:
43
46
48
49#ifdef ESP32
50
51 bool begin(const char* ssid, const char* password) {
52 return RTSPServerBase<Platform>::begin(ssid, password);
53 }
54#endif
55
56 bool begin() {
57 if (!RTSPServerBase<Platform>::begin()) return false;
58 if (!serverTask.begin([this]() { serverThreadLoop(); })) {
59 LOGE("Couldn't start server thread");
60 return false;
61 }
62 return true;
63 }
64
70
71 protected:
72 int core = 0;
73 audio_tools::Task serverTask{"RTSPServerThread", 10000, 5, core};
74 audio_tools::Task sessionTask{"RTSPSessionTask", 8000, 8, core};
75
77 unsigned long lastCheck = millis();
78 LOGD("Server thread listening... (numClients: %d)", this->client_count);
79 int prevClientCount = this->client_count;
80 this->acceptClient();
81 // If a new client was accepted, start session task
82 if (this->client_count > prevClientCount) {
83 LOGI("Client connected");
84 if (!sessionTask.begin([this]() { sessionThreadLoop(); })) {
85 LOGE("Couldn't start sessionThread");
86 Platform::closeSocket(&this->client);
87 this->client_count--;
88 } else {
89 LOGI("Number of clients: %d", this->client_count);
90 }
91 } else if (this->client_count > 0) {
92 LOGD("Waiting for current session to end (numClients: %d)", this->client_count);
93 }
94 int time = 200 - (millis() - lastCheck);
95 if (time < 0) time = 0;
96 delay(time);
97 }
98
100 LOGD("RTSP Task running");
101 while (this->rtspSession && this->rtspSession->isSessionOpen()) {
102 this->handleSession();
103 delay(30);
104 }
105 delay(500);
106 LOGI("Session cleaned up: (numClients: %d)", this->client_count);
108 }
109};
110
111} // namespace audio_tools
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
RTSPAudioStreamerBase - Core RTP Audio Streaming Engine.
Definition RTSPAudioStreamer.h:50
RTSPServerBase - Shared logic for RTSPServer and RTSPServerTaskless.
Definition RTSPServerBase.h:29
void handleSession()
Handle requests session if active.
Definition RTSPServerBase.h:125
RtspSession< Platform > * rtspSession
Definition RTSPServerBase.h:101
Platform::TcpClientType client
Definition RTSPServerBase.h:98
virtual bool begin()
Start server.
Definition RTSPServerBase.h:66
int port
Definition RTSPServerBase.h:96
void end()
Stop server and clean up.
Definition RTSPServerBase.h:76
int client_count
Definition RTSPServerBase.h:100
void acceptClient()
Accept new client if none is active.
Definition RTSPServerBase.h:108
RTSPAudioStreamerBase< Platform > * streamer
Definition RTSPServerBase.h:99
RTSPServer - Multi-client Audio Streaming Server (task-based)
Definition RTSPServer.h:40
bool begin(const char *ssid, const char *password)
Definition RTSPServer.h:51
audio_tools::Task serverTask
Definition RTSPServer.h:73
int core
Definition RTSPServer.h:72
~RTSPServer()
Definition RTSPServer.h:47
bool begin()
Start server.
Definition RTSPServer.h:56
void serverThreadLoop()
Definition RTSPServer.h:76
audio_tools::Task sessionTask
Definition RTSPServer.h:74
void sessionThreadLoop()
Definition RTSPServer.h:99
void end()
Definition RTSPServer.h:65
RTSPServer(streamer_t &streamer, int port=8554, int core=1)
Definition RTSPServer.h:44
FreeRTOS task.
Definition Task.h:21
void end()
suspends the task
Definition Task.h:65
bool begin(std::function< void()> process)
Definition Task.h:57
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
void delay(unsigned long ms)
Definition Time.h:23
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