Packages
membrane_rtp_plugin
0.28.0
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/feedback_packet/fir.ex
defmodule Membrane.RTCP.FeedbackPacket.FIR do
@moduledoc """
Encodes and decodes [Full Intra Request](https://datatracker.ietf.org/doc/html/rfc5104#section-4.3.1) packets.
"""
@behaviour Membrane.RTCP.FeedbackPacket
@enforce_keys [:target_ssrc, :seq_num]
defstruct @enforce_keys
@impl true
def encode(%__MODULE__{} = packet) do
<<packet.target_ssrc::32, packet.seq_num, 0::24>>
end
@impl true
def encode(packets) when is_list(packets) do
Enum.map_join(packets, &encode/1)
end
@impl true
def decode(binary) do
do_decode(binary, [])
end
defp do_decode(<<>>, acc) do
{:ok, Enum.reverse(acc)}
end
defp do_decode(<<target_ssrc::32, seq_num, 0::24, rest::binary>>, acc) do
do_decode(rest, [%__MODULE__{target_ssrc: target_ssrc, seq_num: seq_num} | acc])
end
defp do_decode(_binary, _acc) do
{:error, :malformed_packet}
end
end