mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00

* split tracks from medias * move tracks into dedicated package * move media into dedicated package * edit Medias.Marshal() in order to return SDP * add medias.Find() and simplify examples * improve coverage * fix rebase errors * replace TrackIDs with MediaIDs * implement media-specific and track-specific callbacks for reading RTCP and RTP packets * rename publish into record, read into play * add v2 tag * rename tracks into formats
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package gortsplib
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/pion/rtp"
|
|
|
|
"github.com/aler9/gortsplib/v2/pkg/format"
|
|
"github.com/aler9/gortsplib/v2/pkg/rtcpreceiver"
|
|
"github.com/aler9/gortsplib/v2/pkg/rtpreorderer"
|
|
)
|
|
|
|
type serverSessionFormat struct {
|
|
sm *serverSessionMedia
|
|
format format.Format
|
|
udpReorderer *rtpreorderer.Reorderer
|
|
udpRTCPReceiver *rtcpreceiver.RTCPReceiver
|
|
onPacketRTP func(*rtp.Packet)
|
|
}
|
|
|
|
func newServerSessionFormat(sm *serverSessionMedia, trak format.Format) *serverSessionFormat {
|
|
return &serverSessionFormat{
|
|
sm: sm,
|
|
format: trak,
|
|
onPacketRTP: func(*rtp.Packet) {},
|
|
}
|
|
}
|
|
|
|
func (st *serverSessionFormat) readRTPUDP(pkt *rtp.Packet, now time.Time) {
|
|
packets, missing := st.udpReorderer.Process(pkt)
|
|
if missing != 0 {
|
|
onDecodeError(st.sm.ss, fmt.Errorf("%d RTP packet(s) lost", missing))
|
|
// do not return
|
|
}
|
|
|
|
for _, pkt := range packets {
|
|
st.udpRTCPReceiver.ProcessPacket(pkt, now, st.format.PTSEqualsDTS(pkt))
|
|
st.onPacketRTP(pkt)
|
|
}
|
|
}
|
|
|
|
func (st *serverSessionFormat) readRTPTCP(pkt *rtp.Packet) {
|
|
st.onPacketRTP(pkt)
|
|
}
|