MCPcopy Index your code
hub / github.com/livekit/livekit / processVideoPacket

Method processVideoPacket

pkg/sfu/buffer/buffer_base.go:1054–1178  ·  view source on GitHub ↗
(ep *ExtPacket)

Source from the content-addressed store, hash-verified

1052}
1053
1054func (b *BufferBase) processVideoPacket(ep *ExtPacket) error {
1055 if b.codecType != webrtc.RTPCodecTypeVideo {
1056 return nil
1057 }
1058
1059 ep.Temporal = 0
1060 var videoSize []codec.VideoSize
1061 if b.ddParser != nil {
1062 ddVal, videoLayer, err := b.ddParser.Parse(ep.Packet)
1063 if err != nil {
1064 if errors.Is(err, ErrDDExtentionNotFound) {
1065 if b.mime == mime.MimeTypeVP8 || b.mime == mime.MimeTypeVP9 {
1066 b.logger.Infow("dd extension not found, disable dd parser")
1067 b.ddParser = nil
1068 b.createFrameRateCalculator()
1069 }
1070 } else {
1071 return err
1072 }
1073 } else if ddVal != nil {
1074 ep.DependencyDescriptor = ddVal
1075 ep.VideoLayer = videoLayer
1076 videoSize = ExtractDependencyDescriptorVideoSize(ddVal.Descriptor)
1077 // DD-TODO : notify active decode target change if changed.
1078 }
1079 }
1080
1081 switch b.mime {
1082 case mime.MimeTypeVP8:
1083 vp8Packet := codec.VP8{}
1084 if err := vp8Packet.Unmarshal(ep.Packet.Payload); err != nil {
1085 b.logger.Warnw("could not unmarshal VP8 packet", err)
1086 return err
1087 }
1088 ep.IsKeyFrame = vp8Packet.IsKeyFrame
1089 if ep.DependencyDescriptor == nil {
1090 ep.Temporal = int32(vp8Packet.TID)
1091
1092 if ep.IsKeyFrame {
1093 if sz := codec.ExtractVP8VideoSize(&vp8Packet, ep.Packet.Payload); sz.Width > 0 && sz.Height > 0 {
1094 videoSize = append(videoSize, sz)
1095 }
1096 }
1097 } else {
1098 // vp8 with DependencyDescriptor enabled, use the TID from the descriptor
1099 vp8Packet.TID = uint8(ep.Temporal)
1100 }
1101 ep.Payload = vp8Packet
1102 ep.Spatial = InvalidLayerSpatial // vp8 don't have spatial scalability, reset to invalid
1103
1104 case mime.MimeTypeVP9:
1105 if ep.DependencyDescriptor == nil {
1106 var vp9Packet codecs.VP9Packet
1107 _, err := vp9Packet.Unmarshal(ep.Packet.Payload)
1108 if err != nil {
1109 b.logger.Warnw("could not unmarshal VP9 packet", err)
1110 return err
1111 }

Callers 1

getExtPacketMethod · 0.95

Calls 7

checkVideoSizeChangeMethod · 0.95
doFpsCalcMethod · 0.95
UpdateKeyFrameMethod · 0.80
ParseMethod · 0.45
UnmarshalMethod · 0.45

Tested by

no test coverage detected