Skip to content

Commit

Permalink
Merge pull request #14 from membraneframework/update-to-new-formats
Browse files Browse the repository at this point in the history
* Update the plugin to use new formats
  • Loading branch information
Noarkhh authored Sep 4, 2023
2 parents a3a461c + 0a3b7f3 commit 068a0f8
Show file tree
Hide file tree
Showing 11 changed files with 40 additions and 72 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The package can be installed by adding `membrane_matroska_plugin` to your list o
```elixir
def deps do
[
{:membrane_matroska_plugin, "~> 0.3.1"}
{:membrane_matroska_plugin, "~> 0.4.0"}
]
end
```
Expand Down
12 changes: 5 additions & 7 deletions examples/demuxer_h264.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ Mix.install([
:membrane_core,
{:membrane_matroska_plugin, path: __DIR__ |> Path.join("..") |> Path.expand()},
:membrane_hackney_plugin,
:membrane_h264_ffmpeg_plugin,
:membrane_mp4_plugin,
:membrane_h264_plugin,
:membrane_h264_format,
:membrane_opus_plugin,
{:membrane_ogg_plugin, github: "membraneframework-labs/membrane_libogg_plugin"}
])
Expand Down Expand Up @@ -58,9 +58,8 @@ defmodule Example do
structure =
get_child(:demuxer)
|> via_out(Pad.ref(:output, track_id))
|> child(:parser, %Membrane.H264.FFmpeg.Parser{
skip_until_parameters?: false,
attach_nalus?: true
|> child(:parser, %Membrane.H264.Parser{
output_stream_structure: :annexb
})
|> child({:sink, track_id}, %Membrane.File.Sink{
location: Path.join(@output_dir, "#{track_id}.h264")
Expand All @@ -76,8 +75,7 @@ defmodule Example do
# Next three functions are only a logic for terminating a pipeline when it's done, you don't need to worry
@impl true
def handle_element_end_of_stream({:sink, _}, :input, _ctx, state) when state.tracks == 1 do
Membrane.Pipeline.terminate(self())
{[], state}
{[terminate: :normal], state}
end

@impl true
Expand Down
15 changes: 6 additions & 9 deletions examples/muxer_h264.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ Mix.install([
:membrane_core,
{:membrane_matroska_plugin, path: __DIR__ |> Path.join("..") |> Path.expand()},
:membrane_hackney_plugin,
:membrane_h264_ffmpeg_plugin,
:membrane_mp4_plugin,
:membrane_h264_plugin,
:membrane_h264_format,
:membrane_opus_plugin
])

Expand Down Expand Up @@ -33,12 +33,10 @@ defmodule Example do
location: @video_url,
hackney_opts: [follow_redirect: true]
})
|> child(:video_parser, %Membrane.H264.FFmpeg.Parser{
framerate: {30, 1},
alignment: :au,
attach_nalus?: true
|> child(:video_parser, %Membrane.H264.Parser{
generate_best_effort_timestamps: %{framerate: {30, 1}},
output_stream_structure: :avc3
})
|> child(:video_payloader, %Membrane.MP4.Payloader.H264{parameters_in_band?: true})
|> child(:muxer, Membrane.Matroska.Muxer),
child(:audio_source, %Membrane.Hackney.Source{
location: @audio_url,
Expand All @@ -63,8 +61,7 @@ defmodule Example do
# Next two functions are only a logic for terminating a pipeline when it's done, you don't need to worry
@impl true
def handle_element_end_of_stream(:file_sink, _pad, _ctx, state) do
Membrane.Pipeline.terminate(self())
{[], state}
{[terminate: :normal], state}
end

def handle_element_end_of_stream(_element, _pad, _ctx, state) do
Expand Down
26 changes: 4 additions & 22 deletions lib/membrane_matroska/demuxer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ defmodule Membrane.Matroska.Demuxer do
mode: :pull,
accepted_format:
any_of(
H264.RemoteStream,
%H264{stream_structure: {:avc3, _dcr}},
Opus,
%RemoteStream{content_format: format, type: :packetized} when format in [VP8, VP9]
)
Expand Down Expand Up @@ -123,11 +123,11 @@ defmodule Membrane.Matroska.Demuxer do
%RemoteStream{content_format: VP9, type: :packetized}

:h264 ->
%H264.RemoteStream{
%H264{
# Based on https://www.matroska.org/technical/codec_specs.html V_MPEG4/ISO/AVC section
# it's always NALu
alignment: :nalu,
decoder_configuration_record: track.codec_private
stream_structure: {:avc3, track.codec_private}
}

:vorbis ->
Expand Down Expand Up @@ -209,7 +209,7 @@ defmodule Membrane.Matroska.Demuxer do
{:buffer,
{Pad.ref(:output, data.track_number),
%Buffer{
payload: process_codec_specific(data.data, state.tracks[data.track_number].codec),
payload: data.data,
pts: (state.current_timecode + data.timecode) * state.timestamp_scale
}}}

Expand Down Expand Up @@ -297,22 +297,4 @@ defmodule Membrane.Matroska.Demuxer do
{track[:TrackNumber], info}
end
end

defp process_codec_specific(data, codec) do
case codec do
:h264 ->
convert_to_annexb(data)

_data ->
data
end
end

defp convert_to_annexb(<<size::32, data::binary-size(size), rest::binary>>) do
<<0, 0, 1>> <> data <> convert_to_annexb(rest)
end

defp convert_to_annexb(<<>>) do
<<>>
end
end
8 changes: 4 additions & 4 deletions lib/membrane_matroska/muxer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ defmodule Membrane.Matroska.Muxer do
use Bunch
use Membrane.Filter

alias Membrane.{Buffer, Matroska, MP4, Opus, RemoteStream, VP8, VP9}
require Membrane.H264
alias Membrane.{Buffer, H264, Matroska, Opus, RemoteStream, VP8, VP9}
alias Membrane.Matroska.Parser.Codecs
alias Membrane.Matroska.Serializer
alias Membrane.Matroska.Serializer.Helper
alias Membrane.MP4.Payload.AVC1

def_options title: [
spec: String.t(),
Expand All @@ -34,7 +34,7 @@ defmodule Membrane.Matroska.Muxer do
demand_unit: :buffers,
accepted_format:
any_of(
MP4.Payload,
%H264{nalu_in_metadata?: true, stream_structure: structure} when H264.is_avc(structure),
%Opus{self_delimiting?: false, channels: channels} when channels in [1, 2],
%RemoteStream{content_format: format, type: :packetized} when format in [VP8, VP9]
)
Expand Down Expand Up @@ -104,7 +104,7 @@ defmodule Membrane.Matroska.Muxer do
%Opus{} ->
:opus

%MP4.Payload{content: %AVC1{}} ->
%H264{} ->
:h264

format when is_struct(format) ->
Expand Down
14 changes: 7 additions & 7 deletions lib/membrane_matroska/serializer/matroska.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ defmodule Membrane.Matroska.Serializer.Matroska do
# Module for constructing the top-level elements constituting a Matroska file Segment
# https://www.ietf.org/archive/id/draft-ietf-cellar-matroska-08.html#section-7

alias Membrane.Buffer
require Membrane.H264
alias Membrane.{Buffer, H264}
alias Membrane.Matroska.Parser.Codecs
alias Membrane.Matroska.Serializer.{EBML, Helper}
alias Membrane.{MP4, Opus, RemoteStream, VP8, VP9}
alias Membrane.{Opus, RemoteStream, VP8, VP9}

@timestamp_scale Membrane.Time.millisecond()
@seekhead_bytes 160
Expand Down Expand Up @@ -151,16 +152,15 @@ defmodule Membrane.Matroska.Serializer.Matroska do
defp construct_track_entry(
{id,
%{
stream_format: %MP4.Payload{
content: %Membrane.MP4.Payload.AVC1{
avcc: codec_private
},
stream_format: %Membrane.H264{
stream_structure: {_avc, codec_private} = structure,
width: width,
height: height
},
track_number: track_number
}}
) do
)
when H264.is_avc(structure) do
{:TrackEntry,
[
CodecPrivate: codec_private,
Expand Down
10 changes: 4 additions & 6 deletions mix.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule Membrane.Matroska.Plugin.Mixfile do
use Mix.Project

@version "0.3.1"
@version "0.4.0"
@github_url "https://github.com/membraneframework/membrane_matroska_plugin"

def project do
Expand Down Expand Up @@ -40,26 +40,24 @@ defmodule Membrane.Matroska.Plugin.Mixfile do
[
{:membrane_core, "~> 0.12.3"},
{:membrane_matroska_format, "~> 0.1.0"},
{:membrane_h264_format, "~> 0.5.0"},
{:membrane_h264_format, "~> 0.6.1"},
{:membrane_vp8_format, "~> 0.4.0"},
{:membrane_vp9_format, "~> 0.4.0"},
{:membrane_opus_format, "~> 0.3.0"},
{:membrane_mp4_format, "~> 0.7.0"},
{:membrane_common_c, "~> 0.15.0"},
{:membrane_file_plugin, "~> 0.15.0", runtime: false},
{:qex, "~> 0.5.1"},
{:bimap, "~> 1.2"},
# Test dependencies
{:membrane_opus_plugin, "~> 0.17.0", only: :test, runtime: false},
{:membrane_flv_plugin, "~> 0.7.0", only: :test},
{:membrane_mp4_plugin, "~> 0.28.1", only: :test},
{:membrane_flv_plugin, "~> 0.9.0", only: :test, runtime: false},
{:membrane_ivf_plugin, "~> 0.6.0", only: :test, runtime: false},
{:membrane_ogg_plugin,
github: "membraneframework-labs/membrane_libogg_plugin",
tag: "v0.3.0",
only: :test,
runtime: false},
{:membrane_h264_ffmpeg_plugin, "~> 0.27.0", only: :test, runtime: false},
{:membrane_h264_plugin, "~> 0.7.0", only: :test, runtime: false},
{:membrane_ffmpeg_swresample_plugin, "~> 0.17.3", only: :test, runtime: false},
# Credo
{:ex_doc, ">= 0.0.0", only: :dev, runtime: false},
Expand Down
13 changes: 4 additions & 9 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,21 @@
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
"membrane_aac_format": {:hex, :membrane_aac_format, "0.7.1", "a5c6c8f052ad0581a8752a6b3e12a9d25e03140fcddceedf8e3bbfdcf855e99a", [:mix], [{:bimap, "~> 1.1", [hex: :bimap, repo: "hexpm", optional: false]}], "hexpm", "4075abb3f8040630f3d502af40868caf4d1d4c21ab946f07242aa3571e724350"},
"membrane_cmaf_format": {:hex, :membrane_cmaf_format, "0.7.0", "573bfff6acf2371c5046b9174569f6316f4205e3d6e13e814bf7e613e5653a54", [:mix], [], "hexpm", "4ac6a24a33f61347a2714c982a5f84aa6207641f4de2ad5afde68a8b800da8de"},
"membrane_aac_format": {:hex, :membrane_aac_format, "0.8.0", "515631eabd6e584e0e9af2cea80471fee6246484dbbefc4726c1d93ece8e0838", [:mix], [{:bimap, "~> 1.1", [hex: :bimap, repo: "hexpm", optional: false]}], "hexpm", "a30176a94491033ed32be45e51d509fc70a5ee6e751f12fd6c0d60bd637013f6"},
"membrane_common_c": {:hex, :membrane_common_c, "0.15.0", "4b6005c562bf025e4a53c95a9646a9f5fa993ac440dd44c1a4d1ea210ec53793", [:mix], [{:membrane_core, "~> 0.12.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", "f9584cca9865ed754b8333e362d49d6c449c708d7c87be6c5f7bd5a1d978d6bf"},
"membrane_core": {:hex, :membrane_core, "0.12.8", "59fdd10a1c1c6757302748d029fba4936257e53c93ac49fddd094962c08180f9", [:mix], [{:bunch, "~> 1.6", [hex: :bunch, repo: "hexpm", optional: false]}, {:qex, "~> 0.3", [hex: :qex, repo: "hexpm", optional: false]}, {:ratio, "~> 2.0", [hex: :ratio, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d48ab1adc13d5820182b016cc397692ed5568d4064b5765c343b4d64c7f119e7"},
"membrane_ffmpeg_swresample_plugin": {:hex, :membrane_ffmpeg_swresample_plugin, "0.17.3", "5166ba1c126b459b99fda7c944f2ac1f7e293081d7a82b0dbe286fcf00dbbcab", [:mix], [{:bunch, "~> 1.6", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.0", [hex: :bundlex, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.15.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.7", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_raw_audio_format, "~> 0.11.0", [hex: :membrane_raw_audio_format, repo: "hexpm", optional: false]}, {:mockery, "~> 2.1", [hex: :mockery, repo: "hexpm", optional: false]}, {:unifex, "~> 1.1", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "d155959969659e12d0c974343284e105fff480eff6495e46a948b46825df7a0c"},
"membrane_file_plugin": {:hex, :membrane_file_plugin, "0.15.0", "ddf9535fda82aae5b0688a98de1d02268287ffc8bcc6dba1a85e057d71c522af", [:mix], [{:membrane_core, "~> 0.12.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "fa2f7219f96c9e815475dc0d8c238c0a5648012917584756eb3eee476f737ce2"},
"membrane_flv_plugin": {:hex, :membrane_flv_plugin, "0.7.0", "969f0864da3b237ae5d7e854c2464b9432543c514b5858786fd59ad621eef364", [:mix], [{:bimap, "~> 1.2", [hex: :bimap, repo: "hexpm", optional: false]}, {:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.7.0", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.3", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.5.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}, {:membrane_mp4_format, "~> 0.7.0", [hex: :membrane_mp4_format, repo: "hexpm", optional: false]}], "hexpm", "62f9c4cbeaf6df456debc7d0f8568d25edcd284ed0ab5b3105ef164e591a3313"},
"membrane_h264_ffmpeg_plugin": {:hex, :membrane_h264_ffmpeg_plugin, "0.27.0", "4fced15b5791b87758869537770d00b39d103d1239ef7311f4a883e036d83d7b", [:mix], [{:bunch, "~> 1.6", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.15.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.0", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.5.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}, {:membrane_raw_video_format, "~> 0.3.0", [hex: :membrane_raw_video_format, repo: "hexpm", optional: false]}, {:ratio, "~> 2.4.0", [hex: :ratio, repo: "hexpm", optional: false]}, {:unifex, "~> 1.1", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "031887921970f793d11bfd2e2ed36ba6c3010b17c61a4702bcf50028431786dc"},
"membrane_h264_format": {:hex, :membrane_h264_format, "0.5.0", "95c1cc00896dab6de322cee3be0c9b0b0840537b4cc49e82a34e901b4e4763f9", [:mix], [], "hexpm", "7b44e0b02d86b45d24699de3c970186dffbca6d51aca80bbed2f6a3fe5c9eba1"},
"membrane_h264_plugin": {:hex, :membrane_h264_plugin, "0.6.0", "0ad95da388f3e885fe75d778e2e634854626bd73a6b3bbe1465137cb3299c8cd", [:mix], [{:bunch, "~> 1.4", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.7", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.5.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}], "hexpm", "392be4b151cab137f40bba0589e69ac28f53e8dd9687b5e38a465ba2000050be"},
"membrane_flv_plugin": {:hex, :membrane_flv_plugin, "0.9.0", "967e712ccd4d0d49e100c955978ecacf87aed2dd0798a90fb7eb3024dbf6701e", [:mix], [{:bimap, "~> 1.2", [hex: :bimap, repo: "hexpm", optional: false]}, {:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.8.0", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.3", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.6.1", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}], "hexpm", "c839fe9d31c7a96750d9ae3e3b226f69f925aa45ffacadb0c2fb6450168acc52"},
"membrane_h264_format": {:hex, :membrane_h264_format, "0.6.1", "44836cd9de0abe989b146df1e114507787efc0cf0da2368f17a10c47b4e0738c", [:mix], [], "hexpm", "4b79be56465a876d2eac2c3af99e115374bbdc03eb1dea4f696ee9a8033cd4b0"},
"membrane_h264_plugin": {:hex, :membrane_h264_plugin, "0.7.1", "8232ecabe9b2683dd78b93f9957ee399fb7a9de762ec1088b576bab24fb47504", [:mix], [{:bunch, "~> 1.4", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.7", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.6.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}], "hexpm", "1224f81953daf5ab3fbde51d5ed4fa87623f555e19076813f600b5f2e964770f"},
"membrane_ivf_plugin": {:hex, :membrane_ivf_plugin, "0.6.0", "3d92bd1e52304ba3bfeec83ee7b29e295a36447860a24ed018561e30e18cb14a", [:mix], [{:membrane_core, "~> 0.12.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "e74cee0a35f4512724d6b281f883ecf5b19a7d39bde53024916ee941335d40fc"},
"membrane_matroska_format": {:hex, :membrane_matroska_format, "0.1.0", "99902bac6c46cc783776038d91d7bb035a917933b260343204fd6261d911f039", [:mix], [], "hexpm", "8bf180165ea9bb4094673818df5989fe6bd44b752a86dc071daafe611af1f3cc"},
"membrane_mp4_format": {:hex, :membrane_mp4_format, "0.7.0", "0cc33f21dc571b43b4d2db66a056e2b7eecdc7ada71a9e0e923ab7a1554f15f2", [:mix], [], "hexpm", "7653a20e7b0c048ea05ffad6df88249abf4c1b63772c14dee843acffcad6b038"},
"membrane_mp4_plugin": {:hex, :membrane_mp4_plugin, "0.28.1", "ae539309907dc5e3c61b9bb64a5da04de89937f16aca97b907557375e580abd8", [:mix], [{:bunch, "~> 1.5", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_aac_format, "~> 0.7.1", [hex: :membrane_aac_format, repo: "hexpm", optional: false]}, {:membrane_cmaf_format, "~> 0.7.0", [hex: :membrane_cmaf_format, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.3", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_file_plugin, "~> 0.15.0", [hex: :membrane_file_plugin, repo: "hexpm", optional: false]}, {:membrane_h264_format, "~> 0.5.0", [hex: :membrane_h264_format, repo: "hexpm", optional: false]}, {:membrane_h264_plugin, "~> 0.6.0", [hex: :membrane_h264_plugin, repo: "hexpm", optional: false]}, {:membrane_mp4_format, "~> 0.7.0", [hex: :membrane_mp4_format, repo: "hexpm", optional: false]}, {:membrane_opus_format, "~> 0.3.0", [hex: :membrane_opus_format, repo: "hexpm", optional: false]}], "hexpm", "c66a894e650c57afc71dbe114a7f02ed543eda0dc4ea3f6359d7913bfe092a0b"},
"membrane_ogg_format": {:git, "https://github.com/membraneframework/membrane_ogg_format.git", "78058a97a226c0510ebca555bf0ba0c02e96dd13", []},
"membrane_ogg_plugin": {:git, "https://github.com/membraneframework-labs/membrane_libogg_plugin.git", "69e1381ba24b39ffcae4acc5027b384ab44fbf37", [tag: "v0.3.0"]},
"membrane_opus_format": {:hex, :membrane_opus_format, "0.3.0", "3804d9916058b7cfa2baa0131a644d8186198d64f52d592ae09e0942513cb4c2", [:mix], [], "hexpm", "8fc89c97be50de23ded15f2050fe603dcce732566fe6fdd15a2de01cb6b81afe"},
"membrane_opus_plugin": {:hex, :membrane_opus_plugin, "0.17.1", "533d694d8c6f38fbf7f09a514e16037e8980d167899d4c35cb5017b088122ce9", [:mix], [{:bunch, "~> 1.3", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_common_c, "~> 0.15.0", [hex: :membrane_common_c, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.3", [hex: :membrane_core, repo: "hexpm", optional: false]}, {:membrane_opus_format, "~> 0.3.0", [hex: :membrane_opus_format, repo: "hexpm", optional: false]}, {:membrane_raw_audio_format, "~> 0.11.0", [hex: :membrane_raw_audio_format, repo: "hexpm", optional: false]}, {:unifex, "~> 1.0", [hex: :unifex, repo: "hexpm", optional: false]}], "hexpm", "8d2bf3d97651f136fd393ce80c099a4f282bbe1dfafde887f8ab18668fd349aa"},
"membrane_raw_audio_format": {:hex, :membrane_raw_audio_format, "0.11.0", "9b7e8c77f321a3fa1cac2ef157c897938084b704a90ac5450d9f5c87a249b613", [:mix], [{:bimap, "~> 1.1", [hex: :bimap, repo: "hexpm", optional: false]}, {:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:membrane_core, "~> 0.12.0", [hex: :membrane_core, repo: "hexpm", optional: false]}], "hexpm", "89e0d46893b7cd63d1ab76467d3aae95bd8081e487b18ab0d1679c70d75f7bd8"},
"membrane_raw_video_format": {:hex, :membrane_raw_video_format, "0.3.0", "ba10f475e0814a6fe79602a74536b796047577c7ef5b0e33def27cd344229699", [:mix], [], "hexpm", "2f08760061c8a5386ecf04273480f10e48d25a1a40aa99476302b0bcd34ccb1c"},
"membrane_vp8_format": {:hex, :membrane_vp8_format, "0.4.0", "6c29ec67479edfbab27b11266dc92f18f3baf4421262c5c31af348c33e5b92c7", [:mix], [], "hexpm", "8bb005ede61db8fcb3535a883f32168b251c2dfd1109197c8c3b39ce28ed08e2"},
"membrane_vp9_format": {:hex, :membrane_vp9_format, "0.4.0", "d50a1711b846974bcd32721180e8b714adeaabfd6ef09400248ad8232c2b6d79", [:mix], [], "hexpm", "3817f30280ea2450054300cdda601b4f5c5ca62bae36e183b45386cc6b9883d5"},
"mockery": {:hex, :mockery, "2.3.1", "a02fd60b10ac9ed37a7a2ecf6786c1f1dd5c75d2b079a60594b089fba32dc087", [:mix], [], "hexpm", "1d0971d88ebf084e962da3f2cfee16f0ea8e04ff73a7710428500d4500b947fa"},
Expand Down
Loading

0 comments on commit 068a0f8

Please sign in to comment.