mirror of
https://github.com/jech/galene.git
synced 2024-11-14 04:35:57 +01:00
Resize packet cache dynamically.
This commit is contained in:
parent
b00d2abacf
commit
ce7f3670bc
1 changed files with 26 additions and 3 deletions
29
webclient.go
29
webclient.go
|
@ -366,7 +366,7 @@ func addUpConn(c *webClient, id string) (*upConnection, error) {
|
||||||
track := &upTrack{
|
track := &upTrack{
|
||||||
track: remote,
|
track: remote,
|
||||||
label: label,
|
label: label,
|
||||||
cache: packetcache.New(96),
|
cache: packetcache.New(32),
|
||||||
rate: estimator.New(time.Second),
|
rate: estimator.New(time.Second),
|
||||||
jitter: jitter.New(remote.Codec().ClockRate),
|
jitter: jitter.New(remote.Codec().ClockRate),
|
||||||
maxBitrate: ^uint64(0),
|
maxBitrate: ^uint64(0),
|
||||||
|
@ -975,11 +975,12 @@ func handleReport(track *rtpDownTrack, report rtcp.ReceptionReport, jiffies uint
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateUpBitrate(up *upConnection, maxVideoRate uint64) {
|
func updateUpTrack(up *upConnection, maxVideoRate uint64) {
|
||||||
now := rtptime.Jiffies()
|
now := rtptime.Jiffies()
|
||||||
|
|
||||||
for _, track := range up.tracks {
|
for _, track := range up.tracks {
|
||||||
isvideo := track.track.Kind() == webrtc.RTPCodecTypeVideo
|
isvideo := track.track.Kind() == webrtc.RTPCodecTypeVideo
|
||||||
|
clockrate := track.track.Codec().ClockRate
|
||||||
minrate := uint64(minAudioRate)
|
minrate := uint64(minAudioRate)
|
||||||
rate := ^uint64(0)
|
rate := ^uint64(0)
|
||||||
if isvideo {
|
if isvideo {
|
||||||
|
@ -990,6 +991,7 @@ func updateUpBitrate(up *upConnection, maxVideoRate uint64) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
local := track.getLocal()
|
local := track.getLocal()
|
||||||
|
var maxrto uint64
|
||||||
for _, l := range local {
|
for _, l := range local {
|
||||||
bitrate := l.GetMaxBitrate(now)
|
bitrate := l.GetMaxBitrate(now)
|
||||||
if bitrate == ^uint64(0) {
|
if bitrate == ^uint64(0) {
|
||||||
|
@ -1002,8 +1004,29 @@ func updateUpBitrate(up *upConnection, maxVideoRate uint64) {
|
||||||
if rate > bitrate {
|
if rate > bitrate {
|
||||||
rate = bitrate
|
rate = bitrate
|
||||||
}
|
}
|
||||||
|
ll, ok := l.(*rtpDownTrack)
|
||||||
|
if ok {
|
||||||
|
_, j := ll.stats.Get(now)
|
||||||
|
jitter := uint64(j) *
|
||||||
|
(rtptime.JiffiesPerSec /
|
||||||
|
uint64(clockrate))
|
||||||
|
rtt := atomic.LoadUint64(&ll.rtt)
|
||||||
|
rto := rtt + 4*jitter
|
||||||
|
if rto > maxrto {
|
||||||
|
maxrto = rto
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
track.maxBitrate = rate
|
track.maxBitrate = rate
|
||||||
|
_, r := track.rate.Estimate()
|
||||||
|
packets := int((uint64(r) * maxrto * 4) / rtptime.JiffiesPerSec)
|
||||||
|
if packets < 32 {
|
||||||
|
packets = 32
|
||||||
|
}
|
||||||
|
if packets > 256 {
|
||||||
|
packets = 256
|
||||||
|
}
|
||||||
|
track.cache.ResizeCond(packets)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1690,7 +1713,7 @@ func sendRateUpdate(c *webClient) {
|
||||||
|
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
for _, u := range c.up {
|
for _, u := range c.up {
|
||||||
updateUpBitrate(u, maxVideoRate)
|
updateUpTrack(u, maxVideoRate)
|
||||||
for _, t := range u.tracks {
|
for _, t := range u.tracks {
|
||||||
if !t.hasRtcpFb("goog-remb", "") {
|
if !t.hasRtcpFb("goog-remb", "") {
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in a new issue