From 6e9391ad93ffa6e318c7de01189eb55e2f18f259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kita?= Date: Wed, 18 Dec 2024 12:46:52 +0100 Subject: [PATCH 1/2] Add simple mpeg_ts_hls_example --- mpeg_ts_hls/.formatter.exs | 4 ++ mpeg_ts_hls/.gitignore | 26 +++++++++ mpeg_ts_hls/README.md | 21 ++++++++ mpeg_ts_hls/fixtures/mpeg-ts/stream.m3u8 | 5 ++ .../fixtures/mpeg-ts/stream_416x234.m3u8 | 16 ++++++ .../00000/stream_416x234_00001.ts | 1 + .../00000/stream_416x234_00002.ts | 1 + .../00000/stream_416x234_00003.ts | 1 + .../00000/stream_416x234_00004.ts | 1 + .../00000/stream_416x234_00005.ts | 1 + mpeg_ts_hls/lib/pipeline.ex | 54 +++++++++++++++++++ mpeg_ts_hls/lib/reader.ex | 16 ++++++ mpeg_ts_hls/mix.exs | 28 ++++++++++ mpeg_ts_hls/mix.lock | 29 ++++++++++ mpeg_ts_hls/script.exs | 6 +++ mpeg_ts_hls/test/hls_example_test.exs | 8 +++ mpeg_ts_hls/test/test_helper.exs | 1 + 17 files changed, 219 insertions(+) create mode 100644 mpeg_ts_hls/.formatter.exs create mode 100644 mpeg_ts_hls/.gitignore create mode 100644 mpeg_ts_hls/README.md create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream.m3u8 create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234.m3u8 create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00001.ts create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00002.ts create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00003.ts create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00004.ts create mode 100644 mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00005.ts create mode 100644 mpeg_ts_hls/lib/pipeline.ex create mode 100644 mpeg_ts_hls/lib/reader.ex create mode 100644 mpeg_ts_hls/mix.exs create mode 100644 mpeg_ts_hls/mix.lock create mode 100644 mpeg_ts_hls/script.exs create mode 100644 mpeg_ts_hls/test/hls_example_test.exs create mode 100644 mpeg_ts_hls/test/test_helper.exs diff --git a/mpeg_ts_hls/.formatter.exs b/mpeg_ts_hls/.formatter.exs new file mode 100644 index 00000000..d2cda26e --- /dev/null +++ b/mpeg_ts_hls/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/mpeg_ts_hls/.gitignore b/mpeg_ts_hls/.gitignore new file mode 100644 index 00000000..7a51a397 --- /dev/null +++ b/mpeg_ts_hls/.gitignore @@ -0,0 +1,26 @@ +# The directory Mix will write compiled artifacts to. +/_build/ + +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# Where third-party dependencies like ExDoc output generated docs. +/doc/ + +# Ignore .fetch files in case you like to edit your project deps locally. +/.fetch + +# If the VM crashes, it generates a dump, let's ignore it too. +erl_crash.dump + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Ignore package tarball (built via "mix hex.build"). +hls_example-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/mpeg_ts_hls/README.md b/mpeg_ts_hls/README.md new file mode 100644 index 00000000..4c53da0c --- /dev/null +++ b/mpeg_ts_hls/README.md @@ -0,0 +1,21 @@ +# HlsExample + +**TODO: Add description** + +## Installation + +If [available in Hex](https://hex.pm/docs/publish), the package can be installed +by adding `hls_example` to your list of dependencies in `mix.exs`: + +```elixir +def deps do + [ + {:hls_example, "~> 0.1.0"} + ] +end +``` + +Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) +and published on [HexDocs](https://hexdocs.pm). Once published, the docs can +be found at . + diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream.m3u8 b/mpeg_ts_hls/fixtures/mpeg-ts/stream.m3u8 new file mode 100644 index 00000000..41644140 --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=334400,AVERAGE-BANDWIDTH=325600,CODECS="avc1.42c01e,mp4a.40.2",RESOLUTION=416x234,FRAME-RATE=15.000 +stream_416x234.m3u8 diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234.m3u8 b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234.m3u8 new file mode 100644 index 00000000..3d5a3d3d --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234.m3u8 @@ -0,0 +1,16 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-TARGETDURATION:6 +#EXT-X-MEDIA-SEQUENCE:1 +#EXT-X-PLAYLIST-TYPE:VOD +#EXTINF:6.00000, +stream_416x234/00000/stream_416x234_00001.ts +#EXTINF:6.00000, +stream_416x234/00000/stream_416x234_00002.ts +#EXTINF:6.00000, +stream_416x234/00000/stream_416x234_00003.ts +#EXTINF:6.00000, +stream_416x234/00000/stream_416x234_00004.ts +#EXTINF:6.00000, +stream_416x234/00000/stream_416x234_00005.ts +#EXT-X-ENDLIST diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00001.ts b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00001.ts new file mode 100644 index 00000000..f1be44ed --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00001.ts @@ -0,0 +1 @@ +stream_416x234_00001.ts diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00002.ts b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00002.ts new file mode 100644 index 00000000..beae501c --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00002.ts @@ -0,0 +1 @@ +stream_416x234_00002.ts diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00003.ts b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00003.ts new file mode 100644 index 00000000..5a16eb9d --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00003.ts @@ -0,0 +1 @@ +stream_416x234_00003.ts diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00004.ts b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00004.ts new file mode 100644 index 00000000..1e44b489 --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00004.ts @@ -0,0 +1 @@ +stream_416x234_00004.ts diff --git a/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00005.ts b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00005.ts new file mode 100644 index 00000000..f00f2650 --- /dev/null +++ b/mpeg_ts_hls/fixtures/mpeg-ts/stream_416x234/00000/stream_416x234_00005.ts @@ -0,0 +1 @@ +stream_416x234_00005.ts diff --git a/mpeg_ts_hls/lib/pipeline.ex b/mpeg_ts_hls/lib/pipeline.ex new file mode 100644 index 00000000..aa4a7c3b --- /dev/null +++ b/mpeg_ts_hls/lib/pipeline.ex @@ -0,0 +1,54 @@ +defmodule HLSPipeline do + use Membrane.Pipeline + + alias Membrane.HLS.Source + alias HLS.Playlist.Master + + @master_playlist_uri URI.new!("./fixtures/mpeg-ts/stream.m3u8") + + @impl true + def handle_init(_ctx, opts) do + structure = child(:source, %Source{reader: %Reader{}, master_playlist_uri: @master_playlist_uri}) + + {[spec: structure], opts} + end + + @impl true + def handle_child_notification({:hls_master_playlist, master}, :source, _ctx, state) do + stream = + master + |> Master.variant_streams() + |> Enum.at(0) # we always choose stream variant 0 here + + + + case stream do + nil -> + {[], state} + + stream -> + structure = [ + get_child(:source) + |> via_out(Pad.ref(:output, {:rendition, stream})) + |> child(:sink, Membrane.Debug.Sink) + ] + + {[{:spec, structure}], state} + end + end + + @impl true + def handle_child_notification(_msg, _child, _ctx, state) do + {[], state} + end + + @impl true + def handle_element_end_of_stream(:sink, :input, _ctx, state) do + {[terminate: :normal], state} + end + + @impl true + def handle_element_end_of_stream(_element, _pad, _ctx, state) do + {[], state} + end +end diff --git a/mpeg_ts_hls/lib/reader.ex b/mpeg_ts_hls/lib/reader.ex new file mode 100644 index 00000000..c713fc59 --- /dev/null +++ b/mpeg_ts_hls/lib/reader.ex @@ -0,0 +1,16 @@ +defmodule Reader do + defstruct [] +end + +defimpl Membrane.HLS.Reader, for: Reader do + @impl true + def read(_, %URI{path: path}, _), do: File.read(path) + + @impl true + def exists?(_, %URI{path: path}) do + case File.stat(path) do + {:ok, _} -> true + {:error, _} -> false + end + end +end diff --git a/mpeg_ts_hls/mix.exs b/mpeg_ts_hls/mix.exs new file mode 100644 index 00000000..45d32978 --- /dev/null +++ b/mpeg_ts_hls/mix.exs @@ -0,0 +1,28 @@ +defmodule HlsExample.MixProject do + use Mix.Project + + def project do + [ + app: :hls_example, + version: "0.1.0", + elixir: "~> 1.17", + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger] + ] + end + + # Run "mix help deps" to learn about dependencies. + defp deps do + [ + {:membrane_hls_plugin, github: "kim-company/membrane_hls_plugin"}, + {:membrane_file_plugin, "~> 0.17.0"} + ] + end +end diff --git a/mpeg_ts_hls/mix.lock b/mpeg_ts_hls/mix.lock new file mode 100644 index 00000000..d2fff1da --- /dev/null +++ b/mpeg_ts_hls/mix.lock @@ -0,0 +1,29 @@ +%{ + "bimap": {:hex, :bimap, "1.3.0", "3ea4832e58dc83a9b5b407c6731e7bae87458aa618e6d11d8e12114a17afa4b3", [:mix], [], "hexpm", "bf5a2b078528465aa705f405a5c638becd63e41d280ada41e0f77e6d255a10b4"}, + "bunch": {:hex, :bunch, "1.6.1", "5393d827a64d5f846092703441ea50e65bc09f37fd8e320878f13e63d410aec7", [:mix], [], "hexpm", "286cc3add551628b30605efbe2fca4e38cc1bea89bcd0a1a7226920b3364fe4a"}, + "coerce": {:hex, :coerce, "1.0.1", "211c27386315dc2894ac11bc1f413a0e38505d808153367bd5c6e75a4003d096", [:mix], [], "hexpm", "b44a691700f7a1a15b4b7e2ff1fa30bebd669929ac8aa43cffe9e2f8bf051cf1"}, + "heap": {:hex, :heap, "2.0.2", "d98cb178286cfeb5edbcf17785e2d20af73ca57b5a2cf4af584118afbcf917eb", [:mix], [], "hexpm", "ba9ea2fe99eb4bcbd9a8a28eaf71cbcac449ca1d8e71731596aace9028c9d429"}, + "kim_hls": {:git, "https://github.com/kim-company/kim_hls.git", "7353e348546d8c0094b9412240e6a34bc77ac915", []}, + "kim_q": {:hex, :kim_q, "1.0.0", "17cfc45e9f7e65485f0f31bbf09893d6ff35cc2fbefc39aed146a3c29740584e", [:mix], [{:qex, "~> 0.5", [hex: :qex, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7a8ee76a2c2e774c34345df3c7a234a8effeedc3f3aea845feb7c09030097278"}, + "kim_subtitle": {:git, "https://github.com/kim-company/kim_subtitle.git", "8239e1bcea938167829a6b8bd2a9678c63c7bdd4", []}, + "logger_backends": {:hex, :logger_backends, "1.0.0", "09c4fad6202e08cb0fbd37f328282f16539aca380f512523ce9472b28edc6bdf", [:mix], [], "hexpm", "1faceb3e7ec3ef66a8f5746c5afd020e63996df6fd4eb8cdb789e5665ae6c9ce"}, + "membrane_aac_format": {:hex, :membrane_aac_format, "0.8.0", "515631eabd6e584e0e9af2cea80471fee6246484dbbefc4726c1d93ece8e0838", [:mix], [{:bimap, "~> 1.1", [hex: :bimap, repo: "hexpm", optional: false]}], "hexpm", "a30176a94491033ed32be45e51d509fc70a5ee6e751f12fd6c0d60bd637013f6"}, + "membrane_aac_plugin": {:hex, :membrane_aac_plugin, "0.19.0", "58a15efaaa4f2cc91b968464cfd269244e035efdd983aac2e3ddeb176fcf0585", [:mix], [{:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.8.0", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "eb7e786e650608ee205f4eebff4c1df3677e545acf09802458f77f64f9942fe9"}, + "membrane_cmaf_format": {:hex, :membrane_cmaf_format, "0.7.1", "9ea858faefdcb181cdfa8001be827c35c5f854e9809ad57d7062cff1f0f703fd", [:mix], [], "hexpm", "3c7b4ed2a986e27f6f336d2f19e9442cb31d93b3142fc024c019572faca54a73"}, + "membrane_core": {:hex, :membrane_core, "1.1.2", "3ca206893e1d3739a24d5092d21c06fcb4db326733a1798f9788fc53abb74829", [:mix], [{:bunch, "~> 1.6", [hex: :bunch, repo: "hexpm", optional: false]}, {:qex, "~> 0.3", [hex: :qex, repo: "hexpm", optional: false]}, {:ratio, "~> 3.0 or ~> 4.0", [hex: :ratio, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a989fd7e0516a7e66f5fb63950b1027315b7f8c8d82d8d685e178b0fb780901b"}, + "membrane_file_plugin": {:hex, :membrane_file_plugin, "0.17.2", "650e134c2345d946f930082fac8bac9f5aba785a7817d38a9a9da41ffc56fa92", [:mix], [{:logger_backends, "~> 1.0", [hex: :logger_backends, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "df50c6040004cd7b901cf057bd7e99c875bbbd6ae574efc93b2c753c96f43b9d"}, + "membrane_h264_format": {:hex, :membrane_h264_format, "0.6.1", "44836cd9de0abe989b146df1e114507787efc0cf0da2368f17a10c47b4e0738c", [:mix], [], "hexpm", "4b79be56465a876d2eac2c3af99e115374bbdc03eb1dea4f696ee9a8033cd4b0"}, + "membrane_h265_format": {:hex, :membrane_h265_format, "0.2.0", "1903c072cf7b0980c4d0c117ab61a2cd33e88782b696290de29570a7fab34819", [:mix], [], "hexpm", "6df418bdf242c0d9f7dbf2e5aea4c2d182e34ac9ad5a8b8cef2610c290002e83"}, + "membrane_h26x_plugin": {:hex, :membrane_h26x_plugin, "0.10.2", "caf2790d8c107df35f8d456b45f4e09fb9c56ce6c7669a3a03f7d59972e6ed82", [:mix], [{:bunch, "~> 1.4", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.6.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}, {:membrane_h265_format, "~> 0.2.0", [hex: :membrane_h265_format, repo: "hexpm", optional: false]}], "hexpm", "becf1ac4a589adecd850137ccd61a33058f686083a514a7e39fcd721bcf9fb2e"}, + "membrane_hls_plugin": {:git, "https://github.com/kim-company/membrane_hls_plugin.git", "a19ab7e12aa75c31c6b75b40f709c8f0ce9195a9", []}, + "membrane_mp4_format": {:hex, :membrane_mp4_format, "0.8.0", "8c6e7d68829228117d333b4fbb030e7be829aab49dd8cb047fdc664db1812e6a", [:mix], [], "hexpm", "148dea678a1f82ccfd44dbde6f936d2f21255f496cb45a22cc6eec427f025522"}, + "membrane_mp4_plugin": {:hex, :membrane_mp4_plugin, "0.35.2", "cbedb5272ef1c8f7d9cd3c44f820a90306469b1dc84b8db30ff55bb6195b7cb2", [:mix], [{:bunch, "~> 1.5", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.8.0", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_cmaf_format, "~> 0.7.0", [hex: :membrane_cmaf_format, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_file_plugin, "~> 0.17.0", [hex: :membrane_file_plugin, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.6.1", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}, {:membrane_h265_format, "~> 0.2.0", [hex: :membrane_h265_format, repo: "hexpm", optional: false]}, {:membrane_mp4_format, "~> 0.8.0", [hex: :membrane_mp4_format, repo: "hexpm", optional: false]}, {:membrane_opus_format, "~> 0.3.0", [hex: :membrane_opus_format, repo: "hexpm", optional: false]}, {:membrane_timestamp_queue, "~> 0.2.1", [hex: :membrane_timestamp_queue, repo: "hexpm", optional: false]}], "hexpm", "8afd4e7779a742dd56c23f1f23053933d1b0b34d397ad368a2f56f995edb2fe0"}, + "membrane_opus_format": {:hex, :membrane_opus_format, "0.3.0", "3804d9916058b7cfa2baa0131a644d8186198d64f52d592ae09e0942513cb4c2", [:mix], [], "hexpm", "8fc89c97be50de23ded15f2050fe603dcce732566fe6fdd15a2de01cb6b81afe"}, + "membrane_text_format": {:git, "https://github.com/kim-company/membrane_text_format.git", "e6dec9d0b50d766194826f6b7a739d167f10275f", []}, + "membrane_timestamp_queue": {:hex, :membrane_timestamp_queue, "0.2.2", "1c831b2273d018a6548654aa9f7fa7c4b683f71d96ffe164934ef55f9d11f693", [:mix], [{:heap, "~> 2.0", [hex: :heap, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "7c830e760baaced0988421671cd2c83c7cda8d1bd2b61fd05332711675d1204f"}, + "membrane_webvtt_plugin": {:git, "https://github.com/kim-company/membrane_webvtt_plugin.git", "7ec45ef74cc34183523521cce5f44bb9dd46ead9", []}, + "numbers": {:hex, :numbers, "5.2.4", "f123d5bb7f6acc366f8f445e10a32bd403c8469bdbce8ce049e1f0972b607080", [:mix], [{:coerce, "~> 1.0", [hex: :coerce, repo: "hexpm", optional: false]}, {:decimal, "~> 1.9 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "eeccf5c61d5f4922198395bf87a465b6f980b8b862dd22d28198c5e6fab38582"}, + "qex": {:hex, :qex, "0.5.1", "0d82c0f008551d24fffb99d97f8299afcb8ea9cf99582b770bd004ed5af63fd6", [:mix], [], "hexpm", "935a39fdaf2445834b95951456559e9dc2063d0a055742c558a99987b38d6bab"}, + "ratio": {:hex, :ratio, "4.0.1", "3044166f2fc6890aa53d3aef0c336f84b2bebb889dc57d5f95cc540daa1912f8", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:numbers, "~> 5.2.0", [hex: :numbers, repo: "hexpm", optional: false]}], "hexpm", "c60cbb3ccdff9ffa56e7d6d1654b5c70d9f90f4d753ab3a43a6bf40855b881ce"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, +} diff --git a/mpeg_ts_hls/script.exs b/mpeg_ts_hls/script.exs new file mode 100644 index 00000000..f184fe83 --- /dev/null +++ b/mpeg_ts_hls/script.exs @@ -0,0 +1,6 @@ +{:ok, _supervisor, pipeline_pid} = Membrane.Pipeline.start_link(HLSPipeline, []) +ref = Process.monitor(pipeline_pid) +:ok = receive do + {:DOWN, ^ref, :process, ^pipeline_pid, _reason} -> :ok +end + diff --git a/mpeg_ts_hls/test/hls_example_test.exs b/mpeg_ts_hls/test/hls_example_test.exs new file mode 100644 index 00000000..aa016c15 --- /dev/null +++ b/mpeg_ts_hls/test/hls_example_test.exs @@ -0,0 +1,8 @@ +defmodule HlsExampleTest do + use ExUnit.Case + doctest HlsExample + + test "greets the world" do + assert HlsExample.hello() == :world + end +end diff --git a/mpeg_ts_hls/test/test_helper.exs b/mpeg_ts_hls/test/test_helper.exs new file mode 100644 index 00000000..869559e7 --- /dev/null +++ b/mpeg_ts_hls/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start() From 09eac5f551b22be870a147430f081d37e4db488f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kita?= Date: Wed, 18 Dec 2024 12:51:11 +0100 Subject: [PATCH 2/2] Do refactor --- mpeg_ts_hls/lib/pipeline.ex | 10 ++++------ mpeg_ts_hls/{script.exs => run.exs} | 3 +-- mpeg_ts_hls/test/hls_example_test.exs | 8 -------- mpeg_ts_hls/test/test_helper.exs | 1 - 4 files changed, 5 insertions(+), 17 deletions(-) rename mpeg_ts_hls/{script.exs => run.exs} (73%) delete mode 100644 mpeg_ts_hls/test/hls_example_test.exs delete mode 100644 mpeg_ts_hls/test/test_helper.exs diff --git a/mpeg_ts_hls/lib/pipeline.ex b/mpeg_ts_hls/lib/pipeline.ex index aa4a7c3b..ac2f8820 100644 --- a/mpeg_ts_hls/lib/pipeline.ex +++ b/mpeg_ts_hls/lib/pipeline.ex @@ -4,11 +4,10 @@ defmodule HLSPipeline do alias Membrane.HLS.Source alias HLS.Playlist.Master - @master_playlist_uri URI.new!("./fixtures/mpeg-ts/stream.m3u8") - @impl true def handle_init(_ctx, opts) do - structure = child(:source, %Source{reader: %Reader{}, master_playlist_uri: @master_playlist_uri}) + structure = + child(:source, %Source{reader: %Reader{}, master_playlist_uri: opts[:uri]}) {[spec: structure], opts} end @@ -18,9 +17,8 @@ defmodule HLSPipeline do stream = master |> Master.variant_streams() - |> Enum.at(0) # we always choose stream variant 0 here - - + # we always choose stream variant 0 here + |> Enum.at(0) case stream do nil -> diff --git a/mpeg_ts_hls/script.exs b/mpeg_ts_hls/run.exs similarity index 73% rename from mpeg_ts_hls/script.exs rename to mpeg_ts_hls/run.exs index f184fe83..72592864 100644 --- a/mpeg_ts_hls/script.exs +++ b/mpeg_ts_hls/run.exs @@ -1,6 +1,5 @@ -{:ok, _supervisor, pipeline_pid} = Membrane.Pipeline.start_link(HLSPipeline, []) +{:ok, _supervisor, pipeline_pid} = Membrane.Pipeline.start_link(HLSPipeline, [uri: URI.new!("./fixtures/mpeg-ts/stream.m3u8")]) ref = Process.monitor(pipeline_pid) :ok = receive do {:DOWN, ^ref, :process, ^pipeline_pid, _reason} -> :ok end - diff --git a/mpeg_ts_hls/test/hls_example_test.exs b/mpeg_ts_hls/test/hls_example_test.exs deleted file mode 100644 index aa016c15..00000000 --- a/mpeg_ts_hls/test/hls_example_test.exs +++ /dev/null @@ -1,8 +0,0 @@ -defmodule HlsExampleTest do - use ExUnit.Case - doctest HlsExample - - test "greets the world" do - assert HlsExample.hello() == :world - end -end diff --git a/mpeg_ts_hls/test/test_helper.exs b/mpeg_ts_hls/test/test_helper.exs deleted file mode 100644 index 869559e7..00000000 --- a/mpeg_ts_hls/test/test_helper.exs +++ /dev/null @@ -1 +0,0 @@ -ExUnit.start()