example: add skip interval

This commit is contained in:
nareix 2016-07-17 21:02:24 +08:00
parent cc5d6d4cae
commit a31aaeec9d

View File

@ -24,6 +24,7 @@ type FrameDropper struct {
lasttime time.Time
lastpkttime time.Duration
delay time.Duration
SkipInterval int
}
func (self *FrameDropper) ModifyPacket(pkt *av.Packet, streams []av.CodecData, videoidx int, audioidx int) (drop bool, err error) {
@ -50,6 +51,14 @@ func (self *FrameDropper) ModifyPacket(pkt *av.Packet, streams []av.CodecData, v
if self.skipping {
drop = true
}
if self.SkipInterval != 0 && pkt.IsKeyFrame {
if self.n == self.SkipInterval {
self.n = 0
self.skipping = true
}
self.n++
}
}
if self.Interval != 0 {
@ -100,7 +109,13 @@ func main() {
}
if q := query.Get("delayskip"); q != "" {
dur, _ := time.ParseDuration(q)
filters = append(filters, &FrameDropper{DelaySkip: dur})
skipper := &FrameDropper{DelaySkip: dur}
if q := query.Get("skipinterval"); q != "" {
n := 0
fmt.Sscanf(q, "%d", &n)
skipper.SkipInterval = n
}
filters = append(filters, skipper)
}
demuxer := &pktque.FilterDemuxer{
Filter: filters,