diff --git a/go.mod b/go.mod index 0b0391f..9cfce72 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/openlibrecommunity/olcrtc go 1.26.3 require ( - codeberg.org/rape4me/kc v0.0.0-20260526155601-5f6fc8dfaaa1 + codeberg.org/rape4me/kc v0.0.0-20260527043314-71657a097a6f github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 github.com/livekit/protocol v1.46.0 diff --git a/go.sum b/go.sum index 5403756..131aebf 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,8 @@ buf.build/go/protoyaml v0.7.0/go.mod h1:+a0cavd0uMvirb87xdu2ZMMmjlIQoiH/N2Ich5MG cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -codeberg.org/rape4me/kc v0.0.0-20260526155601-5f6fc8dfaaa1 h1:OwaN5gXJoYSgdT8+LJ/1oHf+MqI+wXIizC4yIRA9UYU= -codeberg.org/rape4me/kc v0.0.0-20260526155601-5f6fc8dfaaa1/go.mod h1:ooInikVAZhJE+m+gHIekq52ZFkUPcCZAvY4u/m2M/V0= +codeberg.org/rape4me/kc v0.0.0-20260527043314-71657a097a6f h1:amyzfF9+4jCUKJndW336YHbj3FiaWs/qkJqOgUyreCA= +codeberg.org/rape4me/kc v0.0.0-20260527043314-71657a097a6f/go.mod h1:ooInikVAZhJE+m+gHIekq52ZFkUPcCZAvY4u/m2M/V0= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= diff --git a/internal/transport/videochannel/gocodec.go b/internal/transport/videochannel/gocodec.go index 144ee73..6303c64 100644 --- a/internal/transport/videochannel/gocodec.go +++ b/internal/transport/videochannel/gocodec.go @@ -1,6 +1,7 @@ package videochannel import ( + "errors" "fmt" "sync" "sync/atomic" @@ -73,6 +74,11 @@ func (d *goDecoder) PushSample(sample []byte) error { } frame, err := d.dec.Decode(sample) if err != nil { + // Inter-frame arrived before any keyframe (e.g. SFU started forwarding + // mid-GOP). Drop silently; the next keyframe will reset the reference. + if errors.Is(err, vp8.ErrNoReference) { + return nil + } return fmt.Errorf("vp8 decode: %w", err) } gray := frame.Grayscale()