(rtxPkt *rtp.Packet, arrivalTime int64)
| 240 | } |
| 241 | |
| 242 | func (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 | |
| 277 | func (b *Buffer) Read(buff []byte) (n int, err error) { |
| 278 | b.Lock() |
no test coverage detected