HAH

HAH

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

Showing Posts 1 to 3

mat-hek

mat-hek

Membrane Core Team

Hmm, it works fine for me, so I suppose it’s related to the file you’re trying to convert. Can you share it too? Or at least output from ffprobe /Users/samy/Desktop/voorstelling.mp4

HAH

HAH OP

I now know that the problem was with the file, but I find it weird because the file has the right properties, ffmpeg -i "/Users/samy/Desktop/voorstelling.mp4"

ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
  built with Apple clang version 16.0.0 (clang-1600.0.26.6)
  configuration: --prefix=/Users/samy/.local/share/mise/installs/ffmpeg/7.1
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.100 / 61. 19.100
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/samy/Desktop/voorstelling.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    creation_time   : 2024-05-06T12:16:01.000000Z
  Duration: 00:00:16.42, start: 0.000000, bitrate: 10882 kb/s
  Stream #0:0[0x1](nld): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 125 kb/s (default)
      Metadata:
        creation_time   : 2024-05-06T12:16:01.000000Z
        handler_name    : Core Media Audio
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 10672 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
      Metadata:
        creation_time   : 2024-05-06T12:16:01.000000Z
        handler_name    : Core Media Video
        vendor_id       : [0][0][0][0]`
mat-hek

mat-hek

Membrane Core Team

Yeah it looks correct, so it may be a bug in the demuxer or parser. Can you provide a full stacktrace?

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
ryanwinchester
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted” Version...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews