Packages
membrane_rtp_plugin
0.4.0-alpha
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/timestamper.ex
defmodule Membrane.RTP.Timestamper do
use Membrane.Filter
use Membrane.Log, tags: :timestamper
def_input_pad :input, demand_unit: :buffers, caps: :any
def_output_pad :output, caps: :any
def_options resolution: [], init_timestamp: [default: nil]
@impl true
def handle_init(opts) do
{:ok, opts |> Map.from_struct()}
end
@impl true
def handle_demand(:output, size, :buffers, _ctx, state) do
{{:ok, demand: {:input, size}}, state}
end
@impl true
def handle_process(:input, buffer, _ctx, state) do
use Ratio
rtp_timestamp = buffer.metadata.rtp.timestamp
{init_timestamp, state} =
Bunch.Map.get_updated!(state, :init_timestamp, &(&1 || rtp_timestamp))
timestamp = (rtp_timestamp - init_timestamp) * state.resolution
buffer = Bunch.Struct.put_in(buffer, [:metadata, :timestamp], timestamp)
{{:ok, buffer: {:output, buffer}}, state}
end
end