diff --git a/.circleci/config.yml b/.circleci/config.yml index f9dc46e..78768b2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ orbs: executors: docker-executor: docker: - - image: ghcr.io/jellyfish-dev/recording-converter-test:0.0.3 + - image: ghcr.io/fishjam-dev/recording-converter-test:0.0.3 environment: MIX_ENV: test jobs: diff --git a/README.md b/README.md index f6aa7fc..4e687b4 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Recording Converter -[![codecov](https://codecov.io/gh/jellyfish-dev/recording-converter/branch/main/graph/badge.svg?token=ANWFKV2EDP)](https://codecov.io/gh/jellyfish-dev/recording-converter) -[![CircleCI](https://circleci.com/gh/jellyfish-dev/recording-converter.svg?style=svg)](https://circleci.com/gh/jellyfish-dev/recording-converter) +[![codecov](https://codecov.io/gh/fishjam-dev/recording-converter/branch/main/graph/badge.svg?token=ANWFKV2EDP)](https://codecov.io/gh/fishjam-dev/recording-converter) +[![CircleCI](https://circleci.com/gh/fishjam-dev/recording-converter.svg?style=svg)](https://circleci.com/gh/fishjam-dev/recording-converter) -Recording Converter is a docker image that allows to convert recording created with the use of [RecordingComponent](https://jellyfish-dev.github.io/jellyfish-docs/next/getting_started/components/recording) in Jellyfish to HLS. +Recording Converter is a docker image that allows to convert recording created with the use of [RecordingComponent](https://fishjam-dev.github.io/fishjam-docs/next/getting_started/components/recording) in Fishjam to HLS. The environment variables possible to pass are: * `AWS_S3_ACCESS_KEY_ID` - access key ID to S3 bucket diff --git a/lib/filter_h264.ex b/lib/filter_h264.ex new file mode 100644 index 0000000..91659d3 --- /dev/null +++ b/lib/filter_h264.ex @@ -0,0 +1,46 @@ +defmodule RecordingConverter.FilterH264 do + @moduledoc false + + use Membrane.Filter + + require Logger + + alias Membrane.Buffer + + def_input_pad :input, accepted_format: Membrane.H264 + + def_output_pad :output, accepted_format: Membrane.H264 + + @impl true + def handle_init(_ctx, _options) do + {[], %{}} + end + + @impl true + def handle_buffer(_pad, %Buffer{} = buffer, _ctx, state) do + type = buffer.metadata.h264.type + + cond do + type in [:sps, :pps] -> + {[], Map.put(state, type, buffer)} + + is_map_key(state, :sps) and is_map_key(state, :pps) -> + buffers = [state.sps, state.pps, buffer] + + {[buffer: {:output, buffers}], %{}} + + map_size(state) > 0 -> + raise "Stream lacks sps or pps which will lead to decoder deadlock" + + true -> + {[buffer: {:output, buffer}], state} + end + end + + @impl true + def handle_end_of_stream(_pad, _ctx, state) do + buffers = [Map.get(state, :sps), Map.get(state, :pps)] |> Enum.reject(&is_nil/1) + + {[buffer: {:output, buffers}, end_of_stream: :output], state} + end +end diff --git a/lib/pipeline.ex b/lib/pipeline.ex index a356b6d..28f2c42 100644 --- a/lib/pipeline.ex +++ b/lib/pipeline.ex @@ -14,6 +14,7 @@ defmodule RecordingConverter.Pipeline do @output_height 720 @output_streams_number 2 @report_file "report.json" + @framerate 30 @impl true def handle_init(_ctx, opts) do @@ -158,14 +159,17 @@ defmodule RecordingConverter.Pipeline do options: [ width: @output_width, height: @output_height, - encoder: %LiveCompositor.Encoder.FFmpegH264{preset: :veryfast}, + encoder: %LiveCompositor.Encoder.FFmpegH264{ + preset: :veryfast, + ffmpeg_options: %{"g" => Integer.to_string(@framerate * @segment_duration)} + }, initial: %{ root: Compositor.scene([]) } ] ) |> child(:output_video_parser, %Membrane.H264.Parser{ - generate_best_effort_timestamps: %{framerate: {30, 1}}, + generate_best_effort_timestamps: %{framerate: {@framerate, 1}}, output_alignment: :nalu }) |> via_in(Pad.ref(:input, :video), @@ -179,7 +183,7 @@ defmodule RecordingConverter.Pipeline do defp generate_output_audio_branch(state, compositor_actions) do child(:video_compositor, %Membrane.LiveCompositor{ - framerate: {30, 1}, + framerate: {@framerate, 1}, composing_strategy: :offline_processing, server_setup: Compositor.server_setup(state.compositor_path), init_requests: compositor_actions @@ -221,6 +225,7 @@ defmodule RecordingConverter.Pipeline do output_alignment: :nalu, output_stream_structure: :annexb }) + |> child({:filter_h264_metadata, track.id}, RecordingConverter.FilterH264) |> via_in(Pad.ref(:video_input, track.id), options: [ offset: Membrane.Time.nanoseconds(track["offset"]), diff --git a/mix.exs b/mix.exs index acfd852..2b67dff 100644 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule RecordingConverter.Mixfile do use Mix.Project @version "0.1.0" - @github_url "https://github.com/jellyfish-dev/recording-converter" + @github_url "https://github.com/fishjam-dev/recording-converter" def project do [ @@ -15,7 +15,7 @@ defmodule RecordingConverter.Mixfile do dialyzer: dialyzer(), # hex - description: "Job that converts Jellyfish recordings to other format", + description: "Job that converts Fishjam recordings to other format", package: package(), # docs @@ -50,7 +50,7 @@ defmodule RecordingConverter.Mixfile do defp deps do [ {:membrane_core, "~> 1.0"}, - {:membrane_aws_plugin, github: "jellyfish-dev/membrane_aws_plugin"}, + {:membrane_aws_plugin, github: "fishjam-dev/membrane_aws_plugin"}, {:membrane_stream_plugin, "~> 0.4.0"}, {:membrane_rtp_plugin, "~> 0.27.0"}, {:membrane_rtp_opus_plugin, "~> 0.9.0"}, diff --git a/mix.lock b/mix.lock index a36a272..527274f 100644 --- a/mix.lock +++ b/mix.lock @@ -15,7 +15,7 @@ "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "ex_aws": {:hex, :ex_aws, "2.5.3", "9c2d05ba0c057395b12c7b5ca6267d14cdaec1d8e65bdf6481fe1fd245accfb4", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "67115f1d399d7ec4d191812ee565c6106cb4b1bbf19a9d4db06f265fd87da97e"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.3", "422468e5c3e1a4da5298e66c3468b465cfd354b842e512cb1f6fbbe4e2f5bdaf", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "4f09dd372cc386550e484808c5ac5027766c8d0cd8271ccc578b82ee6ef4f3b8"}, - "ex_doc": {:hex, :ex_doc, "0.32.2", "f60bbeb6ccbe75d005763e2a328e6f05e0624232f2393bc693611c2d3ae9fa0e", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "a4480305cdfe7fdfcbb77d1092c76161626d9a7aa4fb698aee745996e34602df"}, + "ex_doc": {:hex, :ex_doc, "0.33.0", "690562b153153c7e4d455dc21dab86e445f66ceba718defe64b0ef6f0bd83ba0", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "3f69adc28274cb51be37d09b03e4565232862a4b10288a3894587b0131412124"}, "ex_sdp": {:hex, :ex_sdp, "0.15.0", "53815fb5b5e4fae0f3b26de90f372446bb8e0eed62a3cc20394d3c29519698be", [:mix], [{:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:elixir_uuid, "~> 1.2", [hex: :elixir_uuid, repo: "hexpm", optional: false]}], "hexpm", "d3f23596b73e7057521ff0f0d55b1189c6320a2f04388aa3a80a0aa97ffb379f"}, "excoveralls": {:hex, :excoveralls, "0.15.3", "54bb54043e1cf5fe431eb3db36b25e8fd62cf3976666bafe491e3fa5e29eba47", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f8eb5d8134d84c327685f7bb8f1db4147f1363c3c9533928234e496e3070114e"}, "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"}, @@ -32,7 +32,7 @@ "membrane_aac_fdk_plugin": {:hex, :membrane_aac_fdk_plugin, "0.18.8", "88d47923805cbd9a977fc7e5d3eb8d3028a2e358ad9ad7b124684adc78c2e8ee", [:mix], [{:bunch, "~> 1.4", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.3", [hex: :bundlex, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.8.0", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.16.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_precompiled_dependency_provider, "~> 0.1.0", [hex: :membrane_precompiled_dependency_provider, repo: "hexpm", optional: false]}, {:membrane_raw_audio_format, "~> 0.12.0", [hex: :membrane_raw_audio_format, repo: "hexpm", optional: false]}, {:unifex, "~> 1.1", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "bb9e706d0949954affd4e295f5d3d4660096997756b5422119800d961c46cc63"}, "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.18.1", "30433bffd4d5d773f79448dd9afd55d77338721688f09a89b20d742a68cc2c3d", [: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", "8fd048c47d5d2949eb557e19f43f62d534d3af5096187f1a1a3a1694d14b772c"}, - "membrane_aws_plugin": {:git, "https://github.com/jellyfish-dev/membrane_aws_plugin.git", "41b59a7e564305436da89fb753a1d14edc161af5", []}, + "membrane_aws_plugin": {:git, "https://github.com/fishjam-dev/membrane_aws_plugin.git", "41b59a7e564305436da89fb753a1d14edc161af5", []}, "membrane_cmaf_format": {:hex, :membrane_cmaf_format, "0.7.1", "9ea858faefdcb181cdfa8001be827c35c5f854e9809ad57d7062cff1f0f703fd", [:mix], [], "hexpm", "3c7b4ed2a986e27f6f336d2f19e9442cb31d93b3142fc024c019572faca54a73"}, "membrane_common_c": {:hex, :membrane_common_c, "0.16.0", "caf3f29d2f5a1d32d8c2c122866110775866db2726e4272be58e66dfdf4bce40", [:mix], [{:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:shmex, "~> 0.5.0", [hex: :shmex, repo: "hexpm", optional: false]}, {:unifex, "~> 1.0", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "a3c7e91de1ce1f8b23b9823188a5d13654d317235ea0ca781c05353ed3be9b1c"}, "membrane_core": {:hex, :membrane_core, "1.0.1", "08aa546c0d131c66f8b906b3dfb2b8f2749b56859f6fc52bd3ac846b944b3baa", [:mix], [{:bunch, "~> 1.6", [hex: :bunch, repo: "hexpm", optional: false]}, {:qex, "~> 0.3", [hex: :qex, repo: "hexpm", optional: false]}, {:ratio, "~> 3.0", [hex: :ratio, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a35ed68561bdf0a2dbb2f994333be78cf4e1c4d734e4cd927d77d92049bb1273"}, @@ -46,7 +46,7 @@ "membrane_mp4_format": {:hex, :membrane_mp4_format, "0.8.0", "8c6e7d68829228117d333b4fbb030e7be829aab49dd8cb047fdc664db1812e6a", [:mix], [], "hexpm", "148dea678a1f82ccfd44dbde6f936d2f21255f496cb45a22cc6eec427f025522"}, "membrane_mp4_plugin": {:hex, :membrane_mp4_plugin, "0.34.2", "6b40c919544dc62e87dd9022083c8e2fafbdc84f5806a475c96076f400ca9500", [: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]}], "hexpm", "70c081524507e849ac37c418ba3d598e00c76b89d0d59e130f45ff8183494192"}, "membrane_opus_format": {:hex, :membrane_opus_format, "0.3.0", "3804d9916058b7cfa2baa0131a644d8186198d64f52d592ae09e0942513cb4c2", [:mix], [], "hexpm", "8fc89c97be50de23ded15f2050fe603dcce732566fe6fdd15a2de01cb6b81afe"}, - "membrane_opus_plugin": {:hex, :membrane_opus_plugin, "0.20.1", "3a69a2933d4601775db81a75fea503c7e5aac89d5456525144fc06bd6f28e902", [:mix], [{:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.2", [hex: :bundlex, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.16.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_opus_format, "~> 0.3.0", [hex: :membrane_opus_format, repo: "hexpm", optional: false]}, {:membrane_precompiled_dependency_provider, "~> 0.1.0", [hex: :membrane_precompiled_dependency_provider, repo: "hexpm", optional: false]}, {:membrane_raw_audio_format, "~> 0.12.0", [hex: :membrane_raw_audio_format, repo: "hexpm", optional: false]}, {:unifex, "~> 1.0", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "82a26987f5a9f1eb1222fdea95c06d4d892c91fb7c5412adbc83f27111e51820"}, + "membrane_opus_plugin": {:hex, :membrane_opus_plugin, "0.20.2", "f259a46f87c1749cd8dc8cbaf4b00df1085b39a8f0deef219a93ccda8cb54006", [:mix], [{:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.2", [hex: :bundlex, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.16.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_opus_format, "~> 0.3.0", [hex: :membrane_opus_format, repo: "hexpm", optional: false]}, {:membrane_precompiled_dependency_provider, "~> 0.1.0", [hex: :membrane_precompiled_dependency_provider, repo: "hexpm", optional: false]}, {:membrane_raw_audio_format, "~> 0.12.0", [hex: :membrane_raw_audio_format, repo: "hexpm", optional: false]}, {:unifex, "~> 1.0", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "4540615a49b3e3f008ba30532893ff1efb9d79b974e0b947efb92d49fc9cccbd"}, "membrane_precompiled_dependency_provider": {:hex, :membrane_precompiled_dependency_provider, "0.1.2", "8af73b7dc15ba55c9f5fbfc0453d4a8edfb007ade54b56c37d626be0d1189aba", [:mix], [{:bundlex, "~> 1.4", [hex: :bundlex, repo: "hexpm", optional: false]}], "hexpm", "7fe3e07361510445a29bee95336adde667c4162b76b7f4c8af3aeb3415292023"}, "membrane_raw_audio_format": {:hex, :membrane_raw_audio_format, "0.12.0", "b574cd90f69ce2a8b6201b0ccf0826ca28b0fbc8245b8078d9f11cef65f7d5d5", [:mix], [{:bimap, "~> 1.1", [hex: :bimap, repo: "hexpm", optional: false]}, {:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_core, "~> 1.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "6e6c98e3622a2b9df19eab50ba65d7eb45949b1ba306fa8423df6cdb12fd0b44"}, "membrane_raw_video_format": {:hex, :membrane_raw_video_format, "0.3.0", "ba10f475e0814a6fe79602a74536b796047577c7ef5b0e33def27cd344229699", [:mix], [], "hexpm", "2f08760061c8a5386ecf04273480f10e48d25a1a40aa99476302b0bcd34ccb1c"}, diff --git a/test/fixtures/karol-melt/1cf1a2a8-e30c-47bf-a209-0619cc3847be.msr b/test/fixtures/karol-melt/1cf1a2a8-e30c-47bf-a209-0619cc3847be.msr new file mode 100644 index 0000000..6ab181b Binary files /dev/null and b/test/fixtures/karol-melt/1cf1a2a8-e30c-47bf-a209-0619cc3847be.msr differ diff --git a/test/fixtures/karol-melt/a8dc8319-b609-4be0-8969-6f9fdb4c6f11.msr b/test/fixtures/karol-melt/a8dc8319-b609-4be0-8969-6f9fdb4c6f11.msr new file mode 100644 index 0000000..d6d4800 Binary files /dev/null and b/test/fixtures/karol-melt/a8dc8319-b609-4be0-8969-6f9fdb4c6f11.msr differ diff --git a/test/fixtures/karol-melt/f4713f9b-1adb-4b48-9246-9dc6ba6aaee0.msr b/test/fixtures/karol-melt/f4713f9b-1adb-4b48-9246-9dc6ba6aaee0.msr new file mode 100644 index 0000000..518bfef Binary files /dev/null and b/test/fixtures/karol-melt/f4713f9b-1adb-4b48-9246-9dc6ba6aaee0.msr differ diff --git a/test/fixtures/karol-melt/report.json b/test/fixtures/karol-melt/report.json new file mode 100644 index 0000000..2234181 --- /dev/null +++ b/test/fixtures/karol-melt/report.json @@ -0,0 +1,35 @@ +{ + "recording_id": "37", + "tracks": { + "1cf1a2a8-e30c-47bf-a209-0619cc3847be.msr": { + "offset": 3594174959, + "type": "video", + "origin": "7b125ebc-5d5d-4fa5-ad4b-1607e9a4c6ec", + "encoding": "H264", + "metadata": null, + "clock_rate": 90000, + "start_timestamp": 3643725625, + "end_timestamp": 3646057795 + }, + "a8dc8319-b609-4be0-8969-6f9fdb4c6f11.msr": { + "offset": 0, + "type": "video", + "origin": "2939faaf-ddfe-43f5-a6ee-af97a09c9e78", + "encoding": "H264", + "metadata": null, + "clock_rate": 90000, + "start_timestamp": 49550666, + "end_timestamp": 50499087 + }, + "f4713f9b-1adb-4b48-9246-9dc6ba6aaee0.msr": { + "offset": 3288245581, + "type": "video", + "origin": "7b125ebc-5d5d-4fa5-ad4b-1607e9a4c6ec", + "encoding": "H264", + "metadata": null, + "clock_rate": 90000, + "start_timestamp": 3337796247, + "end_timestamp": 3341106897 + } + } +} \ No newline at end of file diff --git a/test/integration_test.exs b/test/integration_test.exs index e46e965..237093c 100644 --- a/test/integration_test.exs +++ b/test/integration_test.exs @@ -49,7 +49,7 @@ defmodule RecordingConverter.RecordingTest do files = PipelineTest.get_files(test_type) - setup_multipart_download_backend(bucket, report_path, output_dir_path, files, 25) + setup_multipart_download_backend(bucket, report_path, output_dir_path, files, 28) {:ok, pid} = RecordingConverter.start() @@ -81,7 +81,7 @@ defmodule RecordingConverter.RecordingTest do report_path, "test_path/output", files, - 25 + 28 ) {:ok, pid} = RecordingConverter.start() @@ -240,7 +240,7 @@ defmodule RecordingConverter.RecordingTest do {:ok, %{status_code: 401}} end) - expect(ExAws.Request.HttpMock, :request, 14, request_handler) + expect(ExAws.Request.HttpMock, :request, 15, request_handler) Process.sleep(100) end diff --git a/test/pipeline_test.exs b/test/pipeline_test.exs index 7ef6434..c5bff15 100644 --- a/test/pipeline_test.exs +++ b/test/pipeline_test.exs @@ -52,16 +52,17 @@ defmodule RecordingConverter.PipelineTest do %{type: "multiple-audios-and-one-video", requests: 12, factor: 1}, %{type: "long-video", requests: 16, factor: 5}, %{type: "first-only-audio-second-only-video-third-audio-and-video", requests: 21, factor: 1}, - %{type: "grid-limits", requests: 49, factor: 2}, + %{type: "grid-limits", requests: 49, factor: 3}, %{type: "only-audio", requests: 6, factor: 1}, %{type: "peer-disconnected-during-recording-and-then-comeback", requests: 10, factor: 1}, %{ type: "peer-removes-their-track-during-recording-but-stays-in-the-room", requests: 16, - factor: 1 + factor: 3 }, %{type: "peers-before-recording-started", requests: 15, factor: 1}, - %{type: "short_videos", requests: 4, factor: 1} + %{type: "short_videos", requests: 4, factor: 1}, + %{type: "karol-melt", requests: 35, factor: 1} ] for test <- tests do