• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Интернет радио на ESP32

Интересен ли вам данный проект?

  • Да

  • Нет


Результаты будут видны только после голосования.

rv9c

New member
Всех приветствую. Хочу поделиться своим проектом интернет радиоприемника основанным на ESP32 без применения внешних ЦАП и декодеров потока. Более подробнее я рассказал в видео.
Архив с схемами и файлами для прошивки можно взять тут- esp32internetradiofull.zip

Мной использована отладочная плата LOLIN32 Lite, так же возможно использовать любой модуль основаный на ESP32 подключив обвязку и питание соответствующим образом.
 

Вложения

  • 16.4 KB Просмотры: 374
Последнее редактирование:

AndrF

Active member
Неплохо. Только не помешала бы возможность управления выбором станции и громкости с энкодеров...
 

rv9c

New member
Здравствуйте. Продолжаю развивать проект и хочу поделиться небольшим видео обзорами самого интернет радиоприемника и его веб интерфейса, а так же видео-инструкцию по прошивке.

Конструкция и устройство приемника.

Веб интерфейс приемника

Инструкция по прошивке и первое включение
 

rv9c

New member
Всех приветствую! В скором времени планирую выпустить небольшую партию интернет радиоприемников в виде набора для сборки и уже собранной платы. Предварительные размеры платы 50х55мм. Черновой вариант платы можно уже посмотреть.
Набор №1 будет состоять из:
1. распаянной платы
2. соединительных проводов с разъемами
Требуется только подключить динамики-колонки и подать питание и все заработает.

Набор №2 будет состоять из:
1. всех компонентов необходимых для сборки (печатная плата, модуль esp32, резисторы, конденсаторы и тд)
2. соединительных проводов с разъемами
Требуется для сборки распаять все компоненты на печатной плате, прошить esp32, подключить динамики-колонки и подать питание.

За ценами и пред заказом пожалуйста на rv9c@yandex.ru
 

Вложения

rv9c

New member
Всех приветствую! Радостная новость, платы приехали! Первый прототип уже собран и протестирован. Фото прилагаю. Всем кому нужен приемник или печатная плата обращайтесь ко мне на почту.
 

Вложения

Alcest

Member
Насколько велико время переключения между каналами у этого интернет-радиоприемника? Предположим, что интернет-соединение имеет крайне избыточную для интернет-радио скорость, пусть это будет 100 Мбит/с. Через какое время начнет воспроизводится звук после переключения с одного потока на другой?
 

rv9c

New member
Насколько велико время переключения между каналами у этого интернет-радиоприемника? Предположим, что интернет-соединение имеет крайне избыточную для интернет-радио скорость, пусть это будет 100 Мбит/с. Через какое время начнет воспроизводится звук после переключения с одного потока на другой?
Время переключения примерно 1сек максимум 5, все зависит от вещающего сервера и качества интернета.
 

Alcest

Member
Время переключения примерно 1сек максимум 5
А нельзя уменьшить это время менее 1 сек при исключительно хорошем соединении и достаточно производительных серверах? Хотя бы до 0,3-0,5 сек. Размер буфера урезать, например. Вопрос мой чисто теоретический. Интересует, работает ESP в данном проекте на пределе своих возможностей или еще есть куда расти?
 
Последнее редактирование:

rv9c

New member
А нельзя уменьшить это время менее 1 сек при исключительно хорошем соединении и достаточно производительных серверах? Хотя бы до 0,3-0,5 сек. Размер буфера урезать, например. Вопрос мой чисто теоретический. Интересует, работает ESP в данном проекте на пределе своих возможностей или еще есть куда расти?
Ресурсов расти ещё предостаточно, главное идеи) Возможно уменьшить буфер но тогда пострадает стабильность воспроизведения потока. Пакет потерялся, пошла разсинхронизация и начались заикания)
 

rst

Member
А нельзя уменьшить это время менее 1 сек при исключительно хорошем соединении и достаточно производительных серверах? Хотя бы до 0,3-0,5 сек. Размер буфера урезать, например. Вопрос мой чисто теоретический. Интересует, работает ESP в данном проекте на пределе своих возможностей или еще есть куда расти?
ESP тут не при чём. Разные серверы вещания по-разному передают поток в начале соединения. Некоторые выплёвывают несколько сотен КБ на макс. скорости, а другие - выдают поток почти со скоростью реалтайма.
Начать выдавать звук можно хоть сразу же, после декодирования первого же кадра (через несколько мсек), только делать так не следует, иначе в начале воспроизведения звук будет рваться. Необходимо сделать предварительную буферизацию, и включать звук только после накопления некоторого объёма в буфере.
 

rst

Member
Ресурсов расти ещё предостаточно, главное идеи)
Сделайте выделение метаданных из потока. Это как идея развития ;)

PS: Хотя, на такой базе, не очень-то далеко поразвиваешься (имхо) :cool:
 
Последнее редактирование:

Alcest

Member
Начать выдавать звук можно хоть сразу же, после декодирования первого же кадра (через несколько мсек), только делать так не следует, иначе в начале воспроизведения звук будет рваться.
Пичалька... Заводя разговор о времени буферизации потока, я оглядывался, такскзать, на аналоговые эфирные радиоприемники, которые можно настраивать не глядя на шкалу или дисплей. Крутишь ручку вслепую, при настройке на радиостанцию тут же появляется звук. Останавливаешься на секунду на найденной станции, и в зависимости от востребованности передаваемого контента либо продолжаешь крутить дальше ручку настройки, либо останавливаешься на текущей радиостанции. Удобно. А в случае с интернет-радио нужно обязательно смотреть на дисплей, потому как быстро прокручивая ручку проскочишь все интернет-радиостанции не получив из динамиков ни звука...

