import "github.com/prometheus/client_golang/prometheus"
var (
rtpPacketsReceived = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "rtp_packets_received_total",
Help: "Total RTP packets received",
},
[]string{"ssrc", "payload_type"},
)
rtpBytesReceived = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "rtp_bytes_received_total",
Help: "Total RTP bytes received",
},
[]string{"ssrc"},
)
)
func init() {
prometheus.MustRegister(rtpPacketsReceived)
prometheus.MustRegister(rtpBytesReceived)
}
type MetricsDumper struct {
interceptor.NoOp
}
func (m *MetricsDumper) BindRemoteStream(
info *interceptor.StreamInfo,
reader interceptor.RTPReader,
) interceptor.RTPReader {
return interceptor.RTPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) {
n, attr, err := reader.Read(b, a)
if err == nil && attr != nil {
header, _ := attr.GetRTPHeader(b[:n])
ssrcStr := fmt.Sprintf("%d", header.SSRC)
ptStr := fmt.Sprintf("%d", header.PayloadType)
rtpPacketsReceived.WithLabelValues(ssrcStr, ptStr).Inc()
rtpBytesReceived.WithLabelValues(ssrcStr).Add(float64(n))
}
return n, attr, err
})
}