add VP8/VP9 limits

This commit is contained in:
aler9
2023-08-06 20:54:04 +02:00
committed by Alessandro Ros
parent 155feeb4e5
commit e6e9e84909
4 changed files with 25 additions and 15 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"time"
"github.com/bluenviron/mediacommon/pkg/codecs/vp8"
"github.com/pion/rtp"
"github.com/pion/rtp/codecs"
@@ -35,6 +36,7 @@ func joinFragments(fragments [][]byte, size int) []byte {
type Decoder struct {
timeDecoder *rtptime.Decoder
firstPacketReceived bool
fragmentsSize int
fragments [][]byte
}
@@ -65,6 +67,7 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, time.Duration, error) {
d.firstPacketReceived = true
if !pkt.Marker {
d.fragmentsSize = len(vpkt.Payload)
d.fragments = append(d.fragments, vpkt.Payload)
return nil, 0, ErrMorePacketsNeeded
}
@@ -79,18 +82,20 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, time.Duration, error) {
return nil, 0, fmt.Errorf("received a non-starting fragment")
}
d.fragmentsSize += len(vpkt.Payload)
if d.fragmentsSize > vp8.MaxFrameSize {
d.fragments = d.fragments[:0] // discard pending fragments
return nil, 0, fmt.Errorf("frame size (%d) is too big, maximum is %d", d.fragmentsSize, vp8.MaxFrameSize)
}
d.fragments = append(d.fragments, vpkt.Payload)
if !pkt.Marker {
return nil, 0, ErrMorePacketsNeeded
}
n := 0
for _, frag := range d.fragments {
n += len(frag)
}
frame = joinFragments(d.fragments, n)
frame = joinFragments(d.fragments, d.fragmentsSize)
d.fragments = d.fragments[:0]
}