Sample listeners chan (#33)

* switch to sample listeners.

* add streamsink total bytes to metrics.

* on rtcp to chan.

* change logs.

* streamsink add real bitrate.

* add timing information to sample.

* bitrate buckets.

* switch to WriteSample.
This commit is contained in:
Miroslav Šedivý
2023-03-07 00:08:53 +01:00
committed by GitHub
parent 38fc21aabc
commit 17bfd2d58f
5 changed files with 178 additions and 72 deletions

View File

@ -321,8 +321,13 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, bitrate int,
videoAuto = false
}
videoRtcp := make(chan []rtcp.Packet, 1)
// video track
videoTrack, err := NewTrack(logger, videoCodec, connection, WithVideoAuto(videoAuto))
videoTrack, err := NewTrack(logger, videoCodec, connection,
WithVideoAuto(videoAuto),
WithRtcpChan(videoRtcp),
)
if err != nil {
return nil, err
}
@ -570,7 +575,9 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, bitrate int,
if err = video.RemoveReceiver(videoTrack); err != nil {
logger.Err(err).Msg("failed to remove video receiver")
}
audioTrack.RemoveStream()
audioTrack.Shutdown()
videoTrack.Shutdown()
close(videoRtcp)
}
manager.metrics.SetState(session, state)
@ -651,17 +658,24 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, bitrate int,
})
})
videoTrack.OnRTCP(func(packets []rtcp.Packet) {
for _, p := range packets {
if rtcpPacket, ok := p.(*rtcp.ReceiverReport); ok {
l := len(rtcpPacket.Reports)
if l > 0 {
// use only last report
manager.metrics.SetReceiverReport(session, rtcpPacket.Reports[l-1])
go func() {
for {
packets, ok := <-videoRtcp
if !ok {
break
}
for _, p := range packets {
if rtcpPacket, ok := p.(*rtcp.ReceiverReport); ok {
l := len(rtcpPacket.Reports)
if l > 0 {
// use only last report
manager.metrics.SetReceiverReport(session, rtcpPacket.Reports[l-1])
}
}
}
}
})
}()
go func() {
ticker := time.NewTicker(5 * time.Second)