Disable dd parser for vp8 if extension is not found (#3492)

Browser would not send dd extension for vp8 in some case even if
it is negotiated.
This commit is contained in:
cnderrauber
2025-03-06 17:20:00 +08:00
committed by GitHub
parent c3e06f0523
commit ff9115b228
2 changed files with 11 additions and 2 deletions

View File

@@ -868,7 +868,15 @@ func (b *Buffer) getExtPacket(rtpPacket *rtp.Packet, arrivalTime int64, flowStat
if b.ddParser != nil {
ddVal, videoLayer, err := b.ddParser.Parse(ep.Packet)
if err != nil {
return nil
if errors.Is(err, ErrDDExtentionNotFound) {
if b.mime == mime.MimeTypeVP8 {
b.logger.Infow("dd extension not found for vp8 packet, disable dd parser")
b.ddParser = nil
b.createFrameRateCalculator()
}
} else {
return nil
}
} else if ddVal != nil {
ep.DependencyDescriptor = ddVal
ep.VideoLayer = videoLayer

View File

@@ -30,6 +30,7 @@ import (
var (
ErrFrameEarlierThanKeyFrame = fmt.Errorf("frame is earlier than current keyframe")
ErrDDStructureAttachedToNonFirstPacket = fmt.Errorf("dependency descriptor structure is attached to non-first packet of a frame")
ErrDDExtentionNotFound = fmt.Errorf("dependency descriptor extension not found")
)
type DependencyDescriptorParser struct {
@@ -80,7 +81,7 @@ func (r *DependencyDescriptorParser) Parse(pkt *rtp.Packet) (*ExtDependencyDescr
if ddNotFoundCount%100 == 0 {
r.logger.Warnw("dependency descriptor extension is not present", nil, "seq", pkt.SequenceNumber, "count", ddNotFoundCount)
}
return nil, videoLayer, nil
return nil, videoLayer, ErrDDExtentionNotFound
}
var ddVal dd.DependencyDescriptor