server: stop sending frames immediately after ServerStream.Close() is called

This commit is contained in:
aler9
2021-08-10 17:34:40 +02:00
parent 3222472021
commit c45a1b3995

View File

@@ -67,6 +67,10 @@ func (st *ServerStream) Close() error {
} }
} }
for ss := range st.readers {
ss.Close()
}
if st.multicastListeners != nil { if st.multicastListeners != nil {
for _, l := range st.multicastListeners { for _, l := range st.multicastListeners {
l.rtpListener.close() l.rtpListener.close()
@@ -75,10 +79,8 @@ func (st *ServerStream) Close() error {
st.multicastListeners = nil st.multicastListeners = nil
} }
for ss := range st.readers {
ss.Close()
}
st.readers = nil st.readers = nil
st.readersUnicast = nil
return nil return nil
} }
@@ -123,28 +125,26 @@ func (st *ServerStream) readerAdd(ss *ServerSession, isMulticast bool) error {
} }
} }
if !isMulticast || st.multicastListeners != nil { if isMulticast && st.multicastListeners == nil {
return nil st.multicastListeners = make([]*listenerPair, len(st.tracks))
}
st.multicastListeners = make([]*listenerPair, len(st.tracks)) for i := range st.tracks {
rtpListener, rtcpListener, err := newServerUDPListenerMulticastPair(st.s)
for i := range st.tracks { if err != nil {
rtpListener, rtcpListener, err := newServerUDPListenerMulticastPair(st.s) for _, l := range st.multicastListeners {
if err != nil { if l != nil {
for _, l := range st.multicastListeners { l.rtpListener.close()
if l != nil { l.rtcpListener.close()
l.rtpListener.close() }
l.rtcpListener.close()
} }
st.multicastListeners = nil
return err
} }
st.multicastListeners = nil
return err
}
st.multicastListeners[i] = &listenerPair{ st.multicastListeners[i] = &listenerPair{
rtpListener: rtpListener, rtpListener: rtpListener,
rtcpListener: rtcpListener, rtcpListener: rtcpListener,
}
} }
} }