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 "RTSPMediaStreamer.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
42template <typename Platform>
43class RTSPServer : public RTSPServerBase<Platform> {
44 public:
46
47 RTSPServer(streamer_t& streamer, int port = 8554, int core = 1)
48 : RTSPServerBase<Platform>(streamer, port), core(core) {}
49
51
52#ifdef ESP32
53
54 bool begin(const char* ssid, const char* password) {
55 return RTSPServerBase<Platform>::begin(ssid, password);
56 }
57#endif
58
59 bool begin() {
60 if (!RTSPServerBase<Platform>::begin()) return false;
61 if (!serverTask.begin([this]() { serverThreadLoop(); })) {
62 LOGE("Couldn't start server thread");
63 return false;
64 }
65 return true;
66 }
67
68 void end() {
69 sessionTask.end();
70 serverTask.end();
72 }
73
74 protected:
75 int core = 0;
76 audio_tools::Task serverTask{"RTSPServerThread", 10000, 5, core};
77 audio_tools::Task sessionTask{"RTSPSessionTask", 8000, 8, core};
78
80 unsigned long lastCheck = millis();
81 LOGD("Server thread listening... (numClients: %d)", this->client_count);
82 int prevClientCount = this->client_count;
83 this->acceptClient();
84 // If a new client was accepted, start session task
85 if (this->client_count > prevClientCount) {
86 LOGI("Client connected");
87 if (!sessionTask.begin([this]() { sessionThreadLoop(); })) {
88 LOGE("Couldn't start sessionThread");
89 Platform::closeSocket(&this->client);
90 this->client_count--;
91 } else {
92 LOGI("Number of clients: %d", this->client_count);
93 }
94 } else if (this->client_count > 0) {
95 LOGD("Waiting for current session to end (numClients: %d)", this->client_count);
96 }
97 int time = 200 - (millis() - lastCheck);
98 if (time < 0) time = 0;
99 delay(time);
100 }
101
103 LOGD("RTSP Task running");
104 while (this->rtspSession && this->rtspSession->isSessionOpen()) {
105 this->handleSession();
106 delay(30);
107 }
108 delay(500);
109 LOGI("Session cleaned up: (numClients: %d)", this->client_count);
110 sessionTask.end();
111 }
112};
113
114} // namespace audio_tools
#define LOGI(...)
#define LOGD(...)
#define LOGE(...)
RTSPMediaStreamerBase - Core RTP Media Streaming Engine.
Definition RTSPMediaStreamer.h:50
void handleSession()
Handle requests session if active.
Definition RTSPServerBase.h:127
bool begin(const char *ssid, const char *password)
Start server and connect to WiFi (ESP32 only).
Definition RTSPServerBase.h:48
RTSPServerBase(RTSPMediaStreamerBase< Platform > &streamer, int port=8554)
Constructor.
Definition RTSPServerBase.h:32
RtspSession< Platform > * rtspSession
Definition RTSPServerBase.h:103
Platform::TcpClientType client
Definition RTSPServerBase.h:100
virtual bool begin()
Start server.
Definition RTSPServerBase.h:66
int port
Definition RTSPServerBase.h:98
RTSPMediaStreamerBase< Platform > * streamer
Definition RTSPServerBase.h:101
void end()
Stop server and clean up.
Definition RTSPServerBase.h:76
int client_count
Definition RTSPServerBase.h:102
void acceptClient()
Accept new client if none is active.
Definition RTSPServerBase.h:110
bool begin(const char *ssid, const char *password)
Definition RTSPServer.h:54
audio_tools::Task serverTask
Definition RTSPServer.h:76
int core
Definition RTSPServer.h:75
~RTSPServer()
Definition RTSPServer.h:50
bool begin()
Start server.
Definition RTSPServer.h:59
void serverThreadLoop()
Definition RTSPServer.h:79
audio_tools::Task sessionTask
Definition RTSPServer.h:77
void sessionThreadLoop()
Definition RTSPServer.h:102
void end()
Definition RTSPServer.h:68
RTSPMediaStreamerBase< Platform > streamer_t
Definition RTSPServer.h:45
RTSPServer(streamer_t &streamer, int port=8554, int core=1)
Definition RTSPServer.h:47
FreeRTOS task.
Definition Task.h:26
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
void delay(uint32_t ms)
Definition Arduino.h:259
uint32_t millis()
Returns the milliseconds since the start.
Definition Arduino.h:260