# Membrane Core v1.3.1 - Table of Contents

Membrane Multimedia Framework (Core)

## Pages

- [Membrane Framework AI Skill](skill.md)
- [Membrane Framework](readme.md)
- [Packages in the Membrane ecosystem](packages_list.md)
- [Changelog](changelog.md)
- [Contributing](contributing.md)
- [License](license.md)

- Get started with Membrane
  - [Introduction](01_introduction-2.md)
  - [Pipelines](02_pipelines.md)
  - [Elements](03_elements.md)
  - [Bins](04_bins.md)
  - [Pads and linking](05_pads_and_linking.md)
  - [Flow control](06_flow_control.md)
  - [Observability and logging](07_observability_and_logging.md)
  - [Native code integration](08_native_code_integration.md)

- Useful concepts
  - [Lifecycle of Membrane Components](components_lifecycle.md)
  - [Crash Groups](crash_groups.md)
  - [Manual demands](manual_demands.md)
  - [Everything about pads](pads.md)
  - [Using Membrane in Elixir Application](running_membrane_in_elixir_application.md)
  - [Timer usage examples](timer.md)
  - [Timestamps](timestamps.md)

- Pipelines 101
  - [Introduction](01_introduction-1.md)
  - [SystemArchitecture](02_systemarchitecture.md)
  - [Source](03_source.md)
  - [StreamFormat](04_streamformat.md)
  - [Formats](05_formats.md)
  - [OrderingBuffer](06_orderingbuffer.md)
  - [Redemands](07_redemands.md)
  - [Depayloader](08_depayloader.md)
  - [Mixer](09_mixer.md)
  - [Sink](10_sink.md)
  - [Pipeline](11_pipeline.md)
  - [Bin](12_bin.md)
  - [DynamicPads](13_dynamicpads.md)
  - [Tests](14_tests.md)

- Our demos
  - [Camera feed to HLS](camera-feed-to-hls.md)
  - [Camera feed to HLS with Nerves](camera-feed-to-hls-with-nerves.md)
  - [Audio mixing](audio-mixing.md)
  - [RTMP to Adaptive Bitrate HLS](rtmp-to-adaptive-bitrate-hls.md)
  - [RTMP to HLS](rtmp-to-hls.md)
  - [RTP](rtp.md)
  - [RTP to HLS](rtp-to-hls.md)
  - [RTSP to HLS](rtsp-to-hls.md)
  - [Simple Membrane Element](simple-membrane-element.md)
  - [Simple Membrane Pipeline](simple-membrane-pipeline.md)
  - [WebRTC LiveView](webrtc-liveview.md)
  - [Mixing audio files](audio_mixer.md)
  - [Messages source and sink](messages_source_and_sink.md)
  - [OpenAI Realtime Integration with Membrane WebRTC](openai_realtime_with_membrane_webrtc.md)
  - [Playing MP3 File](playing_mp3_file.md)
  - [RTMP Receiver](rtmp_receiver.md)
  - [RTMP Sender](rtmp_sender.md)
  - [Soundwave plotting example](soundwave.md)
  - [Speech to text](speech_to_text.md)

- Packages in our ecosystem
  - [General](00_general.md)
  - [Plugins | General purpose](02_plugins_-_general_purpose.md)
  - [Plugins | AI](03_plugins_-_ai.md)
  - [Plugins | Streaming protocols](04_plugins_-_streaming_protocols.md)
  - [Plugins | Containers](05_plugins_-_containers.md)
  - [Plugins | Audio codecs](06_plugins_-_audio_codecs.md)
  - [Plugins | Video codecs](07_plugins_-_video_codecs.md)
  - [Plugins | Raw audio](08_plugins_-_raw_audio.md)
  - [Plugins | Raw video](09_plugins_-_raw_video.md)
  - [Plugins | External APIs](10_plugins_-_external_apis.md)
  - [Formats](11_formats.md)
  - [Standalone media libs](12_standalone_media_libs.md)
  - [Utils](13_utils.md)

- Creating plugins
  - [Create new plugin](create_new_plugin.md)

- Broadcasting
  - [General Introduction](01_general_introduction.md)
  - [RTMP Introduction](02_rtmp_introduction.md)
  - [RTMP Architecture](03_rtmp_architecture.md)
  - [RTMP Running The Demo](04_rtmp_running_the_demo.md)
  - [RTMP Pipeline](05_rtmp_pipeline.md)
  - [WebPlayer](06_webplayer.md)
  - [RTSP Introduction](07_rtsp_introduction.md)
  - [RTSP Architecture](08_rtsp_architecture.md)
  - [RTSP Running The Demo](09_rtsp_running_the_demo.md)
  - [RTSP Pipeline](10_rtsp_pipeline.md)
  - [Summary](11_summary.md)
  - [H264 codec](12_h264_codec.md)

