Commit 0e1f3caf authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Drop until end of frame when writer is congested.

parent e32f911a
...@@ -388,12 +388,14 @@ type packetIndex struct { ...@@ -388,12 +388,14 @@ type packetIndex struct {
} }
func readLoop(conn *upConnection, track *upTrack) { func readLoop(conn *upConnection, track *upTrack) {
isvideo := track.track.Kind() == webrtc.RTPCodecTypeVideo
ch := make(chan packetIndex, 32) ch := make(chan packetIndex, 32)
defer close(ch) defer close(ch)
go writeLoop(conn, track, ch) go writeLoop(conn, track, ch)
buf := make([]byte, packetcache.BufSize) buf := make([]byte, packetcache.BufSize)
var packet rtp.Packet var packet rtp.Packet
drop := 0
for { for {
bytes, err := track.track.Read(buf) bytes, err := track.track.Read(buf)
if err != nil { if err != nil {
...@@ -424,11 +426,26 @@ func readLoop(conn *upConnection, track *upTrack) { ...@@ -424,11 +426,26 @@ func readLoop(conn *upConnection, track *upTrack) {
} }
} }
if drop > 0 {
if packet.Marker {
// last packet in frame
drop = 0
} else {
drop--
}
continue
}
select { select {
case ch <- packetIndex{packet.SequenceNumber, index}: case ch <- packetIndex{packet.SequenceNumber, index}:
default: default:
// The writer is congested. Drop the packet, and if isvideo {
// leave it to NACK recovery if possible. // the writer is congested. Drop until
// the end of the frame.
if isvideo && !packet.Marker {
drop = 7
}
}
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment