Packages
membrane_rtp_plugin
0.31.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/rtp/tcp_encapsulator.ex
defmodule Membrane.RTP.TCP.Encapsulator do
@moduledoc """
This element provides functionality of serializing RTP and RTCP packets into a bytestream
that can be send over TCP connection. The encapsulation is described in RFC 4571.
Packets in the stream will have the following structure:
[Length :: 2 bytes][packet :: <Length> bytes]
"""
use Membrane.Filter
alias Membrane.{Buffer, RemoteStream, RTP}
def_input_pad :input, accepted_format: %RemoteStream{type: :packetized, content_format: RTP}
def_output_pad :output, accepted_format: %RemoteStream{type: :bytestream}
@impl true
def handle_init(_ctx, _opts) do
{[], %{}}
end
@impl true
def handle_playing(_ctx, state) do
stream_format = %RemoteStream{type: :bytestream}
{[stream_format: {:output, stream_format}], state}
end
@impl true
def handle_stream_format(:input, _stream_format, _ctx, state) do
{[], state}
end
@impl true
def handle_buffer(:input, %Buffer{payload: payload, metadata: metadata}, _ctx, state) do
buffer = %Buffer{
payload: <<byte_size(payload)::size(16), payload::binary>>,
metadata: metadata
}
{[buffer: {:output, [buffer]}], state}
end
end