Packages
membrane_rtc_engine
0.10.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Membrane RTC Engine and its client library
Current section
Files
Jump to
Current section
Files
lib/membrane_rtc_engine/metrics.ex
defmodule Membrane.RTC.Engine.Metrics do
@moduledoc """
Defines list of metrics, that Reporter instance can aggregate by listening on events emitted in RTC Engine.
Suggested Reporter implementation is `Membrane.TelemetryMetrics.Reporter` from `membrane_telemetry_metrics`.
`Membrane.TelemetryMetrics.Reporter` started with metrics returned by `metrics/1` function will be able to generate reports, that matches type `Membrane.RTC.Engine.Metrics.rtc_engine_report()`
You can see usage example in (`membrane_videoroom`)[github.com/membraneframework/membrane_videoroom].
"""
alias Membrane.RTC.Engine.Endpoint.WebRTC.TrackReceiver
alias Membrane.RTC.Engine.Track
@type rtc_engine_report() :: %{
optional({:room_id, binary()}) => %{
optional({:peer_id, binary()}) => %{
optional({:track_id, binary()}) => %{
:"inbound-rtp.encoding" => :OPUS | :VP8 | :H264,
:"inbound-rtp.ssrc" => integer(),
:"inbound-rtp.bytes_received" => integer(),
:"inbound-rtp.keyframe_request_sent" => integer(),
:"inbound-rtp.packets" => integer(),
:"inbound-rtp.frames" => integer(),
:"inbound-rtp.keyframes" => integer(),
:"track.metadata" => any()
},
optional({:track_id, binary()}) => %{
:"outbound-rtp.variant" => Track.variant(),
:"outbound-rtp.variant-reason" => TrackReceiver.variant_switch_reason()
},
:"ice.binding_requests_received" => integer(),
:"ice.binding_responses_sent" => integer(),
:"ice.bytes_received" => integer(),
:"ice.bytes_sent" => integer(),
:"ice.packets_received" => integer(),
:"ice.packets_sent" => integer(),
:"peer.metadata" => any()
}
}
}
@spec metrics() :: [Telemetry.Metrics.t()]
def metrics() do
Enum.concat([
rtc_engine_metrics(),
Membrane.RTP.Metrics.metrics(),
Membrane.ICE.Metrics.metrics()
])
end
defp rtc_engine_metrics() do
[
Telemetry.Metrics.sum(
"inbound-rtp.frames",
event_name: [Membrane.RTC.Engine, :RTP, :packet, :arrival],
measurement: :frame_indicator
),
Telemetry.Metrics.sum(
"inbound-rtp.keyframes",
event_name: [Membrane.RTC.Engine, :RTP, :packet, :arrival],
measurement: :keyframe_indicator
),
Telemetry.Metrics.last_value(
"outbound-rtp.variant",
event_name: [Membrane.RTC.Engine, :RTP, :variant, :switched],
measurement: :variant
),
Telemetry.Metrics.last_value(
"outbound-rtp.variant-reason",
event_name: [Membrane.RTC.Engine, :RTP, :variant, :switched],
measurement: :reason
),
Telemetry.Metrics.last_value(
"peer.bandwidth",
event_name: [Membrane.RTC.Engine, :peer, :bandwidth],
measurement: :bandwidth
),
Telemetry.Metrics.last_value(
"peer.metadata",
event_name: [Membrane.RTC.Engine, :peer, :metadata, :event],
measurement: :metadata
),
Telemetry.Metrics.last_value(
"track.metadata",
event_name: [Membrane.RTC.Engine, :track, :metadata, :event],
measurement: :metadata
)
]
end
end