mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
1. Add live benchmark support in srs-bench, which only connects and disconnects without any media transport, to test source creation and disposal and verify source memory leaks. 2. SmartPtr: Support cleanup of HTTP-FLV stream. Unregister the HTTP-FLV handler for the pattern and clean up the objects and resources. 3. Support benchmarking RTMP/SRT with srs-bench by integrating the gosrt and oryx RTMP libraries. 4. Refine SRT and RTC sources by using a timer to clean up the sources, following the same strategy as the Live source. --------- Co-authored-by: Haibo Chen <495810242@qq.com> Co-authored-by: Jacob Su <suzp1984@gmail.com>
188 lines
8.7 KiB
Go
188 lines
8.7 KiB
Go
package srtgo
|
|
|
|
// #cgo LDFLAGS: -lsrt
|
|
// #include <srt/srt.h>
|
|
import "C"
|
|
|
|
type SrtStats struct {
|
|
// Global measurements
|
|
MsTimeStamp int64 // time since the UDT entity is started, in milliseconds
|
|
PktSentTotal int64 // total number of sent data packets, including retransmissions
|
|
PktRecvTotal int64 // total number of received packets
|
|
PktSndLossTotal int // total number of lost packets (sender side)
|
|
PktRcvLossTotal int // total number of lost packets (receiver side)
|
|
PktRetransTotal int // total number of retransmitted packets
|
|
PktSentACKTotal int // total number of sent ACK packets
|
|
PktRecvACKTotal int // total number of received ACK packets
|
|
PktSentNAKTotal int // total number of sent NAK packets
|
|
PktRecvNAKTotal int // total number of received NAK packets
|
|
UsSndDurationTotal int64 // total time duration when UDT is sending data (idle time exclusive)
|
|
|
|
PktSndDropTotal int // number of too-late-to-send dropped packets
|
|
PktRcvDropTotal int // number of too-late-to play missing packets
|
|
PktRcvUndecryptTotal int // number of undecrypted packets
|
|
ByteSentTotal int64 // total number of sent data bytes, including retransmissions
|
|
ByteRecvTotal int64 // total number of received bytes
|
|
ByteRcvLossTotal int64 // total number of lost bytes
|
|
|
|
ByteRetransTotal int64 // total number of retransmitted bytes
|
|
ByteSndDropTotal int64 // number of too-late-to-send dropped bytes
|
|
ByteRcvDropTotal int64 // number of too-late-to play missing bytes (estimate based on average packet size)
|
|
ByteRcvUndecryptTotal int64 // number of undecrypted bytes
|
|
|
|
// Local measurements
|
|
PktSent int64 // number of sent data packets, including retransmissions
|
|
PktRecv int64 // number of received packets
|
|
PktSndLoss int // number of lost packets (sender side)
|
|
PktRcvLoss int // number of lost packets (receiver side)
|
|
PktRetrans int // number of retransmitted packets
|
|
PktRcvRetrans int // number of retransmitted packets received
|
|
PktSentACK int // number of sent ACK packets
|
|
PktRecvACK int // number of received ACK packets
|
|
PktSentNAK int // number of sent NAK packets
|
|
PktRecvNAK int // number of received NAK packets
|
|
MbpsSendRate float64 // sending rate in Mb/s
|
|
MbpsRecvRate float64 // receiving rate in Mb/s
|
|
UsSndDuration int64 // busy sending time (i.e., idle time exclusive)
|
|
PktReorderDistance int // size of order discrepancy in received sequences
|
|
PktRcvAvgBelatedTime float64 // average time of packet delay for belated packets (packets with sequence past the ACK)
|
|
PktRcvBelated int64 // number of received AND IGNORED packets due to having come too late
|
|
|
|
PktSndDrop int // number of too-late-to-send dropped packets
|
|
PktRcvDrop int // number of too-late-to play missing packets
|
|
PktRcvUndecrypt int // number of undecrypted packets
|
|
ByteSent int64 // number of sent data bytes, including retransmissions
|
|
ByteRecv int64 // number of received bytes
|
|
|
|
ByteRcvLoss int64 // number of retransmitted Bytes
|
|
ByteRetrans int64 // number of retransmitted Bytes
|
|
ByteSndDrop int64 // number of too-late-to-send dropped Bytes
|
|
ByteRcvDrop int64 // number of too-late-to play missing Bytes (estimate based on average packet size)
|
|
ByteRcvUndecrypt int64 // number of undecrypted bytes
|
|
|
|
// Instant measurements
|
|
UsPktSndPeriod float64 // packet sending period, in microseconds
|
|
PktFlowWindow int // flow window size, in number of packets
|
|
PktCongestionWindow int // congestion window size, in number of packets
|
|
PktFlightSize int // number of packets on flight
|
|
MsRTT float64 // RTT, in milliseconds
|
|
MbpsBandwidth float64 // estimated bandwidth, in Mb/s
|
|
ByteAvailSndBuf int // available UDT sender buffer size
|
|
ByteAvailRcvBuf int // available UDT receiver buffer size
|
|
|
|
MbpsMaxBW float64 // Transmit Bandwidth ceiling (Mbps)
|
|
ByteMSS int // MTU
|
|
|
|
PktSndBuf int // UnACKed packets in UDT sender
|
|
ByteSndBuf int // UnACKed bytes in UDT sender
|
|
MsSndBuf int // UnACKed timespan (msec) of UDT sender
|
|
MsSndTsbPdDelay int // Timestamp-based Packet Delivery Delay
|
|
|
|
PktRcvBuf int // Undelivered packets in UDT receiver
|
|
ByteRcvBuf int // Undelivered bytes of UDT receiver
|
|
MsRcvBuf int // Undelivered timespan (msec) of UDT receiver
|
|
MsRcvTsbPdDelay int // Timestamp-based Packet Delivery Delay
|
|
|
|
PktSndFilterExtraTotal int // number of control packets supplied by packet filter
|
|
PktRcvFilterExtraTotal int // number of control packets received and not supplied back
|
|
PktRcvFilterSupplyTotal int // number of packets that the filter supplied extra (e.g. FEC rebuilt)
|
|
PktRcvFilterLossTotal int // number of packet loss not coverable by filter
|
|
|
|
PktSndFilterExtra int // number of control packets supplied by packet filter
|
|
PktRcvFilterExtra int // number of control packets received and not supplied back
|
|
PktRcvFilterSupply int // number of packets that the filter supplied extra (e.g. FEC rebuilt)
|
|
PktRcvFilterLoss int // number of packet loss not coverable by filter
|
|
PktReorderTolerance int // packet reorder tolerance value
|
|
}
|
|
|
|
func newSrtStats(stats *C.SRT_TRACEBSTATS) *SrtStats {
|
|
s := new(SrtStats)
|
|
|
|
s.MsTimeStamp = int64(stats.msTimeStamp)
|
|
s.PktSentTotal = int64(stats.pktSentTotal)
|
|
s.PktRecvTotal = int64(stats.pktRecvTotal)
|
|
s.PktSndLossTotal = int(stats.pktSndLossTotal)
|
|
s.PktRcvLossTotal = int(stats.pktRcvLossTotal)
|
|
s.PktRetransTotal = int(stats.pktRetransTotal)
|
|
s.PktSentACKTotal = int(stats.pktSentACKTotal)
|
|
s.PktRecvACKTotal = int(stats.pktRecvACKTotal)
|
|
s.PktSentNAKTotal = int(stats.pktSentNAKTotal)
|
|
s.PktRecvNAKTotal = int(stats.pktRecvNAKTotal)
|
|
s.UsSndDurationTotal = int64(stats.usSndDurationTotal)
|
|
|
|
s.PktSndDropTotal = int(stats.pktSndDropTotal)
|
|
s.PktRcvDropTotal = int(stats.pktRcvDropTotal)
|
|
s.PktRcvUndecryptTotal = int(stats.pktRcvUndecryptTotal)
|
|
s.ByteSentTotal = int64(stats.byteSentTotal)
|
|
s.ByteRecvTotal = int64(stats.byteRecvTotal)
|
|
s.ByteRcvLossTotal = int64(stats.byteRcvLossTotal)
|
|
|
|
s.ByteRetransTotal = int64(stats.byteRetransTotal)
|
|
s.ByteSndDropTotal = int64(stats.byteSndDropTotal)
|
|
s.ByteRcvDropTotal = int64(stats.byteRcvDropTotal)
|
|
s.ByteRcvUndecryptTotal = int64(stats.byteRcvUndecryptTotal)
|
|
|
|
s.PktSent = int64(stats.pktSent)
|
|
s.PktRecv = int64(stats.pktRecv)
|
|
s.PktSndLoss = int(stats.pktSndLoss)
|
|
s.PktRcvLoss = int(stats.pktRcvLoss)
|
|
s.PktRetrans = int(stats.pktRetrans)
|
|
s.PktRcvRetrans = int(stats.pktRcvRetrans)
|
|
s.PktSentACK = int(stats.pktSentACK)
|
|
s.PktRecvACK = int(stats.pktRecvACK)
|
|
s.PktSentNAK = int(stats.pktSentNAK)
|
|
s.PktRecvNAK = int(stats.pktRecvNAK)
|
|
s.MbpsSendRate = float64(stats.mbpsSendRate)
|
|
s.MbpsRecvRate = float64(stats.mbpsRecvRate)
|
|
s.UsSndDuration = int64(stats.usSndDuration)
|
|
s.PktReorderDistance = int(stats.pktReorderDistance)
|
|
s.PktRcvAvgBelatedTime = float64(stats.pktRcvAvgBelatedTime)
|
|
s.PktRcvBelated = int64(stats.pktRcvBelated)
|
|
|
|
s.PktSndDrop = int(stats.pktSndDrop)
|
|
s.PktRcvDrop = int(stats.pktRcvDrop)
|
|
s.PktRcvUndecrypt = int(stats.pktRcvUndecrypt)
|
|
s.ByteSent = int64(stats.byteSent)
|
|
s.ByteRecv = int64(stats.byteRecv)
|
|
|
|
s.ByteRcvLoss = int64(stats.byteRcvLoss)
|
|
s.ByteRetrans = int64(stats.byteRetrans)
|
|
s.ByteSndDrop = int64(stats.byteSndDrop)
|
|
s.ByteRcvDrop = int64(stats.byteRcvDrop)
|
|
s.ByteRcvUndecrypt = int64(stats.byteRcvUndecrypt)
|
|
|
|
s.UsPktSndPeriod = float64(stats.usPktSndPeriod)
|
|
s.PktFlowWindow = int(stats.pktFlowWindow)
|
|
s.PktCongestionWindow = int(stats.pktCongestionWindow)
|
|
s.PktFlightSize = int(stats.pktFlightSize)
|
|
s.MsRTT = float64(stats.msRTT)
|
|
s.MbpsBandwidth = float64(stats.mbpsBandwidth)
|
|
s.ByteAvailSndBuf = int(stats.byteAvailSndBuf)
|
|
s.ByteAvailRcvBuf = int(stats.byteAvailRcvBuf)
|
|
|
|
s.MbpsMaxBW = float64(stats.mbpsMaxBW)
|
|
s.ByteMSS = int(stats.byteMSS)
|
|
|
|
s.PktSndBuf = int(stats.pktSndBuf)
|
|
s.ByteSndBuf = int(stats.byteSndBuf)
|
|
s.MsSndBuf = int(stats.msSndBuf)
|
|
s.MsSndTsbPdDelay = int(stats.msSndTsbPdDelay)
|
|
|
|
s.PktRcvBuf = int(stats.pktRcvBuf)
|
|
s.ByteRcvBuf = int(stats.byteRcvBuf)
|
|
s.MsRcvBuf = int(stats.msRcvBuf)
|
|
s.MsRcvTsbPdDelay = int(stats.msRcvTsbPdDelay)
|
|
|
|
s.PktSndFilterExtraTotal = int(stats.pktSndFilterExtraTotal)
|
|
s.PktRcvFilterExtraTotal = int(stats.pktRcvFilterExtraTotal)
|
|
s.PktRcvFilterSupplyTotal = int(stats.pktRcvFilterSupplyTotal)
|
|
s.PktRcvFilterLossTotal = int(stats.pktRcvFilterLossTotal)
|
|
|
|
s.PktSndFilterExtra = int(stats.pktSndFilterExtra)
|
|
s.PktRcvFilterExtra = int(stats.pktRcvFilterExtra)
|
|
s.PktRcvFilterSupply = int(stats.pktRcvFilterSupply)
|
|
s.PktRcvFilterLoss = int(stats.pktRcvFilterLoss)
|
|
s.PktReorderTolerance = int(stats.pktReorderTolerance)
|
|
|
|
return s
|
|
}
|