jcxz писал(а):
Из чего сделано такое умозаключение?
из картинки...

jcxz писал(а):
Однозначно - нет. Достаточно взглянуть на значения загрузки CPU, которые я приводил.
загрузки какого CPU ?
jcxz писал(а):
На Атмеге? Серьёзно??? Думаете - она потянет TLS?
Чтобы примерно представляли о чём идёт речь - загрузка CPU в моём радио:
1. Проигрывание потока MP3 станции 320 кб/с, стерео, HTTP = до ~26%
http://icecast.vgtrk.cdnvideo.ru/vestifm2. Проигрывание потока AAC станции 160 кб/с, стерео, HTTP = до ~27%
http://lr4mp1.latvijasradio.lv:80183. Проигрывание потока AAC+ станции 48 кб/с, стерео, HTTP = до ~48%
http://stream.grad-petrov.ru:8093/aac4. Проигрывание потока AAC+ станции 96 кб/с, моно, HTTPS = до ~34%
https://live.radiospinner.com/etkvkz-965. Проигрывание потока MP3 станции 256 кб/с, стерео, HTTPS = до ~32%
https://stream.cassiopeia-station.ru:5125/streamСамый тяжёлый вариант был бы на высоких скоростях для AAC+, стерео, HTTPS. Но станция AAC+, стерео, 128кб/с, HTTPS, которую раньше использовал для тестов, сейчас не работает. Раньше на ней загрузка CPU была 70...80%. Другую аналогичную, но работающую - к сожалению не знаю.
Это на Cortex-M4F с тактовой = 96МГц и с буферами в SDRAM.
Загрузка - суммарная: скачивание (WiFi через ESP8266), TLS (soft AES), декодирование аудио (Helix), обновление бегущей картинки на LCD 320x240, и много другой мелочи.
Загрузка CPU на HTTPS очень сильно зависит от размеров кусков кодирования потока: при больших кусках (по неск. КБ) загрузка сильно прыгает, при мелких кусках - более равномерная. Также многие станции отдают поток очень неравномерно: могут несколько секунд гнать на скорости в несколько раз выше скорости аудио-потока, потом пауза и снова - следующая порция. Некоторые сначала (сразу после подключения) выплёвывают большой объём (до 1МБ и даже больше) непрерывно на большой скорости, а далее работают уже на нормальной скорости. Вот для этого и нужен большой буфер.
о каком CPU тут идёт речь ?
Cortex-M4F с тактовой = 96МГц ?
ESP8266 ?
у нас нет ни Cortex-M4F (с тактовой = 96МГц), ни ESP8266.
у нас есть Ардуино (с тактовой = 16МГц, максимум = 20МГц).
покажите загрузку CPU Ардуино (с тактовой = 16МГц, максимум = 20МГц).
jcxz писал(а):
Это официальная прошивка. И другой нет. Если знаете - посоветуйте другую, "недуратскую", которая позволяет задать размер TCP-окна?
у нас нет ESP8266.
jcxz писал(а):
Какой ответ и на какой вопрос вы ожидаете?
ответ профессионалов.
которые не только качают готовые библиотеки из интернета, но и пишут сами.
jcxz писал(а):
Один AES-кадр может весить 16KB. Как вы его собрались дешифровывать, если даже скачать некуда?
о каком AES-кадре идёт речь ?
согласно стандарту AES шифрует блоками по 16 байт.
jcxz писал(а):
Это уж не говоря о буфере аудио-декодера, буфере сэмплов ЦАП и т.д.
я не знаю ничего о буфере аудио-декодера, буфере сэмплов ЦАП...
до этого мы ещё не дошли))
но сначала разберёмся с потоками...
1.
на видео выше говорится про "методанные"...
да.

