server: do not use StreamType

This commit is contained in:
aler9
2021-10-31 23:27:28 +01:00
committed by Alessandro Ros
parent fdb0d70870
commit e2b52d0b84
3 changed files with 40 additions and 41 deletions

View File

@@ -222,12 +222,12 @@ func (s *Server) Start() error {
return fmt.Errorf("RTP and RTCP ports must be consecutive") return fmt.Errorf("RTP and RTCP ports must be consecutive")
} }
s.udpRTPListener, err = newServerUDPListener(s, false, s.UDPRTPAddress, StreamTypeRTP) s.udpRTPListener, err = newServerUDPListener(s, false, s.UDPRTPAddress, true)
if err != nil { if err != nil {
return err return err
} }
s.udpRTCPListener, err = newServerUDPListener(s, false, s.UDPRTCPAddress, StreamTypeRTCP) s.udpRTCPListener, err = newServerUDPListener(s, false, s.UDPRTCPAddress, false)
if err != nil { if err != nil {
s.udpRTPListener.close() s.udpRTPListener.close()
return err return err

View File

@@ -146,25 +146,19 @@ func (sc *ServerConn) run() {
switch what.(type) { switch what.(type) {
case *base.InterleavedFrame: case *base.InterleavedFrame:
channel := frame.Channel channel := frame.Channel
streamType := StreamTypeRTP isRTP := true
if (channel % 2) != 0 { if (channel % 2) != 0 {
channel-- channel--
streamType = StreamTypeRTCP isRTP = false
} }
// forward frame only if it has been set up // forward frame only if it has been set up
if trackID, ok := sc.tcpSession.setuppedTracksByChannel[channel]; ok { if trackID, ok := sc.tcpSession.setuppedTracksByChannel[channel]; ok {
if isRTP {
if sc.tcpFrameIsRecording { if sc.tcpFrameIsRecording {
if streamType == StreamTypeRTP {
sc.tcpSession.announcedTracks[trackID].rtcpReceiver.ProcessPacketRTP( sc.tcpSession.announcedTracks[trackID].rtcpReceiver.ProcessPacketRTP(
time.Now(), frame.Payload) time.Now(), frame.Payload)
} else {
sc.tcpSession.announcedTracks[trackID].rtcpReceiver.ProcessPacketRTCP(
time.Now(), frame.Payload)
}
}
if streamType == StreamTypeRTP {
if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTP); ok { if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTP); ok {
h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{ h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{
Session: sc.tcpSession, Session: sc.tcpSession,
@@ -172,8 +166,14 @@ func (sc *ServerConn) run() {
Payload: frame.Payload, Payload: frame.Payload,
}) })
} }
}
} else { } else {
if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTCP); ok { if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTCP); ok {
if sc.tcpFrameIsRecording {
sc.tcpSession.announcedTracks[trackID].rtcpReceiver.ProcessPacketRTCP(
time.Now(), frame.Payload)
}
h.OnPacketRTCP(&ServerHandlerOnPacketRTCPCtx{ h.OnPacketRTCP(&ServerHandlerOnPacketRTCPCtx{
Session: sc.tcpSession, Session: sc.tcpSession,
TrackID: trackID, TrackID: trackID,

View File

@@ -54,7 +54,7 @@ type serverUDPListener struct {
wg sync.WaitGroup wg sync.WaitGroup
pc *net.UDPConn pc *net.UDPConn
listenIP net.IP listenIP net.IP
streamType StreamType isRTP bool
writeTimeout time.Duration writeTimeout time.Duration
readBuf *multibuffer.MultiBuffer readBuf *multibuffer.MultiBuffer
clientsMutex sync.RWMutex clientsMutex sync.RWMutex
@@ -72,13 +72,13 @@ func newServerUDPListenerMulticastPair(s *Server) (*serverUDPListener, *serverUD
ip := <-res ip := <-res
rtpListener, err := newServerUDPListener(s, true, rtpListener, err := newServerUDPListener(s, true,
ip.String()+":"+strconv.FormatInt(int64(s.MulticastRTPPort), 10), StreamTypeRTP) ip.String()+":"+strconv.FormatInt(int64(s.MulticastRTPPort), 10), true)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
rtcpListener, err := newServerUDPListener(s, true, rtcpListener, err := newServerUDPListener(s, true,
ip.String()+":"+strconv.FormatInt(int64(s.MulticastRTCPPort), 10), StreamTypeRTCP) ip.String()+":"+strconv.FormatInt(int64(s.MulticastRTCPPort), 10), false)
if err != nil { if err != nil {
rtpListener.close() rtpListener.close()
return nil, nil, err return nil, nil, err
@@ -91,7 +91,7 @@ func newServerUDPListener(
s *Server, s *Server,
multicast bool, multicast bool,
address string, address string,
streamType StreamType) (*serverUDPListener, error) { isRTP bool) (*serverUDPListener, error) {
var pc *net.UDPConn var pc *net.UDPConn
var listenIP net.IP var listenIP net.IP
if multicast { if multicast {
@@ -151,13 +151,12 @@ func newServerUDPListener(
pc: pc, pc: pc,
listenIP: listenIP, listenIP: listenIP,
clients: make(map[clientAddr]*clientData), clients: make(map[clientAddr]*clientData),
isRTP: isRTP,
writeTimeout: s.WriteTimeout,
readBuf: multibuffer.New(uint64(s.ReadBufferCount), uint64(s.ReadBufferSize)),
ringBuffer: ringbuffer.New(uint64(s.ReadBufferCount)),
} }
u.streamType = streamType
u.writeTimeout = s.WriteTimeout
u.readBuf = multibuffer.New(uint64(s.ReadBufferCount), uint64(s.ReadBufferSize))
u.ringBuffer = ringbuffer.New(uint64(s.ReadBufferCount))
u.wg.Add(1) u.wg.Add(1)
go u.run() go u.run()
@@ -202,18 +201,14 @@ func (u *serverUDPListener) run() {
return return
} }
if clientData.isPublishing {
now := time.Now() now := time.Now()
if clientData.isPublishing {
atomic.StoreInt64(clientData.ss.udpLastFrameTime, now.Unix()) atomic.StoreInt64(clientData.ss.udpLastFrameTime, now.Unix())
}
if u.streamType == StreamTypeRTP { if u.isRTP {
clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTP(now, buf[:n]) clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTP(now, buf[:n])
} else {
clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTCP(now, buf[:n])
}
}
if u.streamType == StreamTypeRTP {
if h, ok := u.s.Handler.(ServerHandlerOnPacketRTP); ok { if h, ok := u.s.Handler.(ServerHandlerOnPacketRTP); ok {
h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{ h.OnPacketRTP(&ServerHandlerOnPacketRTPCtx{
Session: clientData.ss, Session: clientData.ss,
@@ -222,6 +217,10 @@ func (u *serverUDPListener) run() {
}) })
} }
} else { } else {
if clientData.isPublishing {
clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTCP(now, buf[:n])
}
if h, ok := u.s.Handler.(ServerHandlerOnPacketRTCP); ok { if h, ok := u.s.Handler.(ServerHandlerOnPacketRTCP); ok {
h.OnPacketRTCP(&ServerHandlerOnPacketRTCPCtx{ h.OnPacketRTCP(&ServerHandlerOnPacketRTCPCtx{
Session: clientData.ss, Session: clientData.ss,