cat ~/projects/vencord-av1-fix/README
vencord-AV1-fix
Wtyczka Vencord, która usuwa kodek AV1 z negocjacji WebRTC, żeby udostępnianie ekranu w Discordzie przestało zawieszać sterowniki GPU na Linuksie.
Cel
Przy udostępnianiu ekranu i streamowaniu w Discordzie negocjacja kodeka AV1 z akceleracją sprzętową zawieszała sterownik GPU i środowisko graficzne na Linuksie.
Rozwiązanie
Wtyczka filtruje AV1 i powiązane z nim formaty RTX w opisach SDP po stronie renderera, więc połączenie wraca do stabilnych kodeków (H.264, VP8, VP9). Blokadę można wyłączyć w ustawieniach wtyczek.
Architektura
- Proxy na metodach RTCPeerConnection (createOffer, createAnswer, setLocalDescription, setRemoteDescription).
- Filtr sekcji m=video usuwa deklaracje AV1.
- Iteracyjne usuwanie wpisów RTX, które przez parametr apt wskazują na usunięte formaty.
- Czyszczenie linii a=rid z usuniętych formatów z zachowaniem simulcastu.
Decyzje techniczne
- Filtrowanie w rendererze
- Zmiana dotyczy tylko opisu SDP w API przeglądarki, bez ingerencji w natywną część klienta Discorda.
- Wyjątek zamiast pustej sekcji wideo
- Jeśli po filtrowaniu nie zostaje żaden kodek, wtyczka rzuca DOMException, zamiast wysłać linię m=video bez formatów, która zepsułaby sesję.
- Proxy zamiast nadpisywania metod
- Łańcuch wywołań zostaje nienaruszony, więc wtyczka współpracuje z innymi, które modyfikują te same metody.
Problemy i rozwiązania
- Osierocone formaty RTX psuły SDP
- RTX wskazujący na wycięty kodek powodował błąd parsowania. Zależności usuwa algorytm punktu stałego, aż nie zostanie żaden osierocony wpis.
- setLocalDescription bez argumentów
- Wywołanie bez parametrów generuje SDP wewnątrz silnika, poza filtrem. Wtyczka przechwytuje ten przypadek i najpierw jawnie tworzy ofertę albo odpowiedź, którą może przefiltrować.