example: add skip interval
This commit is contained in:
parent
cc5d6d4cae
commit
a31aaeec9d
@ -24,6 +24,7 @@ type FrameDropper struct {
|
|||||||
lasttime time.Time
|
lasttime time.Time
|
||||||
lastpkttime time.Duration
|
lastpkttime time.Duration
|
||||||
delay 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) {
|
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 {
|
if self.skipping {
|
||||||
drop = true
|
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 {
|
if self.Interval != 0 {
|
||||||
@ -100,7 +109,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
if q := query.Get("delayskip"); q != "" {
|
if q := query.Get("delayskip"); q != "" {
|
||||||
dur, _ := time.ParseDuration(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{
|
demuxer := &pktque.FilterDemuxer{
|
||||||
Filter: filters,
|
Filter: filters,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user