- Glossary
  - [Glossary](glossary.md)

- H264
  - [Introduction](1_introduction.md)
  - [What is H264](2_what_is_h264.md)
  - [H264 NAL units](3_h264_nal_units.md)
  - [H264 stream structure](4_h264_stream_structure.md)
  - [Fetching information from stream](5_fetching_information_from_stream.md)
  - [Appendix](6_appendix.md)

- Upgrading
  - [Upgrading to v0.11](v0-11.md)
  - [Upgrading to v0.12](v0-12.md)
  - [Upgrading to v1.0.0-rc0](v1-0-0-rc0.md)
  - [Upgrading to v1.0.0-rc1](v1-0-0-rc1.md)
  - [Upgrading to v1.0.0](v1-0-0.md)

## Modules

- Pipeline
  - [Membrane.Pipeline](Membrane.Pipeline.md): A behaviour module for implementing pipelines.
  - [Membrane.Pipeline.Action](Membrane.Pipeline.Action.md): This module contains type specifications of actions that can be returned
from pipeline callbacks.
  - [Membrane.Pipeline.CallbackContext](Membrane.Pipeline.CallbackContext.md): Module describing context passed to the `Membrane.Pipeline` callbacks.

- RC Pipeline
  - [Membrane.RCMessage](Membrane.RCMessage.md): An abstract module aggregating all the messages that can be sent by the `RCPipeline`.
  - [Membrane.RCPipeline](Membrane.RCPipeline.md): Remote controlled pipeline - a basic `Membrane.Pipeline` implementation that can be remotely controlled from an external process.
  - [Membrane.RCMessage.EndOfStream](Membrane.RCMessage.EndOfStream.md): Message sent when some element of the pipeline receives the start of stream event on some pad.

  - [Membrane.RCMessage.Notification](Membrane.RCMessage.Notification.md): Message sent when the some element of the pipeline receives a notification.

  - [Membrane.RCMessage.Playing](Membrane.RCMessage.Playing.md): Message sent when the pipeline starts playing

  - [Membrane.RCMessage.StartOfStream](Membrane.RCMessage.StartOfStream.md): Message sent when some element of the pipeline receives the start of stream event on some pad.

  - [Membrane.RCMessage.Terminated](Membrane.RCMessage.Terminated.md): Message sent when the pipeline gracefully terminates.

- Bin
  - [Membrane.Bin](Membrane.Bin.md): Bins, similarly to pipelines, are containers for elements.
However, at the same time, they can be placed and linked within pipelines.
Although bin is a separate Membrane entity, it can be perceived as a pipeline within an element.
Bins can also be nested within one another.
  - [Membrane.Bin.Action](Membrane.Bin.Action.md): This module contains type specifications of actions that can be returned
from bin callbacks.
  - [Membrane.Bin.CallbackContext](Membrane.Bin.CallbackContext.md): Module describing context passed to the `Membrane.Bin` callbacks.

  - [Membrane.Bin.PadData](Membrane.Bin.PadData.md): Struct describing current pad state.

- Element
  - [Membrane.Element](Membrane.Element.md): Module containing types and functions for operating on elements.
  - [Membrane.Endpoint](Membrane.Endpoint.md): Module defining behaviour for endpoints - elements consuming and producing data.
  - [Membrane.Filter](Membrane.Filter.md): Module defining behaviour for filters - elements processing data.
  - [Membrane.Sink](Membrane.Sink.md): Module defining behaviour for sinks - elements consuming data.
  - [Membrane.Source](Membrane.Source.md): Module that should be used in sources - elements producing data. Declares
appropriate behaviours implementation and provides default callbacks implementation.
  - [Membrane.Element.Action](Membrane.Element.Action.md): This module contains type specifications of actions that can be returned
from element callbacks.
  - [Membrane.Element.Base](Membrane.Element.Base.md): Module defining behaviour common to all elements.
  - [Membrane.Element.CallbackContext](Membrane.Element.CallbackContext.md): Describes context passed to the Membrane Element callbacks.

  - [Membrane.Element.PadData](Membrane.Element.PadData.md): Struct describing current pad state.
  - [Membrane.Element.WithInputPads](Membrane.Element.WithInputPads.md): Module defining behaviour for sink, filter and endpoint elements.
  - [Membrane.Element.WithOutputPads](Membrane.Element.WithOutputPads.md): Module defining behaviour for source and filter elements.

