mirror of
https://github.com/aler9/gortsplib
synced 2025-10-07 16:10:59 +08:00
send receiver reports only after receiving a sender report
This commit is contained in:
@@ -465,8 +465,10 @@ func (c *Client) run() {
|
||||
now := time.Now()
|
||||
for trackID, cct := range c.tracks {
|
||||
rr := cct.rtcpReceiver.Report(now)
|
||||
if rr != nil {
|
||||
c.WritePacketRTCP(trackID, rr)
|
||||
}
|
||||
}
|
||||
|
||||
c.udpReportTimer = time.NewTimer(c.udpReceiverReportPeriod)
|
||||
} else { // Record
|
||||
|
@@ -52,10 +52,16 @@ func New(receiverSSRC *uint32, clockRate int) *RTCPReceiver {
|
||||
}
|
||||
|
||||
// Report generates a RTCP receiver report.
|
||||
// It returns nil if no RTCP sender reports have been passed to ProcessPacketRTCP yet.
|
||||
func (rr *RTCPReceiver) Report(ts time.Time) []byte {
|
||||
rr.mutex.Lock()
|
||||
defer rr.mutex.Unlock()
|
||||
|
||||
var zero time.Time
|
||||
if rr.lastSenderReportTime == zero {
|
||||
return nil
|
||||
}
|
||||
|
||||
report := &rtcp.ReceiverReport{
|
||||
SSRC: rr.receiverSSRC,
|
||||
Reports: []rtcp.ReceptionReport{
|
||||
|
@@ -13,6 +13,8 @@ func TestRTCPReceiverBase(t *testing.T) {
|
||||
v := uint32(0x65f83afb)
|
||||
rr := New(&v, 90000)
|
||||
|
||||
require.Equal(t, []byte(nil), rr.Report(time.Now()))
|
||||
|
||||
srPkt := rtcp.SenderReport{
|
||||
SSRC: 0xba9da416,
|
||||
NTPTime: 0xe363887a17ced916,
|
||||
|
@@ -12,6 +12,8 @@ import (
|
||||
func TestRTCPSender(t *testing.T) {
|
||||
rs := New(90000)
|
||||
|
||||
require.Equal(t, []byte(nil), rs.Report(time.Now()))
|
||||
|
||||
rtpPkt := rtp.Packet{
|
||||
Header: rtp.Header{
|
||||
Version: 2,
|
||||
|
@@ -1167,6 +1167,19 @@ func TestServerPublishRTCPReport(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
byts, _ = (&rtcp.SenderReport{
|
||||
SSRC: 753621,
|
||||
NTPTime: 0xcbddcc34999997ff,
|
||||
RTPTime: 54352,
|
||||
PacketCount: 1,
|
||||
OctetCount: 4,
|
||||
}).Marshal()
|
||||
_, err = l2.WriteTo(byts, &net.UDPAddr{
|
||||
IP: net.ParseIP("127.0.0.1"),
|
||||
Port: th.ServerPorts[1],
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// skip firewall opening
|
||||
buf := make([]byte, 2048)
|
||||
_, _, err = l2.ReadFrom(buf)
|
||||
|
@@ -324,8 +324,10 @@ func (ss *ServerSession) run() {
|
||||
now := time.Now()
|
||||
|
||||
for trackID, track := range ss.announcedTracks {
|
||||
r := track.rtcpReceiver.Report(now)
|
||||
ss.WritePacketRTCP(trackID, r)
|
||||
rr := track.rtcpReceiver.Report(now)
|
||||
if rr != nil {
|
||||
ss.WritePacketRTCP(trackID, rr)
|
||||
}
|
||||
}
|
||||
|
||||
ss.udpReceiverReportTimer = time.NewTimer(ss.s.udpReceiverReportPeriod)
|
||||
|
Reference in New Issue
Block a user