fix audio web

This commit is contained in:
2026-03-05 21:15:34 +03:00
parent 7521a46bbc
commit 5934098b73
3 changed files with 115 additions and 88 deletions
+17 -1
View File
@@ -42,6 +42,22 @@ unit WebServer;
дескриптора не прерывает блокирующий fpAccept/fpRecv в чужом потоке
только shutdown(SHUT_RDWR) гарантированно разблокирует их, позволяя
потокам выйти и WaitFor завершиться без зависания.
- (Audio fix 1) Исправлена константа OPUS_APPLICATION_AUDIO: было 2101
(невалидное значение), стало 2049 правильное значение. Неверная
константа приводила к Err!=0 из opus_encoder_create, FOpusEnc=nil,
FOpusReady=false аудио не кодировалось совсем.
- (Audio fix 2) Заголовки COOP/COEP убраны они блокировали WebSocket
и загрузку CDN ресурсов (fonts, opus-decoder), из-за чего
FWebClientActive никогда не становился true и десктоп звук не
отключался при подключении веб-клиента.
- (Audio fix 3) В JS исправлен вызов декодера: decodeFrame decode
(актуальный API opus-decoder@0.7.7). decodeFrame не существует в этой
версии silent fail, звука нет.
- (Audio fix 4) Добавлен оверлей "Click to start audio" AudioContext
нельзя создать из WebSocket callback (не user gesture). Оверлей
гарантирует создание AudioContext при первом кликe пользователя.
- (Audio fix 5) Буферизация Opus-пакетов пока WASM не инициализирован
первые пакеты больше не теряются при медленной загрузке CDN.
}
{$IFDEF FPC}
@@ -375,7 +391,7 @@ begin
end;
FOpusEnc := FOpusCreate(OPUS_SAMPLE_RATE, OPUS_CHANNELS,
2101 {OPUS_APPLICATION_AUDIO}, @Err);
2049 {OPUS_APPLICATION_AUDIO}, @Err);
if (FOpusEnc = nil) or (Err <> 0) then
begin
FreeLibrary(FOpusLib); FOpusLib := 0; Exit;