Packages
membrane_hls_plugin
3.0.2
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
Adaptive live streaming (HLS) plugin for the Membrane Framework.
Current section
Files
Jump to
Current section
Files
lib/membrane/hls.ex
defmodule Membrane.HLS do
require Logger
def maybe_warn_deprecated_stream_fields(_track_id, stream)
when not is_struct(stream, HLS.VariantStream),
do: :ok
def maybe_warn_deprecated_stream_fields(track_id, %HLS.VariantStream{} = stream) do
if stream.bandwidth do
Logger.warning(
"[DEPRECATED] build_stream for track #{inspect(track_id)} sets VariantStream.bandwidth. " <>
"Bandwidth is now computed automatically by SinkBin/Packager and user-provided values are ignored over time."
)
end
if stream.codecs not in [nil, []] do
Logger.warning(
"[DEPRECATED] build_stream for track #{inspect(track_id)} sets VariantStream.codecs. " <>
"CODECS are now computed automatically from stream formats when available."
)
end
:ok
end
def serialize_codecs(codecs) do
codecs
|> Enum.map(&serialize_codec(&1))
|> Enum.reject(&is_nil/1)
end
defp serialize_codec({:avc1, %{profile: profile, compatibility: compatibility, level: level}}) do
[profile, compatibility, level]
|> Enum.map(&Integer.to_string(&1, 16))
|> Enum.map_join(&String.pad_leading(&1, 2, "0"))
|> then(&"avc1.#{&1}")
|> String.downcase()
end
defp serialize_codec({:hvc1, %{profile: profile, level: level}}),
do: "hvc1.#{profile}.4.L#{level}.B0"
defp serialize_codec({:mp4a, %{aot_id: aot_id}}), do: String.downcase("mp4a.40.#{aot_id}")
defp serialize_codec(_other), do: nil
end