- Helper Elements
  - [Membrane.Connector](Membrane.Connector.md): Membrane Filter with input and output dynamic pads, that forwards incoming data to the opposite
side than the one from which it came.
  - [Membrane.Debug.Filter](Membrane.Debug.Filter.md): Membrane Filter, that can be used to create a child that will be used to debug data flowing thouth pipeline.
  - [Membrane.Debug.Sink](Membrane.Debug.Sink.md): Membrane Sink, that can be used to create a child that will be used to debug data flowing thouth pipeline.
  - [Membrane.Fake.Sink](Membrane.Fake.Sink.md): Membrane Sink that ignores incoming data.
  - [Membrane.FilterAggregator](Membrane.FilterAggregator.md): An element allowing to aggregate many filters within one Elixir process.
  - [Membrane.Funnel](Membrane.Funnel.md): Element that can be used for collecting data from multiple inputs and sending it through one
output.
  - [Membrane.Funnel.NewInputEvent](Membrane.Funnel.NewInputEvent.md): Event sent each time new element is linked (via funnel input pad) after playing pipeline.

  - [Membrane.Tee](Membrane.Tee.md): Element for forwarding buffers to at least one output pad

- Parent
  - [Membrane.ChildrenSpec](Membrane.ChildrenSpec.md): A module with functionalities that allow to represent a topology of a pipeline/bin.

- Child
  - [Membrane.Child](Membrane.Child.md): Module that keeps track of types used by both elements and bins

  - [Membrane.ChildEntry](Membrane.ChildEntry.md): Struct describing child entry of a parent.

- Communication
  - [Membrane.Buffer](Membrane.Buffer.md): Structure representing a single chunk of data that flows between elements.
  - [Membrane.ChildNotification](Membrane.ChildNotification.md): A child notification is a message sent from `Membrane.Element` or `Membrane.Bin` to a parent
via action `t:Membrane.Element.Action.notify_parent` or `t:Membrane.Bin.Action.notify_parent`
returned from any callback.
  - [Membrane.Event](Membrane.Event.md): Represents a communication event, capable of flowing both downstream and upstream.
  - [Membrane.EventProtocol](Membrane.EventProtocol.md): Protocol that allows to configure behaviour of `Membrane.Event`s.
  - [Membrane.KeyframeRequestEvent](Membrane.KeyframeRequestEvent.md): Generic event for requesting a key frame.
  - [Membrane.Pad](Membrane.Pad.md): Pads are units defined by elements and bins, allowing them to be linked with their
siblings. This module consists of pads typespecs and utils.
  - [Membrane.ParentNotification](Membrane.ParentNotification.md): A parent notification is a message sent from `Membrane.Parent` or `Membrane.Bin` to a child
via action `t:Membrane.Pipeline.Action.notify_parent` or `t:Membrane.Bin.Action.notify_child`
returned from any callback.
  - [Membrane.Payload](Membrane.Payload.md): This protocol describes actions common to all payload types.
  - [Membrane.RemoteStream](Membrane.RemoteStream.md): Format describing an unparsed data stream. It should be used whenever outputting
or accepting an unknown stream (not to be confused with _any_ stream, which
can have well-specified format either), or a stream whose format can't/shouldn't
be created at that stage.
  - [Membrane.StreamFormat](Membrane.StreamFormat.md): Defines the capabilities of a pad within the Membrane framework.
  - [Membrane.Buffer.Metric](Membrane.Buffer.Metric.md): Specifies the type for demand units.
  - [Membrane.Buffer.Metric.ByteSize](Membrane.Buffer.Metric.ByteSize.md): Implementation of `Membrane.Buffer.Metric` for the `:bytes` unit.
  - [Membrane.Buffer.Metric.Count](Membrane.Buffer.Metric.Count.md): Implementation of `Membrane.Buffer.Metric` for the `:buffers` unit.
  - [Membrane.Event.Discontinuity](Membrane.Event.Discontinuity.md): Generic discontinuity event.
  - [Membrane.Event.Underrun](Membrane.Event.Underrun.md): Generic underrun event.
  - [Membrane.EventProtocol.DefaultImpl](Membrane.EventProtocol.DefaultImpl.md): Default implementation of `Membrane.EventProtocol`.
  - [Membrane.Payload.Behaviour](Membrane.Payload.Behaviour.md): Behaviour that should be implemented by every module that has
`Membrane.Payload` protocol implementation.

  - [Membrane.Payload.Binary](Membrane.Payload.Binary.md): `Membrane.Payload.Behaviour` implementation for binary payload.
Complements `Membrane.Payload` protocol implementation.

- Logging
  - [Membrane.Logger](Membrane.Logger.md): Wrapper around the Elixir logger. Adds Membrane prefixes and handles verbose logging.

