Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Playing video and audio from files

examples/video_and_audio.livemd

Playing video and audio from files

File.cd(__DIR__)
Logger.configure(level: :warning)

Mix.install([
  {:membrane_core, "~> 1.0"},
  {:membrane_kino_plugin, path: ".."},
  {:membrane_file_plugin, "~> 0.17.0"},
  {:membrane_mp4_plugin, "~> 0.35.0"},
  {:membrane_aac_plugin, "~> 0.18.1"},
  {:membrane_h26x_plugin, "~> 0.10.2"}
])

Pipeline definition

import Membrane.ChildrenSpec

alias Membrane.{
  File,
  RawVideo,
  Kino
}

alias Membrane.H264

alias Membrane.{
  AAC,
  H264,
  RCPipeline
}

video_filepath = "./res/input_baseline.h264"
audio_filepath = "./res/input.aac"

kino = Kino.Player.new(video: true, audio: true)

structure = [
  child({:file_input, :h264}, %File.Source{location: video_filepath})
  |> child({:parser, :h264}, %H264.Parser{generate_best_effort_timestamps: %{framerate: {60, 1}}})
  |> via_in(:video)
  |> get_child(:video_player),
  child({:file_input, :aac}, %File.Source{location: audio_filepath})
  |> child({:parser, :aac}, AAC.Parser)
  |> via_in(:audio)
  |> get_child(:video_player),
  child(:video_player, %Kino.Player.Sink{kino: kino})
]

:ok

Playing pipeline

pipeline = RCPipeline.start!()
RCPipeline.exec_actions(pipeline, spec: structure)
kino