Я тут подумал, а не решается ли проблема (хотя бы частично) буфером с динамическим объемом? Минимальный размер буфера в процессе настройки, увеличивающийся если пользователь остановился на какой-то радиостанции. Так, чтобы при вращении энкодера звук появлялся сразу при минимальной буферизации, позволяя по быстрому оценить передаваемое интернет-радиостанции. Если передача заинтересовала, энкодер мы вращать прекращаем, и тут размер буфера увеличивается до максимума, обеспечивая бесперебойное воспроизведение потока.
 

rst

Member
А в случае с интернет-радио нужно обязательно смотреть на дисплей, потому как быстро прокручивая ручку проскочишь все интернет-радиостанции не получив из динамиков ни звука...
С онлайн-радио никакие ручки настроек крутить не надо. Вводится URL - устанавливается соединение. И время, через которое можно начать выдавать звук, зависит больше от сервера: некоторые сразу выплёвывают до ~300 КБ и сразу можно включать звук, другие - в начальный момент выдают поток примерно с той же скоростью, что и реальная скорость потока. Этот размер я называю размером пребуферизации. Т.е. - сервер начинает выдавать звук как бы из прошлого (до нескольких секунд назад). И у каждого сервера этот размер разный, в зависимости от настроек.
Так что с нормальным сервером (с пребуферизацией хотя-бы в 2-3 секунды), никакой ощутимой на слух задержки не будет - звук будет почти сразу же после коннекта (менее чем через секунду).
А с криво настроенными серверами (с малой пребуферизацией) или с очень нестабильной скоростью потока, если сразу начать воспроизводить, то звук будет рваться. И по такому рваному звуку ничего оценить не сможете.

Я тут подумал, а не решается ли проблема (хотя бы частично) буфером с динамическим объемом? Минимальный размер буфера в процессе настройки, увеличивающийся если пользователь остановился на какой-то радиостанции.
Вы понимаете, что в данном случае это поток - реального времени? Как Вы собираетесь динамически увеличивать буфер, если поток реального времени? Как только вы начали воспроизводить звук, то скорость заполнения буфера становится примерно равной скорости убывания данных из него (если сервер уже вышел из состояния пребуферизации) и, соответственно, если включили звук сразу, без пребуферизации, звук начнёт рваться, и он так и продолжит рваться, потому что заполненность буфера будет очень медленно нарастать. И на оценку "что там играет" уйдёт ещё больше времени.
 
Последнее редактирование:

nikolz

Well-known member
С онлайн-радио никакие ручки настроек крутить не надо. Вводится URL - устанавливается соединение. И время, через которое можно начать выдавать звук, зависит больше от сервера: некоторые сразу выплёвывают до ~300 КБ и сразу можно включать звук, другие - в начальный момент выдают поток примерно с той же скоростью, что и реальная скорость потока. Этот размер я называю размером пребуферизации. Т.е. - сервер начинает выдавать звук как бы из прошлого (до нескольких секунд назад). И у каждого сервера этот размер разный, в зависимости от настроек.
Так что с нормальным сервером (с пребуферизацией хотя-бы в 2-3 секунды), никакой ощутимой на слух задержки не будет - звук будет почти сразу же после коннекта (менее чем через секунду).
А с криво настроенными серверами (с малой пребуферизацией) или с очень нестабильной скоростью потока, если сразу начать воспроизводить, то звук будет рваться. И по такому рваному звуку ничего оценить не сможете.


Вы понимаете, что в данном случае это поток - реального времени? Как Вы собираетесь динамически увеличивать буфер, если поток реального времени? Как только вы начали воспроизводить звук, то скорость заполнения буфера становится примерно равной скорости убывания данных из него (если сервер уже вышел из состояния пребуферизации) и, соответственно, если включили звук сразу, без пребуферизации, звук начнёт рваться, и он так и продолжит рваться, потому что заполненность буфера будет очень медленно нарастать. И на оценку "что там играет" уйдёт ещё больше времени.
поправочка
если это реального времени то скорость заполнения буфера строго равна скорости убывания данных но не в этом случае так как интернет радио использует алгоритмы сжатия с потерей
поэтому скорость поступления всегда меньше или равна скорость убывания данных на выходе.
 

rst

Member
поправочка
если это реального времени то скорость заполнения буфера строго равна скорости убывания данных но не в этом случае так как интернет радио
Вы написали своё интернет-радио? И исследовали все потоковые сервера в инете? Видимо нет. Иначе бы знали, что это не так.
Да даже видимо никогда и не включали онлайн-приёмник, не то что писать....
 

nikolz

Well-known member
Вы написали своё интернет-радио? И исследовали все потоковые сервера в инете? Видимо нет. Иначе бы знали, что это не так.
Да даже видимо никогда и не включали онлайн-приёмник, не то что писать....
опять Вы не угадали.
Напрасно пытаетесь угадывать что делали другие. Это занятие бесполезное и увлекает лишь вас.
Рассуждайте о том, что делали сами.
 

pvvx

Активный участник сообщества
Я тут подумал, а не решается ли проблема (хотя бы частично) буфером с динамическим объемом?
Решается элементарно. Открывается и минимально буферизируется N каналов в плюс и N каналов в минус от текущего проигрываемого по индексу списка выбора. Т.е. в DAC проигрывается текущий канал, а другие 2N буферизируются и проигрываются в никуда. При переключении канала, к примеру, в плюс по списку, достаточно сменить дескриптор указателя потока идущего на DAC, закрыть соединение с (текущим – N) каналом и открыть более новый с номером (текущий + N). В таком варианте время переключения возможно сократить в N раз и довести до дискретности вывода в DAC. :)
 
Сверху Снизу