- Telemetry
  - [Membrane.Telemetry](Membrane.Telemetry.md): Defines basic telemetry event types used by Membrane's Core.

- Testing
  - [Membrane.Testing.Assertions](Membrane.Testing.Assertions.md): This module contains a set of assertion functions and macros.
  - [Membrane.Testing.DynamicSource](Membrane.Testing.DynamicSource.md): Testing Element for supplying data based on generator function or payloads passed
through options. It is very similar to `Membrane.Testing.Source` but is has dynamic
pad instead of static.
  - [Membrane.Testing.Endpoint](Membrane.Testing.Endpoint.md)
  - [Membrane.Testing.Event](Membrane.Testing.Event.md): Empty event that can be used in tests

  - [Membrane.Testing.MockResourceGuard](Membrane.Testing.MockResourceGuard.md): Mock for `Membrane.ResourceGuard`.
  - [Membrane.Testing.Pipeline](Membrane.Testing.Pipeline.md): This Pipeline was created to reduce testing boilerplate and ease communication
with its children. It also provides a utility for informing testing process about
playback changes and received notifications.
  - [Membrane.Testing.Sink](Membrane.Testing.Sink.md): Sink Element that notifies the pipeline about buffers and events it receives.
  - [Membrane.Testing.Source](Membrane.Testing.Source.md): Testing Element for supplying data based on generator function or payloads passed
through options.

- Utils
  - [Membrane.Clock](Membrane.Clock.md): Clock is a Membrane utility that allows elements to measure time according to
a particular clock, which can be e.g. a soundcard hardware clock.
  - [Membrane.ComponentPath](Membrane.ComponentPath.md): A list consisting of following pipeline/bin/element names down the assembled pipeline.
  - [Membrane.Playback](Membrane.Playback.md): Playback defines whether media is processed within a pipeline (`:playing`) or not (`:stopped`).
  - [Membrane.ResourceGuard](Membrane.ResourceGuard.md): Utility for handling resources that must be cleaned up after use.
  - [Membrane.Sync](Membrane.Sync.md): Sync allows to synchronize multiple processes, so that they could perform their
jobs at the same time.
  - [Membrane.Time](Membrane.Time.md): Module containing functions needed to perform handling of time.
  - [Membrane.UtilitySupervisor](Membrane.UtilitySupervisor.md): A supervisor responsible for managing utility processes under the pipeline's
supervision tree.

- Errors
  - [Membrane.ActionError](Membrane.ActionError.md)
  - [Membrane.BinError](Membrane.BinError.md)
  - [Membrane.CallbackError](Membrane.CallbackError.md)
  - [Membrane.ElementError](Membrane.ElementError.md)
  - [Membrane.LinkError](Membrane.LinkError.md)
  - [Membrane.PadDirectionError](Membrane.PadDirectionError.md)
  - [Membrane.PadError](Membrane.PadError.md)
  - [Membrane.ParentError](Membrane.ParentError.md)
  - [Membrane.PipelineError](Membrane.PipelineError.md)
  - [Membrane.SetupError](Membrane.SetupError.md)
  - [Membrane.StreamFormatError](Membrane.StreamFormatError.md)
  - [Membrane.TimerError](Membrane.TimerError.md)
  - [Membrane.UnknownChildError](Membrane.UnknownChildError.md)
  - [Membrane.UnknownPadError](Membrane.UnknownPadError.md)

## Mix Tasks

- [mix membrane.demo](Mix.Tasks.Membrane.Demo.md): Download Membrane demos and examples. Requires `git` installed.
- [mix membrane.gen](Mix.Tasks.Membrane.Gen.md): Lists all available Membrane component generators
- [mix membrane.gen.bin](Mix.Tasks.Membrane.Gen.Bin.md): Generates a template for a Membrane Bin with the provided module name.
- [mix membrane.gen.endpoint](Mix.Tasks.Membrane.Gen.Endpoint.md): Generates a template for a Membrane Endpoint with the provided module name.
- [mix membrane.gen.filter](Mix.Tasks.Membrane.Gen.Filter.md): Generates a template for a Membrane Filter with the provided module name.
- [mix membrane.gen.pipeline](Mix.Tasks.Membrane.Gen.Pipeline.md): Generates a template for a Membrane Pipeline with the provided module name.
- [mix membrane.gen.sink](Mix.Tasks.Membrane.Gen.Sink.md): Generates a template for a Membrane Sink with the provided module name.
- [mix membrane.gen.source](Mix.Tasks.Membrane.Gen.Source.md): Generates a template for a Membrane Source with the provided module name.

