Skip to content

Membrane element limiting playback speed to realtime, according to buffers' timestamps

License

Notifications You must be signed in to change notification settings

membraneframework/membrane_realtimer_plugin

Repository files navigation

Membrane Realtimer plugin

Hex.pm API Docs CircleCI

Membrane plugin for limiting playback speed to realtime, according to buffers' timestamps.

It is a part of Membrane Multimedia Framework.

Installation

The package can be installed by adding membrane_realtimer_plugin to your list of dependencies in mix.exs:

def deps do
  [
    {:membrane_realtimer_plugin, "~> 0.10.1"}
  ]
end

Usage

The following pipeline downloads a sample h264 video via HTTP and sends it in realtime via RTP. It requires RTP plugin, RTP H264 plugin and UDP plugin to work.

defmodule Example.Pipeline do
  use Membrane.Pipeline

  @ssrc 1234

  @impl true
  def handle_init(_ctx, _opts) do
    structure = [
      child(:source, %Membrane.Hackney.Source{
        location: "https://membraneframework.github.io/static/samples/ffmpeg-testsrc.h264",
        hackney_opts: [follow_redirect: true]
      })
      |> child(:parser, %Membrane.H264.FFmpeg.Parser{framerate: {30, 1}, alignment: :nal})
      |> via_in(Pad.ref(:input, @ssrc), options: [payloader: Membrane.RTP.H264.Payloader])
      |> child(:rtp, Membrane.RTP.SessionBin)
      |> via_out(Pad.ref(:rtp_output, @ssrc), options: [encoding: :H264])
      |> child(:realtimer, Membrane.Realtimer)
      |> child(:sink, %Membrane.UDP.Sink{
        destination_port_no: 5000,
        destination_address: {127, 0, 0, 1}
      })
    ]

    {[spec: structure, playback: :playing], %{}}
  end
end

Copyright and License

Copyright 2020, Software Mansion

Software Mansion

Licensed under the Apache License, Version 2.0

About

Membrane element limiting playback speed to realtime, according to buffers' timestamps

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages