View Source ExWebRTC.RTP.Munger (ex_webrtc v0.7.0)
RTP Munger allows for converting RTP packet timestamps and sequence numbers to a common domain.
This is useful when e.g. changing between Simulcast layers - the sender sends three separate RTP streams (also called layers or encodings), but the receiver can receive only a single RTP stream.
# assume you receive two layers: "h" (high) and "l" (low)
# and this is a GenServer
def init() do
{:ok, %{munger: Munger.new(90_000), layer: "h"}}
end
def handle_info({:ex_webrtc, _from, {:rtp, _id, rid, packet}}, state) do
if rid == state.layer do
{packet, munger} = Munger.munge(state.munger, packet)
send_packet_somewhere(packet)
{:noreply, %{state | munger: munger}}
else
{:noreply, state}
end
end
def handle_info({:change_layer, layer}, state) do
# indicate to the munger that the next packet will be from a new layer
munger = Munger.update(state.munger)
{:noreply, %{munger: munger, layer: layer}
end
Summary
Functions
Updates the RTP packet to match the common timestamp/sequence number domain.
Creates a new ExWebRTC.RTP.Munger.t/0
.
Informs the munger that the next packet passed to munge/2
will come
from a different RTP stream.
Types
@opaque t()
Functions
@spec munge(t(), ExRTP.Packet.t()) :: {ExRTP.Packet.t(), t()}
Updates the RTP packet to match the common timestamp/sequence number domain.
@spec new(non_neg_integer()) :: t()
Creates a new ExWebRTC.RTP.Munger.t/0
.
clock_rate
is the clock rate of the codec carried in munged RTP packets.
Informs the munger that the next packet passed to munge/2
will come
from a different RTP stream.