сервер передаёт плееру обычный HTTP ответ...
HTTP/1.0 200 OK
icy-br: 192
icy-pub: 1
icy-description: 1.FM - Radio Gaia
icy-url:
http://1.fmInstance-id: ab50168940339c8583715106639d847f
Cache-Control: no-cache
Server: AIS Streaming Server 8.6.5
icy-genre: Chill
Expires: Mon, 26 Jul 1997 05:00:00 GMT
[img]icy-metaint:%208192[/img]
Pragma: no-cache
icy-name: 1.FM - Radio Gaia
Connection: close
Content-Type: audio/mpeg
icy-metaint: 8192 это и есть "методанные"...
получается что в данном случае сервер передаёт поток блоками по 8192 байт.
к сожалению подробно рассмотреть "методанные" не могу... ссылка больше не работает))
2.
тогда откроем другую ссылку...
Вложение:
HTTP.jpg [218.33 KiB]
Скачиваний: 8
сервер передаёт плееру обычный HTTP ответ...
HTTP/1.0 200 OK
Server: Vmeste v1.6
Date: Mon, 18 Aug 2025 09:30:33 GMT
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Access-Control-Allow-Headers: Origin, Accept, Content-Type, X-Requested-With
Content-Type: audio/mpeg
icy-br: 128
icy-name: LOVE IS RADIO
icy-djname: LOVE IS RADIO
icy-description: LOVE IS RADIO
icy-url:
https://loveisradio.byicy-pro: 1
никаких "методанные" тут нет...
получается что в данном случае сервер передаёт просто поток... непрерывный поток байт.
3.
в следующем пакете уже идёт сам поток MP3... непрерывный поток байт.
Вложение:
MP3.jpg [209.54 KiB]
Скачиваний: 6
вначале идёт заголовок (ff)... тип файла(fb)...

получается что на видео выше нас обманули))
никаких "методанные" тут нет...
получается что не все сервера передают "методанные"...
многие станции отдают поток очень неравномерно: могут несколько секунд гнать на скорости в несколько раз выше скорости аудио-потока, потом пауза и снова - следующая порция. Некоторые сначала (сразу после подключения) выплёвывают большой объём (до 1МБ и даже больше) непрерывно на большой скорости, а далее работают уже на нормальной скорости. Вот для этого и нужен большой буфер.
в TCP протоколе приёмник передаёт размер приёмного буфера.
согласно протоколу TCP если буфер приёмника переполняется то передача приостанавливается.
и хотя я терпеть не могу TCP протокол (я всё делаю на UDP) но правила есть правила.
а вот как это работает на практике... с интернет радио... по протоколу TCP... я ещё не проверял...
тогда смотрим как это на практике...
1.
приёмник передаёт серверу размер своего буфера.
в какой то момент буфер приёмника переполняется...
в данном случае размер буфера приёмника сократился до 488 байт.
Вложение:
size 488.jpg [155.07 KiB]
Скачиваний: 63
сервер хочет передать следующий пакет... но не может))
поэтому сервер передаёт пакет... Window Full ))
Вложение:
Window Full.jpg [163.68 KiB]
Скачиваний: 8
приёмник подтверждает что буфер приёмника переполнился... и следующий пакет принять не может))
Вложение:
Zero Window.jpg [159.22 KiB]
Скачиваний: 6
в этом случае передача приостанавливается...
2.
после очистки буфера приёмника передача возобновляется...
да. именно так и работает протокол TCP.
и хотя я терпеть не могу TCP протокол... но это уже другая история))
с этим разобрались.
Также многие станции отдают поток очень неравномерно: могут несколько секунд гнать на скорости в несколько раз выше скорости аудио-потока, потом пауза и снова - следующая порция. Некоторые сначала (сразу после подключения) выплёвывают большой объём (до 1МБ и даже больше) непрерывно на большой скорости, а далее работают уже на нормальной скорости. Вот для этого и нужен большой буфер.
а почему такое может быть ?
ну... причины могут быть разные))
- большая нагрузка на севрер.
- плохая связь с сервером.
- другое))
проверим связь.
тестовая программа показывает нам как работает связь по 3G...

видно что поток не равномерный... это плохая связь с тестовым сервером.
в динамике слышно как "булькает" и "заикается"...))
для сравнения так работает связь по Wi-Fi...

видно что поток равномерный... это хорошая связь с тестовым сервером.
в динамике ничего не "булькает" и не "заикается"...))
конкретно в этом случае связь с радио сервером по оптике.
Вложение:
пакеты.jpg [230.51 KiB]
Скачиваний: 7
видно что поток равномерный... это хорошая связь с радио сервером.
в динамике ничего не "булькает" и не "заикается"...))
вывод: надо делать интернет радио работающего по оптике.))
далее...
итого
192000 б/с / 8 = 24000 байт в секунду.
потянет ли Ардуино ? думаю да))
в нашем примере сервер передаёт со скоростью 128 кбит/c.
смотрим...
Вложение:
байты.jpg [149.85 KiB]
Скачиваний: 8
в среднем 15 пакетов в секунду... в каждом пакете в среднем 1460 байт...
на первой секунде...
получается 141486 - 123617 = 17869 байт в секунду... или 142952 бит в секунду...
на второй секунде...
13897 байт в секунду... или 111176 бит в секунду...
и т.д.
в среднем получаем 16000 байт в секунду... или 128 кбит/c...
сможет ли ардуино принят 15 пакетов в секунду ?
да, вполне))
в прошлой теме мы делали "сервер"))
W5500_client+Atmega8 = "сервер"))
и начали загружать на наш "сервер" всё подряд...
картинки...

