fix: радио не воспроизводилось — mime в DIDL и шторм перепривязок - #35
Merged
Conversation
- добавлен грейс-период SILENCE_RESEND_GRACE в _resume_radio_if_silent: пересылка радио не чаще 15с после последней отправки, HLS успевает буферизоваться - запрещено «возобновление» радио до первой привязки потока (last_stream_sent_at == 0) - убран sleep(1) как единственный ограничитель частоты пересылок - пересылка из _restore_ruark_after_speech теперь взводит last_stream_sent_at - добавлены тесты: молчащий Ruark на радио не бомбардируется перепривязками, пересылка после грейса работает Примечание: регрессия проявилась после перехода на событийный цикл (PR #20) — сообщения станции будят цикл ежесекундно, и страховка перепривязывала поток быстрее, чем Ruark успевал стартовать.
- увеличено ожидание PLAYING в _restore_ruark_after_speech для радио: 80 попыток вместо 30, HLS буферизуется дольше прямой ссылки трека - для треков поведение не изменилось: цикл выходит раньше по факту воспроизведения
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Проблема
«Алиса, включи Рок FM» — радио не начинало играть вообще: станция играет, Ruark молчит, лог забит «🔁 Возобновляем воспроизведение радио».
Диагноз — две независимые поломки
1. Корень: регрессия mime в DIDL (с PR #28). До кодек-рефакторинга protocolInfo в DIDL-метаданных был жёстко
http-get:*:audio/mpeg:*— радио (ADTS-поток) играло под этой вывеской. PR #28 стал подставлять mime по кодеку, и радио начало объявляться какaudio/aac. Ruark такой ресурс качает, но не воспроизводит: в dlna.log видно привязку, подключение (UA NSPlayer) и 272 КБ переданных данных — без перехода в PLAYING. FLAC не задет (audio/flacRuark принимает).2. Добивало: шторм перепривязок. У радио-страховки
_resume_radio_if_silent, в отличие от трековой, не было грейс-периода. После перехода на событийный цикл (PR #20) сообщения станции будят цикл ежесекундно — страховка перепривязывала поток каждую секунду, не оставляя Ruark ни одного окна на буферизацию HLS.Что сделано
DIDL_MIME_TYPES: в protocolInfo привязки для aac-потока уходитaudio/mpeg(как до PR feat: lossless FLAC с фолбэком на MP3 #28), Content-Type ответа не меняется. Новое свойствоdidl_media_type,_reattach_ruarkиспользует его.SILENCE_RESEND_GRACE(15с) после любой отправки потока; запрещено «возобновление» до первой привязки; убранsleep(1)._restore_ruark_after_speechждёт старта радио до 80 попыток вместо 30 (HLS буферизуется дольше прямой ссылки трека); для треков поведение не изменилось. Пересылка из этого пути взводит грейс.Тесты
102 теста (+3): радио привязывается с
mime_type audio/mpegпри Content-Typeaudio/aac; молчащий Ruark на радио не бомбардируется перепривязками; пересылка после грейса работает. mypy и flake8 чистые.Проверка локально
«Алиса, включи Рок FM» → радио играет через несколько секунд; в логе dlna одна привязка
radio=true, в логе api — без ежесекундных «Возобновляем воспроизведение радио».🤖 Generated with Claude Code