mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
move media-related logics into serverStreamMedia
This commit is contained in:
@@ -40,7 +40,7 @@ func NewServerStream(medias media.Medias) *ServerStream {
|
|||||||
|
|
||||||
st.streamMedias = make(map[*media.Media]*serverStreamMedia, len(medias))
|
st.streamMedias = make(map[*media.Media]*serverStreamMedia, len(medias))
|
||||||
for _, media := range medias {
|
for _, media := range medias {
|
||||||
ssm := &serverStreamMedia{}
|
ssm := newServerStreamMedia(media)
|
||||||
|
|
||||||
ssm.formats = make(map[uint8]*serverStreamFormat)
|
ssm.formats = make(map[uint8]*serverStreamFormat)
|
||||||
for _, forma := range media.Formats {
|
for _, forma := range media.Formats {
|
||||||
@@ -279,13 +279,6 @@ func (st *ServerStream) WritePacketRTP(medi *media.Media, pkt *rtp.Packet) {
|
|||||||
// ntp is the absolute time of the packet, and is needed to generate RTCP sender reports
|
// ntp is the absolute time of the packet, and is needed to generate RTCP sender reports
|
||||||
// that allows the receiver to reconstruct the absolute time of the packet.
|
// that allows the receiver to reconstruct the absolute time of the packet.
|
||||||
func (st *ServerStream) WritePacketRTPWithNTP(medi *media.Media, pkt *rtp.Packet, ntp time.Time) {
|
func (st *ServerStream) WritePacketRTPWithNTP(medi *media.Media, pkt *rtp.Packet, ntp time.Time) {
|
||||||
byts := make([]byte, maxPacketSize)
|
|
||||||
n, err := pkt.MarshalTo(byts)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
byts = byts[:n]
|
|
||||||
|
|
||||||
st.mutex.RLock()
|
st.mutex.RLock()
|
||||||
defer st.mutex.RUnlock()
|
defer st.mutex.RUnlock()
|
||||||
|
|
||||||
@@ -294,23 +287,7 @@ func (st *ServerStream) WritePacketRTPWithNTP(medi *media.Media, pkt *rtp.Packet
|
|||||||
}
|
}
|
||||||
|
|
||||||
sm := st.streamMedias[medi]
|
sm := st.streamMedias[medi]
|
||||||
|
sm.WritePacketRTPWithNTP(st, pkt, ntp)
|
||||||
forma := sm.formats[pkt.PayloadType]
|
|
||||||
|
|
||||||
forma.rtcpSender.ProcessPacket(pkt, ntp, forma.format.PTSEqualsDTS(pkt))
|
|
||||||
|
|
||||||
// send unicast
|
|
||||||
for r := range st.activeUnicastReaders {
|
|
||||||
sm, ok := r.setuppedMedias[medi]
|
|
||||||
if ok {
|
|
||||||
sm.writePacketRTP(byts)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// send multicast
|
|
||||||
if sm.multicastHandler != nil {
|
|
||||||
sm.multicastHandler.writePacketRTP(byts)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WritePacketRTCP writes a RTCP packet to all the readers of the stream.
|
// WritePacketRTCP writes a RTCP packet to all the readers of the stream.
|
||||||
|
@@ -1,10 +1,25 @@
|
|||||||
package gortsplib
|
package gortsplib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/pion/rtp"
|
||||||
|
|
||||||
|
"github.com/aler9/gortsplib/v2/pkg/media"
|
||||||
|
)
|
||||||
|
|
||||||
type serverStreamMedia struct {
|
type serverStreamMedia struct {
|
||||||
|
media *media.Media
|
||||||
formats map[uint8]*serverStreamFormat
|
formats map[uint8]*serverStreamFormat
|
||||||
multicastHandler *serverMulticastHandler
|
multicastHandler *serverMulticastHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newServerStreamMedia(medi *media.Media) *serverStreamMedia {
|
||||||
|
return &serverStreamMedia{
|
||||||
|
media: medi,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (sm *serverStreamMedia) close() {
|
func (sm *serverStreamMedia) close() {
|
||||||
for _, tr := range sm.formats {
|
for _, tr := range sm.formats {
|
||||||
if tr.rtcpSender != nil {
|
if tr.rtcpSender != nil {
|
||||||
@@ -28,3 +43,29 @@ func (sm *serverStreamMedia) allocateMulticastHandler(s *Server) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sm *serverStreamMedia) WritePacketRTPWithNTP(ss *ServerStream, pkt *rtp.Packet, ntp time.Time) {
|
||||||
|
byts := make([]byte, maxPacketSize)
|
||||||
|
n, err := pkt.MarshalTo(byts)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
byts = byts[:n]
|
||||||
|
|
||||||
|
forma := sm.formats[pkt.PayloadType]
|
||||||
|
|
||||||
|
forma.rtcpSender.ProcessPacket(pkt, ntp, forma.format.PTSEqualsDTS(pkt))
|
||||||
|
|
||||||
|
// send unicast
|
||||||
|
for r := range ss.activeUnicastReaders {
|
||||||
|
sm, ok := r.setuppedMedias[sm.media]
|
||||||
|
if ok {
|
||||||
|
sm.writePacketRTP(byts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// send multicast
|
||||||
|
if sm.multicastHandler != nil {
|
||||||
|
sm.multicastHandler.writePacketRTP(byts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user