example add framedrop
This commit is contained in:
parent
e2fb4a644f
commit
a9a34f7a4d
@ -4,6 +4,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
"github.com/nareix/joy4/av"
|
||||||
"github.com/nareix/joy4/format"
|
"github.com/nareix/joy4/format"
|
||||||
"github.com/nareix/joy4/av/avutil"
|
"github.com/nareix/joy4/av/avutil"
|
||||||
"github.com/nareix/joy4/av/pubsub"
|
"github.com/nareix/joy4/av/pubsub"
|
||||||
@ -15,6 +16,20 @@ func init() {
|
|||||||
format.RegisterAll()
|
format.RegisterAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FrameDropper struct {
|
||||||
|
Interval int
|
||||||
|
n int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *FrameDropper) ModifyPacket(pkt *av.Packet, streams []av.CodecData, videoidx int, audioidx int) (drop bool, err error) {
|
||||||
|
if self.Interval != 0 && self.n >= self.Interval && pkt.Idx == int8(videoidx) && !pkt.IsKeyFrame {
|
||||||
|
drop = true
|
||||||
|
self.n = 0
|
||||||
|
}
|
||||||
|
self.n++
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
server := &rtmp.Server{}
|
server := &rtmp.Server{}
|
||||||
|
|
||||||
@ -45,6 +60,11 @@ func main() {
|
|||||||
filters = append(filters, &pktque.WaitKeyFrame{})
|
filters = append(filters, &pktque.WaitKeyFrame{})
|
||||||
}
|
}
|
||||||
filters = append(filters, &pktque.FixTime{StartFromZero: true})
|
filters = append(filters, &pktque.FixTime{StartFromZero: true})
|
||||||
|
if q := query.Get("framedrop"); q != "" {
|
||||||
|
n := 0
|
||||||
|
fmt.Sscanf(q, "%d", &n)
|
||||||
|
filters = append(filters, &FrameDropper{Interval: n})
|
||||||
|
}
|
||||||
demuxer := &pktque.FilterDemuxer{
|
demuxer := &pktque.FilterDemuxer{
|
||||||
Filter: filters,
|
Filter: filters,
|
||||||
Demuxer: cursor,
|
Demuxer: cursor,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user