diff --git a/alias.go b/alias.go index 3e9262d..8d76a8f 100644 --- a/alias.go +++ b/alias.go @@ -92,6 +92,7 @@ func (s *Server) SetStreamAlias(ctx context.Context, req *pb.SetStreamAliasReque aliasInfo.TransferSubscribers(publisher) // replace stream aliasInfo.Publisher = publisher } else { + aliasInfo.Publisher = publisher s.Waiting.WakeUp(req.Alias, publisher) } } diff --git a/pkg/track_test.go b/pkg/track_test.go index 683e2cf..fa5a547 100644 --- a/pkg/track_test.go +++ b/pkg/track_test.go @@ -15,7 +15,7 @@ func TestTsTamer_Tame(t *testing.T) { tr := &TsTamer{} for i, tt := range tss { - if gotResult := tr.Tame(tt*time.Millisecond, 100); gotResult != wants[i]*time.Millisecond { + if gotResult := tr.Tame(tt*time.Millisecond, 100, 1.0); gotResult != wants[i]*time.Millisecond { t.Errorf("TsTamer.Tame() = %v, want %v", gotResult, wants[i]*time.Millisecond) } } diff --git a/pkg/util/collection_test.go b/pkg/util/collection_test.go index e6fdc30..fd2615c 100644 --- a/pkg/util/collection_test.go +++ b/pkg/util/collection_test.go @@ -15,10 +15,8 @@ func (n *Class) GetKey() string { return n.name } -var cc Collection[string, *Class] - func TestCollection(t *testing.T) { - + var cc Collection[string, *Class] for i := 0; i < 10; i++ { cc.Add(&Class{name: fmt.Sprintf("%d", i), Id: i}) } @@ -30,6 +28,17 @@ func TestCollection(t *testing.T) { } } +func TestCollection_Range(t *testing.T) { + var cc Collection[string, *Class] + for i := 0; i < 10; i++ { + cc.Add(&Class{name: fmt.Sprintf("%d", i), Id: i}) + } + for item := range cc.Range { + fmt.Println(item) + cc.Remove(item) + } +} + // TestItem 是用于测试的结构体 type TestItem struct { ID string diff --git a/publisher.go b/publisher.go index 45d7e38..1b33f21 100644 --- a/publisher.go +++ b/publisher.go @@ -635,13 +635,15 @@ func (p *Publisher) Dispose() { func (p *Publisher) TransferSubscribers(newPublisher *Publisher) { p.Info("transfer subscribers", "newPublisher", newPublisher.ID, "newStreamPath", newPublisher.StreamPath) + var remain SubscriberCollection for subscriber := range p.SubscriberRange { if subscriber.Type != SubscribeTypeServer { - continue + remain.Add(subscriber) + } else { + newPublisher.AddSubscriber(subscriber) } - newPublisher.AddSubscriber(subscriber) - p.Subscribers.Remove(subscriber) } + p.Subscribers = remain p.BufferTime = p.Plugin.GetCommonConf().Publish.BufferTime p.AudioTrack.SetMinBuffer(p.BufferTime) p.VideoTrack.SetMinBuffer(p.BufferTime)