2#include "AudioConfig.h"
3#if defined(USE_CONCURRENCY)
4#include "AudioTools/AudioLibs/Concurrency.h"
5#include "AudioTools/CoreAudio/AudioHttp/AbstractURLStream.h"
6#include "AudioTools/CoreAudio/BaseStream.h"
9#define URL_STREAM_CORE 0
12#ifndef URL_STREAM_PRIORITY
13#define URL_STREAM_PRIORITY 2
16#ifndef URL_STREAM_BUFFER_COUNT
17#define URL_STREAM_BUFFER_COUNT 10
21#define STACK_SIZE 30000
49 buffers.resize(bufferSize, bufferCount);
52 virtual void begin(
bool wait =
true) {
56 task.begin(std::bind(&BufferedTaskStream::processTask,
this));
57 if (!
wait) ready =
true;
67 virtual void setInput(AudioStream &input) {
76 virtual size_t write(
const uint8_t *data,
size_t len)
override {
return 0; }
79 virtual void flush()
override {}
82 virtual int read()
override {
85 result = buffers.read();
90 virtual int peek()
override {
93 result = buffers.peek();
101 result = buffers.readArray(data, len);
102 LOGD(
"%s: %zu -> %zu", LOG_METHOD, len, result);
110 result = buffers.available();
117 Task task{
"BufferedTaskStream", STACK_SIZE, URL_STREAM_PRIORITY,
119 SynchronizedNBuffer buffers{DEFAULT_BUFFER_SIZE, URL_STREAM_BUFFER_COUNT};
123 size_t available_to_write = this->buffers.availableForWrite();
124 if (*(this->p_stream) && available_to_write > 0) {
125 size_t to_read = min(available_to_write, (
size_t)512);
126 uint8_t buffer[to_read];
127 size_t avail_read = this->p_stream->readBytes((uint8_t *)buffer, to_read);
128 size_t written = this->buffers.writeArray(buffer, avail_read);
130 if (written != avail_read) {
131 LOGE(
"DATA Lost! %zu reqested, %zu written!", avail_read, written);
139 if (available_to_write == 0) {
159 taskStream.setInput(urlStream);
168 taskStream.setInput(urlStream);
178 taskStream.setInput(urlStream);
187 bool begin(
const char *urlStr,
const char *
acceptMime =
nullptr,
198 virtual int available() {
return taskStream.
available(); }
200 virtual size_t readBytes(uint8_t *data,
size_t len) {
201 size_t result = taskStream.
readBytes(data, len);
202 LOGD(
"%s: %zu -> %zu", LOG_METHOD, len, result);
206 virtual int read() {
return taskStream.
read(); }
208 virtual int peek() {
return taskStream.
peek(); }
210 virtual void flush() {}
219 void setSSID(
const char *ssid)
override { urlStream.setSSID(ssid); }
223 urlStream.setPassword(password);
234 urlStream.addRequestHeader(key, value);
238 return urlStream.getReplyHeader(key);
void stop()
Public generic methods.
Definition AudioRuntime.h:28