Created by: ykmn
Summary
- Браузерное прослушивание (
▶ ) раньше на каждый HTTP-запрос создавало собственныйPlayoutBufferиз сырого потока и прогревало его заново — каждый клик▶ заново ждал полную задержку прогрева (до 12+с на HLS, 2с на Livewire), даже если канал уже давно работал и его метр давно прогрет. -
PlayoutBufferтеперь поддерживает несколько одновременных подписчиков (Subscribe/Unsubscribe, fan-out вReleaseDue(), по образцу уже существующего вFfmpegPipedCapture) — метр и любое число слушателей прослушивания делят один и тот же уже прогретый, уже синхронизированный по времени поток; поздний подписчик получает только будущие чанки, без довесков уже выданных. -
AudioStreamEndpointподключается к общему буферизованному потоку канала вместо создания своего; диагностический watchdog «буфер не прогрелся» разделён на две независимые проверки. - Побочный эффект: звук прослушивания и индикатор теперь буквально один и тот же поток (раньше — два независимо прогретых буфера с одинаковой целевой задержкой, но без гарантии синхронности).
Test plan
-
dotnet build— чисто -
dotnet test— 249/249 зелёных (4 новых теста на мультиподписку: два подписчика получают один поток, поздний подписчик не получает довесков,Unsubscribeостанавливает доставку только для отписавшегося,Stop()завершает все подписанные reader'ы)