Im trying to create a project with membrane to convert an mp4-file to an hsl. I get this error message:
[error] Mp4ToHls/:parser_audio Error occured in Membrane Element:
** (MatchError) no match of right hand side value: <<64, 20, 0, 24, 0, 0, 1, 244, 0, 0, 1, 244, 0, 5, 128, 128, 128, 2, 17, 144>>
defmodule Mp4ToHls do
use Membrane.Pipeline
require Logger
@input_file "/Users/samy/Desktop/voorstelling.mp4"
@output_dir "output"
def start_link(opts \\ []) do
Membrane.Pipeline.start_link(__MODULE__, opts, name: __MODULE__)
end
@impl true
def handle_init(_ctx, _opts) do
File.rm_rf!(@output_dir)
File.mkdir!(@output_dir)
spec = [
child(:source, %Membrane.File.Source{
location: @input_file
})
|> child(:demuxer, Membrane.MP4.Demuxer.ISOM),
get_child(:demuxer)
|> via_out(:output, options: [kind: :video])
|> child(:parser_video, %Membrane.H264.Parser{output_stream_structure: :annexb})
|> via_in(Pad.ref(:input, :video),
options: [encoding: :H264, segment_duration: Membrane.Time.seconds(4)]
)
|> get_child(:hls),
get_child(:demuxer)
|> via_out(:output, options: [kind: :audio])
|> child(:parser_audio, %Membrane.AAC.Parser{})
|> via_in(Pad.ref(:input, :audio),
options: [encoding: :AAC, segment_duration: Membrane.Time.seconds(4)]
)
|> get_child(:hls),
child(:hls, %Membrane.HTTPAdaptiveStream.SinkBin{
manifest_module: Membrane.HTTPAdaptiveStream.HLS,
target_window_duration: Membrane.Time.seconds(15),
storage: %Membrane.HTTPAdaptiveStream.Storages.FileStorage{directory: @output_dir}
})
]
{[spec: spec], %{}}
end
@impl true
def handle_child_notification({:track_playable, _track_info}, :hls, _context, state) do
Logger.info("HLS playlist is ready.")
send(:script, :playlist_ready)
{[], state}
end
@impl true
def handle_child_notification(notification, _element, _ctx, state) do
Logger.debug("Notification received: #{inspect(notification)}")
{[], state}
end
end