музыку... MP3...

и даже видео... MP4...

при этом скорость загрузки составила 6...7 мс на пакет или 140 пакетов в секунду... или более 1 Мбит в секунду ! ))
~1,5 Мбит в секунду.
при этом Ардуина даже не старалась... работала от RC-генератора = 8 Мгц. ))
а вы говорите невозможно.
с Ардуино всё возможно ! ))
правда в последнем примере это был просто тест скорости...
но нам ещё надо куда то дальше передавать поток... на VS1053B или VS1063A.
ну тогда (грубо) поделите скорость на двое ))
Про поддержку HTTPS согласен. Я только начал библиотеку писать для интернет радио, со временем добавлю когда жизнь заставит.
На Атмеге? Серьёзно??? Думаете - она потянет TLS?
я бы не спешил с выводами... ))

так всё таки... где наши "методанные"... ???
подключимся к другому серверу...
Вложение:
HTTP.jpg [173.67 KiB]
Скачиваний: 8
HTTP/1.0 200 OK
icy-notice1:
This stream requires <a href="http://www.winamp.com">Winamp
icy-notice2:SHOUTcast DNAS/posix(bsd) v2.4.7.256
icy-name:Rewound Radio
icy-genre:Oldies
icy-br:64
icy-url:http://rewoundradio.com
icy-pub:1
content-type:audio/mpeg
icy-metaint:32768
X-Clacks-Overhead:GNU Terry Pratchett....
icy-metaint: 32768 это и есть "методанные"...
получается что в данном случае сервер передаёт поток блоками по 32768 байт.
переходим на 32768 байт...
Вложение:
метаданные.jpg [186.12 KiB]
Скачиваний: 9
вот они ! ))
а если подключатся браузером... то...
HTTP/1.0 200 OK
icy-notice1:
This stream requires <a href="http://www.winamp.com">Winamp
icy-notice2:SHOUTcast DNAS/posix(bsd) v2.4.7.256
icy-name:Rewound Radio
icy-genre:Oldies
icy-br:64
icy-url:http://rewoundradio.com
icy-pub:1
content-type:audio/mpeg
X-Clacks-Overhead:GNU Terry Pratchett....
"методанные"... нет.
пипец)) это ещё и от клиента зависит...
как у вас всё запущенно))
далее...
а где наш TLS ? ))
для начала вспомним как работает TLS... на примере телеграмм))
подключаемся...

выбираем ближайший сервер...
Telegram_Messenger_Network
149.154.167.99

предлагаем на выбор шифрование...
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
...

выбираем последний (самый свежий)... TLS_AES_256_GCM_SHA384
дальше всё стандартно... обмен ключами... сессии... и т.д.
загрузим что-нить на сервер Telegram... скачаем что-нить... нас интересует звук...

всё ясно))
далее TLS_
AES_256_GCM_SHA384
делаем AES_256 в режиме GCM... на Ардуино))
режим GCM выглядит так...

берём ардуино мега8 и для начала сделаем AES_128...

получили скорость шифрования/расшифрования 1000 байт в секунду...

но нам надо AES_256... поэтому переделываем...

получили скорость шифрования/расшифрования 700 байт в секунду...
да. на мега8 AES_256 прекрасно работает. только память закончилась))
поэтому берём мегу328. на ней AES_256 работает идеально.))
при тактовой = 16 МГц в среднем получаем шифрования/расшифрования 1600 байт в секунду... или 12 кбит/c...
но нам надо минимум 16000 байт в секунду... или 128 кбит/c...
думаем))
-можно оптимизировать программу.
-можно распараллелить процесс... на несколько ардуин)) к счастью режим GCM это потоковый шифр. ))
ну и осталось добавить RSA.
Протокол Ди́ффи-Хе́ллмана на эллиптических кривых (ECDH).
для этого надо найти где-то ещё несколько килобайт памяти))
SHA384 наверное делать не будем... открытый текст передавать не будем))
даже сертификаты проверять не будем...
наше дело подключиться к серверу... обменяться ключами... получить и расшифровать поток...
всё))
TLS 1.3 уже почти готов))
