MCPcopy
hub / github.com/livekit/livekit / writeRTX

Method writeRTX

pkg/sfu/buffer/buffer.go:242–275  ·  view source on GitHub ↗
(rtxPkt *rtp.Packet, arrivalTime int64)

Source from the content-addressed store, hash-verified

240}
241
242func (b *Buffer) writeRTX(rtxPkt *rtp.Packet, arrivalTime int64) {
243 b.Lock()
244 defer b.Unlock()
245 if !b.isBound {
246 return
247 }
248
249 if rtxPkt.PayloadType != b.rtxPayloadType {
250 b.logger.Debugw("unexpected rtx payload type", "expected", b.rtxPayloadType, "actual", rtxPkt.PayloadType)
251 return
252 }
253
254 if b.rtxPktBuf == nil {
255 b.rtxPktBuf = make([]byte, bucket.RTPMaxPktSize)
256 }
257
258 if len(rtxPkt.Payload) < 2 {
259 b.logger.Warnw("rtx payload too short", nil, "size", len(rtxPkt.Payload))
260 return
261 }
262
263 repairedPkt := *rtxPkt
264 repairedPkt.PayloadType = b.payloadType
265 repairedPkt.SequenceNumber = binary.BigEndian.Uint16(rtxPkt.Payload[:2])
266 repairedPkt.SSRC = b.BufferBase.SSRC()
267 repairedPkt.Payload = rtxPkt.Payload[2:]
268 n, err := repairedPkt.MarshalTo(b.rtxPktBuf)
269 if err != nil {
270 b.logger.Errorw("could not marshal repaired packet", err, "ssrc", b.BufferBase.SSRC(), "sn", repairedPkt.SequenceNumber)
271 return
272 }
273
274 b.calc(b.rtxPktBuf[:n], &repairedPkt, arrivalTime, false, true)
275}
276
277func (b *Buffer) Read(buff []byte) (n int, err error) {
278 b.Lock()

Callers 2

WriteMethod · 0.80

Calls 3

calcMethod · 0.95
SSRCMethod · 0.65
MarshalToMethod · 0.45

Tested by

no test coverage detected