Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The package can be installed by adding `ex_hls` to your list of dependencies in
```elixir
def deps do
[
{:ex_hls, "~> 0.1.2"}
{:ex_hls, "~> 0.1.3"}
]
end
```
Expand Down
9 changes: 1 addition & 8 deletions lib/ex_hls/client/live/reader.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ defmodule ExHLS.Client.Live.Reader do

alias ExHLS.Client.Live.Forwarder
alias ExHLS.Client.Utils
alias ExHLS.DemuxingEngine

alias ExM3U8.Tags.{MediaInit, Segment}

Expand Down Expand Up @@ -391,13 +390,7 @@ defmodule ExHLS.Client.Live.Reader do
defp doesnt_exist_or_empty?([track_data]), do: track_data.empty?

defp maybe_resolve_demuxing_engine(segment_uri, %{demuxing_engine: nil} = state) do
demuxing_engine_impl =
case Path.extname(segment_uri) do
".ts" -> DemuxingEngine.MPEGTS
".m4s" -> DemuxingEngine.CMAF
".mp4" -> DemuxingEngine.CMAF
_other -> raise "Unsupported segment URI extension: #{segment_uri |> inspect()}"
end
demuxing_engine_impl = Utils.resolve_demuxing_engine_impl(segment_uri)

%{
state
Expand Down
11 changes: 11 additions & 0 deletions lib/ex_hls/client/utils.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ defmodule ExHLS.Client.Utils do

require Logger

alias ExHLS.DemuxingEngine
alias Membrane.{AAC, H264, RemoteStream}

@spec download_or_read_file!(String.t()) :: binary()
Expand Down Expand Up @@ -40,4 +41,14 @@ defmodule ExHLS.Client.Utils do
def stream_format_to_media_type(%AAC{}), do: :audio
def stream_format_to_media_type(%RemoteStream{content_format: H264}), do: :video
def stream_format_to_media_type(%RemoteStream{content_format: AAC}), do: :audio

@spec resolve_demuxing_engine_impl(String.t()) :: atom()
def resolve_demuxing_engine_impl(segment_uri) do
case Path.extname(segment_uri) do
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the more proper way to do it would be to do:

URI.parse!(segment_uri).path 
|> Path.extname()
|> case do
         ".ts" -> DemuxingEngine.MPEGTS
        ".m4s" -> DemuxingEngine.CMAF
        ".mp4" -> DemuxingEngine.CMAF
        _other -> raise "Unsupported segment URI extension: #{segment_uri |> inspect()}"
end

because this way we let URI retrieve the proper "path" for us, which we can later use with Path.extname().

".ts" <> _id -> DemuxingEngine.MPEGTS
".m4s" <> _id -> DemuxingEngine.CMAF
".mp4" <> _id -> DemuxingEngine.CMAF
_other -> raise "Unsupported segment URI extension: #{segment_uri |> inspect()}"
end
end
end
9 changes: 1 addition & 8 deletions lib/ex_hls/client/vod.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ defmodule ExHLS.Client.VOD do
require Logger

alias ExHLS.Client.Utils
alias ExHLS.DemuxingEngine
alias ExM3U8.Tags.Segment
alias Membrane.{AAC, H264, RemoteStream}

Expand Down Expand Up @@ -280,13 +279,7 @@ defmodule ExHLS.Client.VOD do
end

defp ensure_demuxing_engine_resolved(%{demuxing_engine: nil} = client, segment_uri) do
demuxing_engine_impl =
case Path.extname(segment_uri) do
".ts" -> DemuxingEngine.MPEGTS
".m4s" -> DemuxingEngine.CMAF
".mp4" -> DemuxingEngine.CMAF
_other -> raise "Unsupported segment URI extension: #{segment_uri |> inspect()}"
end
demuxing_engine_impl = Utils.resolve_demuxing_engine_impl(segment_uri)

%{
client
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule ExHLS.Mixfile do
use Mix.Project

@version "0.1.2"
@version "0.1.3"
@github_url "https://github.com/membraneframework/ex_hls"

def project do
Expand Down