Current section

Files

Jump to
membrane_hls_plugin lib membrane hls shifter.ex
Raw

lib/membrane/hls/shifter.ex

defmodule Membrane.HLS.Shifter do
use Membrane.Filter
def_input_pad(:input,
accepted_format: any_of(Membrane.H264, Membrane.AAC, Membrane.Text, Membrane.RemoteStream)
)
def_output_pad(:output,
accepted_format: any_of(Membrane.H264, Membrane.AAC, Membrane.Text, Membrane.RemoteStream)
)
def_options(
duration: [
spec: Membrane.Time.t()
]
)
def handle_init(_ctx, opts) do
{[], %{duration: opts.duration}}
end
def handle_buffer(:input, buffer, _ctx, state) do
shifted_buffer = %{
buffer
| pts: buffer.pts + state.duration,
dts: if(buffer.dts, do: buffer.dts + state.duration),
metadata: update_metadata(buffer.metadata, state.duration)
}
{[buffer: {:output, shifted_buffer}], state}
end
def update_metadata(%{to: to} = metadata, duration), do: %{metadata | to: to + duration}
def update_metadata(metadata, _duration), do: metadata
end