{ lib
, stdenv
, fetchFromGitHub
, libbsd
, libevent
, libjpeg
, libdrm
, pkg-config
, janus-gateway
, glib
, alsa-lib
, speex
, jansson
, libopus
, withJanus ? true
}:
stdenv.mkDerivation rec {
  pname = "ustreamer";
  version = "6.12";

  src = fetchFromGitHub {
    owner = "pikvm";
    repo = "ustreamer";
    rev = "v${version}";
    hash = "sha256-iaCgPHgklk7tbhJhQmyjKggb1bMWBD+Zurgfk9sCQ3E=";
  };

  buildInputs = [
    libbsd
    libevent
    libjpeg
    libdrm
  ] ++ lib.optionals withJanus [
    janus-gateway
    glib
    alsa-lib
    jansson
    speex
    libopus
  ];

  nativeBuildInputs = [ pkg-config ];

  makeFlags = [
    "PREFIX=${placeholder "out"}"
    "WITH_V4P=1"
  ] ++ lib.optionals withJanus [
    "WITH_JANUS=1"
    # Workaround issues with Janus C Headers
    # https://github.com/pikvm/ustreamer/blob/793f24c4/docs/h264.md#fixing-janus-c-headers
    "CFLAGS=-I${lib.getDev janus-gateway}/include/janus"
  ];

  enableParallelBuilding = true;

  meta = with lib; {
    homepage = "https://github.com/pikvm/ustreamer";
    description = "Lightweight and fast MJPG-HTTP streamer";
    longDescription = ''
      µStreamer is a lightweight and very quick server to stream MJPG video from
      any V4L2 device to the net. All new browsers have native support of this
      video format, as well as most video players such as mplayer, VLC etc.
      µStreamer is a part of the Pi-KVM project designed to stream VGA and HDMI
      screencast hardware data with the highest resolution and FPS possible.
    '';
    license = licenses.gpl3Plus;
    maintainers = with maintainers; [ tfc matthewcroughan ];
    platforms = platforms.linux;
  };
}
