Commit 564dcd41 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Move keyframe handling back to the packet level.

Doing that at the sample level suffers from too much delay
due to buffering in the samplebuilder.
parent d47c6834
...@@ -414,7 +414,7 @@ func (t *diskTrack) Write(buf []byte) (int, error) { ...@@ -414,7 +414,7 @@ func (t *diskTrack) Write(buf []byte) (int, error) {
count := p.SequenceNumber - lastSeqno count := p.SequenceNumber - lastSeqno
if count < 256 { if count < 256 {
for i := uint16(1); i < count; i++ { for i := uint16(1); i < count; i++ {
recover(t, lastSeqno + i) recover(t, lastSeqno+i)
} }
} else { } else {
requestKeyframe(t) requestKeyframe(t)
...@@ -470,6 +470,9 @@ func (t *diskTrack) writeRTP(p *rtp.Packet) error { ...@@ -470,6 +470,9 @@ func (t *diskTrack) writeRTP(p *rtp.Packet) error {
kf, _ := gcodecs.Keyframe(codec, p) kf, _ := gcodecs.Keyframe(codec, p)
if kf { if kf {
t.savedKf = p t.savedKf = p
t.lastKf = time.Now()
} else if time.Since(t.lastKf) > 4*time.Second {
requestKeyframe(t)
} }
} }
...@@ -518,7 +521,6 @@ func (t *diskTrack) writeBuffered(force bool) error { ...@@ -518,7 +521,6 @@ func (t *diskTrack) writeBuffered(force bool) error {
} }
} }
} else { } else {
keyframe = true
if t.writer == nil { if t.writer == nil {
if !t.conn.hasVideo { if !t.conn.hasVideo {
err := t.conn.initWriter(0, 0) err := t.conn.initWriter(0, 0)
...@@ -533,14 +535,6 @@ func (t *diskTrack) writeBuffered(force bool) error { ...@@ -533,14 +535,6 @@ func (t *diskTrack) writeBuffered(force bool) error {
} }
} }
now := time.Now()
if keyframe {
t.lastKf = now
} else if t.writer == nil || now.Sub(t.lastKf) > 4*time.Second {
requestKeyframe(t)
return nil
}
if t.writer == nil { if t.writer == nil {
continue continue
} }
......
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