mirror of
https://github.com/jech/galene.git
synced 2024-11-22 16:45:58 +01:00
Maintain full time information from sender reports.
This commit is contained in:
parent
a6db6b105d
commit
5b92226860
2 changed files with 31 additions and 24 deletions
5
conn.go
5
conn.go
|
@ -33,14 +33,15 @@ type upTrack struct {
|
||||||
lastPLI uint64
|
lastPLI uint64
|
||||||
lastFIR uint64
|
lastFIR uint64
|
||||||
firSeqno uint32
|
firSeqno uint32
|
||||||
lastSenderReport uint32
|
|
||||||
lastSenderReportTime uint32
|
|
||||||
|
|
||||||
localCh chan localTrackAction // signals that local has changed
|
localCh chan localTrackAction // signals that local has changed
|
||||||
writerDone chan struct{} // closed when the loop dies
|
writerDone chan struct{} // closed when the loop dies
|
||||||
|
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
local []downTrack
|
local []downTrack
|
||||||
|
srTime uint64
|
||||||
|
srNTPTime uint64
|
||||||
|
srRTPTime uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (up *upTrack) notifyLocal(add bool, track downTrack) {
|
func (up *upTrack) notifyLocal(add bool, track downTrack) {
|
||||||
|
|
28
webclient.go
28
webclient.go
|
@ -558,10 +558,11 @@ func rtcpUpListener(conn *upConnection, track *upTrack, r *webrtc.RTPReceiver) {
|
||||||
for _, p := range ps {
|
for _, p := range ps {
|
||||||
switch p := p.(type) {
|
switch p := p.(type) {
|
||||||
case *rtcp.SenderReport:
|
case *rtcp.SenderReport:
|
||||||
atomic.StoreUint32(&track.lastSenderReport,
|
track.mu.Lock()
|
||||||
uint32(p.NTPTime>>16))
|
track.srTime = mono.Now(0x10000)
|
||||||
atomic.StoreUint32(&track.lastSenderReportTime,
|
track.srNTPTime = p.NTPTime
|
||||||
uint32(mono.Now(0x10000)))
|
track.srRTPTime = p.RTPTime
|
||||||
|
track.mu.Unlock()
|
||||||
case *rtcp.SourceDescription:
|
case *rtcp.SourceDescription:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -573,7 +574,7 @@ func sendRR(conn *upConnection) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
now := uint32(mono.Now(0x10000))
|
now := mono.Now(0x10000)
|
||||||
|
|
||||||
reports := make([]rtcp.ReceptionReport, 0, len(conn.tracks))
|
reports := make([]rtcp.ReceptionReport, 0, len(conn.tracks))
|
||||||
for _, t := range conn.tracks {
|
for _, t := range conn.tracks {
|
||||||
|
@ -584,10 +585,15 @@ func sendRR(conn *upConnection) error {
|
||||||
if lost >= expected {
|
if lost >= expected {
|
||||||
lost = expected - 1
|
lost = expected - 1
|
||||||
}
|
}
|
||||||
lastSR := atomic.LoadUint32(&t.lastSenderReport)
|
|
||||||
var delay uint32
|
t.mu.Lock()
|
||||||
if lastSR != 0 {
|
srTime := t.srTime
|
||||||
delay = now - atomic.LoadUint32(&t.lastSenderReportTime)
|
srNTPTime := t.srNTPTime
|
||||||
|
t.mu.Unlock()
|
||||||
|
|
||||||
|
var delay uint64
|
||||||
|
if srNTPTime != 0 {
|
||||||
|
delay = now - srTime
|
||||||
}
|
}
|
||||||
|
|
||||||
reports = append(reports, rtcp.ReceptionReport{
|
reports = append(reports, rtcp.ReceptionReport{
|
||||||
|
@ -596,8 +602,8 @@ func sendRR(conn *upConnection) error {
|
||||||
TotalLost: totalLost,
|
TotalLost: totalLost,
|
||||||
LastSequenceNumber: eseqno,
|
LastSequenceNumber: eseqno,
|
||||||
Jitter: t.jitter.Jitter(),
|
Jitter: t.jitter.Jitter(),
|
||||||
LastSenderReport: lastSR,
|
LastSenderReport: uint32(srNTPTime >> 16),
|
||||||
Delay: delay,
|
Delay: uint32(delay),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue