From 7e804f5f9e0a6ba930cdf56310202a13c901ab73 Mon Sep 17 00:00:00 2001 From: lqq Date: Fri, 5 Jun 2020 14:21:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9C=A8feedNewGOP=E6=97=B6?= =?UTF-8?q?=E5=85=88=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E9=98=9F=E5=88=97?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=BB=A1=EF=BC=8C=E5=9C=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/logic/gop_cache.go | 10 ++--- pkg/logic/gop_cache_test.go | 90 ++++++++++++++++++------------------- pkg/logic/group.go | 8 ++-- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/pkg/logic/gop_cache.go b/pkg/logic/gop_cache.go index fc3bd65..353b8b5 100644 --- a/pkg/logic/gop_cache.go +++ b/pkg/logic/gop_cache.go @@ -106,12 +106,12 @@ func (gc *GOPCache) Feed(msg rtmp.AVMsg, lg LazyGet) { } } -func (gc *GOPCache) GetGOPLen() int { +func (gc *GOPCache) GetGOPCount() int { return (gc.gopRingLast + gc.gopSize - gc.gopRingFirst) % gc.gopSize } func (gc *GOPCache) GetGOPDataAt(pos int) [][]byte { - if pos >= gc.GetGOPLen() || pos < 0 { + if pos >= gc.GetGOPCount() || pos < 0 { return nil } return gc.gopRing[(pos+gc.gopRingFirst)%gc.gopSize].data @@ -132,12 +132,12 @@ func (gc *GOPCache) feedLastGOP(msg rtmp.AVMsg, b []byte) { } func (gc *GOPCache) feedNewGOP(msg rtmp.AVMsg, b []byte) { - gc.gopRing[gc.gopRingLast].Clear() - gc.gopRing[gc.gopRingLast].Feed(msg, b) - gc.gopRingLast = (gc.gopRingLast + 1) % gc.gopSize if gc.isGOPRingFull() { gc.gopRingFirst = (gc.gopRingFirst + 1) % gc.gopSize } + gc.gopRing[gc.gopRingLast].Clear() + gc.gopRing[gc.gopRingLast].Feed(msg, b) + gc.gopRingLast = (gc.gopRingLast + 1) % gc.gopSize } func (gc *GOPCache) isGOPRingFull() bool { diff --git a/pkg/logic/gop_cache_test.go b/pkg/logic/gop_cache_test.go index 229f121..ac236ff 100644 --- a/pkg/logic/gop_cache_test.go +++ b/pkg/logic/gop_cache_test.go @@ -50,61 +50,61 @@ func TestGOPCache_Feed(t *testing.T) { p4f := func() []byte { return []byte{0, 4} } nc := NewGOPCache("rtmp", "test", 3) - assert.Equal(t, 0, nc.GetGopLen()) - assert.Equal(t, nil, nc.GetGopDataAt(0)) - assert.Equal(t, nil, nc.GetGopDataAt(1)) - assert.Equal(t, nil, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 0, nc.GetGOPCount()) + assert.Equal(t, nil, nc.GetGOPDataAt(0)) + assert.Equal(t, nil, nc.GetGOPDataAt(1)) + assert.Equal(t, nil, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(i1, i1f) - assert.Equal(t, 1, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, nil, nc.GetGopDataAt(1)) - assert.Equal(t, nil, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 1, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, nil, nc.GetGOPDataAt(1)) + assert.Equal(t, nil, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(p1, p1f) - assert.Equal(t, 1, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, nil, nc.GetGopDataAt(1)) - assert.Equal(t, nil, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 1, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, nil, nc.GetGOPDataAt(1)) + assert.Equal(t, nil, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(i2, i2f) - assert.Equal(t, 2, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 2}}, nc.GetGopDataAt(1)) - assert.Equal(t, nil, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 2, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 2}}, nc.GetGOPDataAt(1)) + assert.Equal(t, nil, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(p2, p2f) - assert.Equal(t, 2, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGopDataAt(1)) - assert.Equal(t, nil, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 2, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGOPDataAt(1)) + assert.Equal(t, nil, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(i3, i3f) - assert.Equal(t, 3, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGopDataAt(1)) - assert.Equal(t, [][]byte{{1, 3}}, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 3, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGOPDataAt(1)) + assert.Equal(t, [][]byte{{1, 3}}, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(p3, p3f) - assert.Equal(t, 3, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGopDataAt(1)) - assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 3, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 1}, {0, 1}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGOPDataAt(1)) + assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(i4, i4f) - assert.Equal(t, 3, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGopDataAt(1)) - assert.Equal(t, [][]byte{{1, 4}}, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 3, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGOPDataAt(1)) + assert.Equal(t, [][]byte{{1, 4}}, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) nc.Feed(p4, p4f) - assert.Equal(t, 3, nc.GetGopLen()) - assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGopDataAt(0)) - assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGopDataAt(1)) - assert.Equal(t, [][]byte{{1, 4}, {0, 4}}, nc.GetGopDataAt(2)) - assert.Equal(t, nil, nc.GetGopDataAt(3)) + assert.Equal(t, 3, nc.GetGOPCount()) + assert.Equal(t, [][]byte{{1, 2}, {0, 2}}, nc.GetGOPDataAt(0)) + assert.Equal(t, [][]byte{{1, 3}, {0, 3}}, nc.GetGOPDataAt(1)) + assert.Equal(t, [][]byte{{1, 4}, {0, 4}}, nc.GetGOPDataAt(2)) + assert.Equal(t, nil, nc.GetGOPDataAt(3)) } diff --git a/pkg/logic/group.go b/pkg/logic/group.go index 154175c..c94de41 100644 --- a/pkg/logic/group.go +++ b/pkg/logic/group.go @@ -193,8 +193,8 @@ func (group *Group) broadcastRTMP(msg rtmp.AVMsg) { if group.gopCache.AACSeqHeader != nil { _ = session.AsyncWrite(group.gopCache.AACSeqHeader) } - for i := 0; i < group.gopCache.GetGopLen(); i++ { - for _, item := range group.gopCache.GetGopDataAt(i) { + for i := 0; i < group.gopCache.GetGOPCount(); i++ { + for _, item := range group.gopCache.GetGOPDataAt(i) { _ = session.AsyncWrite(item) } } @@ -218,8 +218,8 @@ func (group *Group) broadcastRTMP(msg rtmp.AVMsg) { if group.httpflvGopCache.AACSeqHeader != nil { session.WriteRawPacket(group.httpflvGopCache.AACSeqHeader) } - for i := 0; i < group.httpflvGopCache.GetGopLen(); i++ { - for _, item := range group.httpflvGopCache.GetGopDataAt(i) { + for i := 0; i < group.httpflvGopCache.GetGOPCount(); i++ { + for _, item := range group.httpflvGopCache.GetGOPDataAt(i) { session.WriteRawPacket(item) } }