Packages
membrane_rtp_plugin
0.6.1
0.31.5
0.31.4
0.31.3
0.31.2
0.31.1
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.1
0.27.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.0
0.15.0-rc.1
0.14.0
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1-alpha.3
0.7.1-alpha.2
0.7.0-alpha.2
0.7.0-alpha.1
0.7.0-alpha
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0-alpha
Membrane Multimedia Framework plugin for RTP
Current section
Files
Jump to
Current section
Files
lib/membrane/rtcp/parser.ex
defmodule Membrane.RTCP.Parser do
@moduledoc """
Parses the incoming RTCP packets and sends to a parent using a notification (`t:notification_t/0`)
"""
use Membrane.Log, tag: :membrane_rtcp_parser
use Membrane.Sink
alias Membrane.{Buffer, RemoteStream, RTCP, Time}
@type notification_t() :: {:received_rtcp, RTCP.CompoundPacket.t()}
def_input_pad :input,
caps: {RemoteStream, type: :packetized, content_format: one_of([nil, RTCP])},
demand_unit: :buffers
@impl true
def handle_prepared_to_playing(_ctx, state) do
{{:ok, demand: {:input, 1}}, state}
end
@impl true
def handle_write(:input, %Buffer{payload: payload, metadata: metadata}, _ctx, state) do
arrival_ts = Map.get(metadata, :arrival_ts, Time.vm_time())
with {:ok, parsed_rtcp} <- RTCP.CompoundPacket.parse(payload) do
{{:ok, notify: {:received_rtcp, parsed_rtcp, arrival_ts}, demand: {:input, 1}}, state}
else
{:error, reason} ->
warn("Received invalid RTCP packet: #{inspect(reason)}")
{{:ok, demand: {:input, 1}}, state}
end
end
end