View Source Membrane H264 Plugin
THIS PACKAGE HAS BEEN MOVED
Please use membrane_h26x_plugin.
Membrane H264 parser. It is the Membrane element responsible for parsing the incoming H264 stream. The parsing is done as a sequence of the following steps:
- splitting the H264 stream into stream NAL units, based on the "Annex B" of the "ITU-T Rec. H.264 (01/2012)" or length prefix defined in "ISO/IEC 14496-10"
- Parsing the NAL unit headers, so that to read the type of the NAL unit
- Parsing the NAL unit body with the appropriate scheme, based on the NAL unit type read in the step before
- Aggregating the NAL units into a stream of access units
The output of the element is the incoming binary payload, enriched with the metadata describing the division of the payload into access units.
It is part of Membrane Multimedia Framework.
Installation
The package can be installed by adding membrane_h264_plugin
to your list of dependencies in mix.exs
:
def deps do
[
{:membrane_h264_plugin, "~> 0.9.3"}
]
end
Usage
The following pipeline takes H264 file, parses it, and then decodes it to the raw video.
defmodule Decoding.Pipeline do
use Membrane.Pipeline
alias Membrane.{File, H264}
@impl true
def handle_init(_ctx, _opts) do
spec =
child(:source, %File.Source{location: "test/fixtures/input-10-720p-main.h264"})
|> child(:parser, H264.Parser)
|> child(:decoder, H264.FFmpeg.Decoder)
|> child(:sink, %File.Sink{location: "output.raw"})
{[spec: spec], nil}
end
@impl true
def handle_element_end_of_stream(:sink, _ctx_, state) do
{[terminate: :normal], state}
end
end
Copyright and License
Copyright 2022, Software Mansion
Licensed under the Apache License, Version 2.0