lib/exstream_web/router.ex

defmodule Exstream.Router do
  use Plug.Router

  plug(:match)
  plug(:dispatch)

  get "/" do
    conn
    |> put_resp_content_type("text/html")
    |> send_file(200, Path.absname("lib/exstream_web/index.html"))
  end

  get "/segment:query" do
    %{"start" => start, "end" => finish} = fetch_query_params(conn).query_params

    Exstream.stream(%Exstream{
      conn: conn,
      path: "priv/h264-mp3.mkv",
      start: start,
      end: finish
    })
  end

  get "/playlist.m3u8" do
    conn
    |> send_resp(
      200,
      Exstream.Playlist.build(%Exstream.Playlist{
        duration: "00:00:30",
        url: "/segment?token=some-token"
      })
    )
  end

  get "/range.mp4" do
    Exstream.Range.stream(%Exstream.Range{conn: conn, path: "priv/h264-mp3.mkv"})
  end


  match _ do
    send_resp(conn, 404, "Oops!")
  end
end