Przejdź do treściARIKU://CV (PDF)

← Wszystkie projekty

cat ~/projects/vencord-av1-fix/README

vencord-AV1-fix

Wtyczka do Discorda2026wydany

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

  1. Proxy na metodach RTCPeerConnection (createOffer, createAnswer, setLocalDescription, setRemoteDescription).
  2. Filtr sekcji m=video usuwa deklaracje AV1.
  3. Iteracyjne usuwanie wpisów RTX, które przez parametr apt wskazują na usunięte formaty.
  4. 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ć.