golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
package rtcpsenderset |
|
|
|
import ( |
|
"time" |
|
|
|
"github.com/aler9/gortsplib" |
|
"github.com/aler9/gortsplib/pkg/rtcpsender" |
|
"github.com/pion/rtcp" |
|
"github.com/pion/rtp/v2" |
|
) |
|
|
|
// RTCPSenderSet is a set of RTCP senders. |
|
type RTCPSenderSet struct { |
|
writePacketRTCP func(int, rtcp.Packet) |
|
senders []*rtcpsender.RTCPSender |
|
|
|
// in |
|
terminate chan struct{} |
|
|
|
// out |
|
done chan struct{} |
|
} |
|
|
|
// New allocates a RTCPSenderSet. |
|
func New( |
|
tracks gortsplib.Tracks, |
|
writePacketRTCP func(int, rtcp.Packet), |
|
) *RTCPSenderSet { |
|
s := &RTCPSenderSet{ |
|
writePacketRTCP: writePacketRTCP, |
|
terminate: make(chan struct{}), |
|
done: make(chan struct{}), |
|
} |
|
|
|
s.senders = make([]*rtcpsender.RTCPSender, len(tracks)) |
|
for i, track := range tracks { |
|
ci := i |
|
|
|
s.senders[i] = rtcpsender.New(10*time.Second, |
|
track.ClockRate(), func(pkt rtcp.Packet) { |
|
writePacketRTCP(ci, pkt) |
|
}) |
|
} |
|
|
|
return s |
|
} |
|
|
|
// Close closes a RTCPSenderSet. |
|
func (s *RTCPSenderSet) Close() { |
|
for _, sender := range s.senders { |
|
sender.Close() |
|
} |
|
} |
|
|
|
// OnPacketRTP sends a RTP packet to the senders. |
|
func (s *RTCPSenderSet) OnPacketRTP(trackID int, pkt *rtp.Packet) { |
|
s.senders[trackID].ProcessPacketRTP(time.Now(), pkt) |
|
}
|
|
|