From 04d7fd3520ffe139e1106ecee97c9d97d164638b Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Wed, 15 Mar 2023 03:36:50 +0100 Subject: [PATCH 1/5] Add initial files for ustreamer --- camera-ustreamer/DOCS.md | 36 +++++++ camera-ustreamer/Dockerfile | 92 ++++++++++++++++ camera-ustreamer/README.md | 5 + camera-ustreamer/config.yaml | 28 +++++ camera-ustreamer/rootfs/etc/caddy/Caddyfile | 4 + .../rootfs/etc/services.d/proxy/finish | 9 ++ .../rootfs/etc/services.d/proxy/run | 11 ++ .../rootfs/etc/services.d/ustreamer/finish | 9 ++ .../rootfs/etc/services.d/ustreamer/run | 9 ++ .../etc/janus/janus.plugin.ustreamer.jcfg | 3 + camera-ustreamer/rootfs/server/index.html | 100 ++++++++++++++++++ 11 files changed, 306 insertions(+) create mode 100644 camera-ustreamer/DOCS.md create mode 100644 camera-ustreamer/Dockerfile create mode 100644 camera-ustreamer/README.md create mode 100644 camera-ustreamer/config.yaml create mode 100644 camera-ustreamer/rootfs/etc/caddy/Caddyfile create mode 100644 camera-ustreamer/rootfs/etc/services.d/proxy/finish create mode 100644 camera-ustreamer/rootfs/etc/services.d/proxy/run create mode 100644 camera-ustreamer/rootfs/etc/services.d/ustreamer/finish create mode 100644 camera-ustreamer/rootfs/etc/services.d/ustreamer/run create mode 100644 camera-ustreamer/rootfs/opt/janus/etc/janus/janus.plugin.ustreamer.jcfg create mode 100644 camera-ustreamer/rootfs/server/index.html diff --git a/camera-ustreamer/DOCS.md b/camera-ustreamer/DOCS.md new file mode 100644 index 0000000..c45cb93 --- /dev/null +++ b/camera-ustreamer/DOCS.md @@ -0,0 +1,36 @@ +# Documentation + +## Configuration + +- `mjpg_input`: Specify input arguments for mjpg_streamer. + +## How to use + +Set input arguments through `mjpg_input` configuration option, start the add-on. + +## Accessing camera from Home Assistant + +The camera stream and snapshot can be accessed by e.g. [MJPEG IP Camera](https://www.home-assistant.io/integrations/mjpeg/), with URLs: +* MJPEG URL: `http:///?action=stream` +* Still image URL: `http:///?action=snapshot`. + +Addon hostname can be found under [addon settings](https://my.home-assistant.io/redirect/supervisor_addon/?addon=b7aa59c4_camera-mjpg-streamer&repository_url=https%3A%2F%2Fgithub.com%2Ffredrikbaberg%2Fha-3dprinter-addons). + +## Ingress? + +Ingress support is included only to verify that the camera can be accessed. Streaming will most likely only work in the "JavaScript" tab. + +## Testing + +For testing you can set `mjpg_input` to: +> input_file.so -f /www_mjpg -e + +This will result in showing a test image. + +## Versions + +Some notes regarding the software and versions. +Not all software is installed for all images. + +- mjpg-streamer + - Compiled from [https://github.com/jacksonliam/mjpg-streamer](https://github.com/jacksonliam/mjpg-streamer). diff --git a/camera-ustreamer/Dockerfile b/camera-ustreamer/Dockerfile new file mode 100644 index 0000000..2b6ffcf --- /dev/null +++ b/camera-ustreamer/Dockerfile @@ -0,0 +1,92 @@ +ARG BUILD_FROM="ghcr.io/home-assistant/amd64-base" +ARG JANUS_GATEWAY_VERSION="1.1.3" +ARG USTREAMER_VERSION="5.38" + +FROM ${BUILD_FROM} AS builder +ARG JANUS_GATEWAY_VERSION +ARG USTREAMER_VERSION +ENV LANG C.UTF-8 + +# Janus +RUN apk add -U --virtual .build-deps-janus \ + build-base \ + autoconf \ + automake \ + libtool \ + libconfig-dev \ + glib-dev \ + libnice-dev \ + jansson-dev \ + openssl-dev \ + zlib-dev \ + libsrtp-dev \ + curl-dev \ + libogg-dev \ + libwebsockets-dev \ + libusrsctp-dev +RUN wget -qO- https://github.com/meetecho/janus-gateway/archive/v${JANUS_GATEWAY_VERSION}.tar.gz | tar xz -C /tmp +WORKDIR /tmp/janus-gateway-${JANUS_GATEWAY_VERSION} +RUN sh autogen.sh +RUN ./configure --prefix=/opt/janus +RUN make +RUN make install +RUN make configs + +# Ustreamer +RUN apk add -U --virtual .build-deps-ustreamer \ + sed \ + build-base \ + libevent-dev \ + libbsd-dev \ + libjpeg-turbo-dev \ + musl-dev \ + alsa-lib-dev \ + speexdsp-dev \ + opus-dev \ + glib-dev \ + jansson-dev +RUN wget -qO- https://github.com/pikvm/ustreamer/archive/v${USTREAMER_VERSION}.tar.gz | tar xz -C /tmp +WORKDIR /tmp/ustreamer-${USTREAMER_VERSION} +RUN ln -s /opt/janus/include/janus /usr/include/janus +RUN sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h +RUN make WITH_PTHREAD_NP=0 WITH_JANUS=1 +RUN make install +RUN mv janus/libjanus_ustreamer.so /opt/janus/lib/janus/plugins/libjanus_ustreamer.so + +FROM ${BUILD_FROM} AS final +ENV LANG C.UTF-8 + +RUN apk add -U \ + alsa-lib \ + curl \ + glib \ + glib \ + jansson \ + jansson \ + libbsd \ + libconfig \ + libevent \ + libjpeg-turbo \ + libnice \ + libogg \ + libsrtp \ + libtool \ + libusrsctp \ + libwebsockets \ + musl \ + openssl \ + opus \ + speexdsp \ + zlib \ + caddy + +COPY --from=builder /opt/janus /opt/janus +COPY --from=builder /usr/local/bin/ustreamer /usr/local/bin/ustreamer + +COPY rootfs/ / + +WORKDIR / + +# # Make files executable +# # RUN chmod +x /etc/cont-init.d/*.sh +# # RUN chmod +x /etc/services.d/*/* diff --git a/camera-ustreamer/README.md b/camera-ustreamer/README.md new file mode 100644 index 0000000..e010b0c --- /dev/null +++ b/camera-ustreamer/README.md @@ -0,0 +1,5 @@ +# mjpg-streamer + +Provides camera stream through `mjpg-streamer`, to be used by e.g. OctoPrint addon. + +Instructions are provided in the tab "Docs". diff --git a/camera-ustreamer/config.yaml b/camera-ustreamer/config.yaml new file mode 100644 index 0000000..7bc9e7f --- /dev/null +++ b/camera-ustreamer/config.yaml @@ -0,0 +1,28 @@ +name: "Camera-mjpg-streamer" +version: "2022.7.0" +slug: "camera-mjpg-streamer" +description: "Camera streaming addon for Home Assistant, based on mjpg-streamer." +url: "https://github.com/fredrikbaberg/ha-3dprinter-addons/tree/main/camera-mjpg-streamer" +ingress: true +ingress_stream: true +panel_icon: mdi:camera +panel_title: mjpg-streamer +arch: + - armv7 + - amd64 + - armhf + - aarch64 + - i386 +stage: experimental +init: false +video: true +usb: true +ports: + 80/tcp: null +ports_description: + 80/tcp: Web-based interface (Not required for Ingress) +options: + mjpg_input: "input_uvc.so -n" +schema: + mjpg_input: "str" +image: ghcr.io/fredrikbaberg/ha-addon-camera-mjpg-streamer-{arch} diff --git a/camera-ustreamer/rootfs/etc/caddy/Caddyfile b/camera-ustreamer/rootfs/etc/caddy/Caddyfile new file mode 100644 index 0000000..278b20f --- /dev/null +++ b/camera-ustreamer/rootfs/etc/caddy/Caddyfile @@ -0,0 +1,4 @@ +localhost + +root * /server +file_server \ No newline at end of file diff --git a/camera-ustreamer/rootfs/etc/services.d/proxy/finish b/camera-ustreamer/rootfs/etc/services.d/proxy/finish new file mode 100644 index 0000000..382feb6 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/services.d/proxy/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Add-on: mjpg-streamer +# Take down the S6 supervision tree when Nginx fails +# ============================================================================== +if -n { s6-test $# -ne 0 } +if -n { s6-test ${1} -eq 256 } + +s6-svscanctl -t /var/run/s6/services diff --git a/camera-ustreamer/rootfs/etc/services.d/proxy/run b/camera-ustreamer/rootfs/etc/services.d/proxy/run new file mode 100644 index 0000000..c792302 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/services.d/proxy/run @@ -0,0 +1,11 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Add-on: mjpg-streamer +# Runs the Nginx daemon +# ============================================================================== + +# Wait for aiortc web server to be available +bashio::net.wait_for 80 + +bashio::log.info "Starting proxy..." +# exec caddy run -config /etc/caddy/Caddyfile diff --git a/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish b/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish new file mode 100644 index 0000000..1ecc5e9 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Add-on: mjpg-streamer +# Take down the S6 supervision tree when mjpg-streamer fails +# ============================================================================== +if -n { s6-test $# -ne 0 } +if -n { s6-test ${1} -eq 256 } + +s6-svscanctl -t /var/run/s6/services diff --git a/camera-ustreamer/rootfs/etc/services.d/ustreamer/run b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run new file mode 100644 index 0000000..52f5786 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run @@ -0,0 +1,9 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Add-on: mjpg-streamer +# Runs mjpg-streamer +# ============================================================================== + +bashio::log.info "Starting mjpg-streamer.." + +mjpg_streamer -i "$(bashio::config 'mjpg_input')" -o "output_http.so -w /www_mjpg -p 80" diff --git a/camera-ustreamer/rootfs/opt/janus/etc/janus/janus.plugin.ustreamer.jcfg b/camera-ustreamer/rootfs/opt/janus/etc/janus/janus.plugin.ustreamer.jcfg new file mode 100644 index 0000000..0b87836 --- /dev/null +++ b/camera-ustreamer/rootfs/opt/janus/etc/janus/janus.plugin.ustreamer.jcfg @@ -0,0 +1,3 @@ +memsink: { + object = "demo::ustreamer::h264" +} \ No newline at end of file diff --git a/camera-ustreamer/rootfs/server/index.html b/camera-ustreamer/rootfs/server/index.html new file mode 100644 index 0000000..4afba9d --- /dev/null +++ b/camera-ustreamer/rootfs/server/index.html @@ -0,0 +1,100 @@ + + + + + µStreamer H.264 demo + + + + + + + + + + \ No newline at end of file From 6cdff6ea0bce445ed7cebc0853dfcee7d10fbcdd Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Wed, 15 Mar 2023 11:37:35 +0100 Subject: [PATCH 2/5] Start with HA s6 config --- camera-ustreamer/Dockerfile | 6 ++--- camera-ustreamer/rootfs/etc/caddy/Caddyfile | 14 +++++++++--- .../rootfs/etc/cont-init.d/proxy.sh | 22 +++++++++++++++++++ .../rootfs/etc/services.d/janus/down | 0 .../rootfs/etc/services.d/janus/run | 9 ++++++++ .../rootfs/etc/services.d/proxy/finish | 9 -------- .../rootfs/etc/services.d/proxy/run | 9 +++----- .../rootfs/etc/services.d/ustreamer/finish | 4 ++-- .../rootfs/etc/services.d/ustreamer/run | 3 ++- 9 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh create mode 100644 camera-ustreamer/rootfs/etc/services.d/janus/down create mode 100644 camera-ustreamer/rootfs/etc/services.d/janus/run delete mode 100644 camera-ustreamer/rootfs/etc/services.d/proxy/finish diff --git a/camera-ustreamer/Dockerfile b/camera-ustreamer/Dockerfile index 2b6ffcf..be2a709 100644 --- a/camera-ustreamer/Dockerfile +++ b/camera-ustreamer/Dockerfile @@ -56,6 +56,9 @@ RUN mv janus/libjanus_ustreamer.so /opt/janus/lib/janus/plugins/libjanus_ustream FROM ${BUILD_FROM} AS final ENV LANG C.UTF-8 +COPY --from=builder /opt/janus /opt/janus +COPY --from=builder /usr/local/bin/ustreamer /usr/local/bin/ustreamer + RUN apk add -U \ alsa-lib \ curl \ @@ -80,9 +83,6 @@ RUN apk add -U \ zlib \ caddy -COPY --from=builder /opt/janus /opt/janus -COPY --from=builder /usr/local/bin/ustreamer /usr/local/bin/ustreamer - COPY rootfs/ / WORKDIR / diff --git a/camera-ustreamer/rootfs/etc/caddy/Caddyfile b/camera-ustreamer/rootfs/etc/caddy/Caddyfile index 278b20f..eaa6af7 100644 --- a/camera-ustreamer/rootfs/etc/caddy/Caddyfile +++ b/camera-ustreamer/rootfs/etc/caddy/Caddyfile @@ -1,4 +1,12 @@ -localhost +# Ingress +:8099 { + @blocked not remote_ip 172.30.32.2 + respond @blocked "This is only for access through Ingress" 403 + reverse_proxy 127.0.0.1:8080 +} -root * /server -file_server \ No newline at end of file +# External access +:8080 { + root * /opt/janus/share/janus/demos + file_server +} diff --git a/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh b/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh new file mode 100644 index 0000000..c84e750 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh @@ -0,0 +1,22 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Add-on: aiortc +# Configures NGINX for use with aiortc +# ============================================================================== + +# Generate Ingress configuration +bashio::var.json \ + interface "$(bashio::addon.ip_address)" \ + port "^$(bashio::addon.ingress_port)" \ + | tempio \ + -template /etc/nginx/templates/ingress.gtpl \ + -out /etc/nginx/servers/ingress.conf + +# Generate direct access configuration, if enabled. +if bashio::var.has_value "$(bashio::addon.port 80)"; then + bashio::var.json \ + port "^$(bashio::addon.port 80)" \ + | tempio \ + -template /etc/nginx/templates/direct.gtpl \ + -out /etc/nginx/servers/direct.conf +fi diff --git a/camera-ustreamer/rootfs/etc/services.d/janus/down b/camera-ustreamer/rootfs/etc/services.d/janus/down new file mode 100644 index 0000000..e69de29 diff --git a/camera-ustreamer/rootfs/etc/services.d/janus/run b/camera-ustreamer/rootfs/etc/services.d/janus/run new file mode 100644 index 0000000..fd58df9 --- /dev/null +++ b/camera-ustreamer/rootfs/etc/services.d/janus/run @@ -0,0 +1,9 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Add-on: camera-ustreamer +# Runs janus +# ============================================================================== + +bashio::log.info "Starting janus.." + +exec /opt/janus/bin/janus \ No newline at end of file diff --git a/camera-ustreamer/rootfs/etc/services.d/proxy/finish b/camera-ustreamer/rootfs/etc/services.d/proxy/finish deleted file mode 100644 index 382feb6..0000000 --- a/camera-ustreamer/rootfs/etc/services.d/proxy/finish +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/execlineb -S0 -# ============================================================================== -# Add-on: mjpg-streamer -# Take down the S6 supervision tree when Nginx fails -# ============================================================================== -if -n { s6-test $# -ne 0 } -if -n { s6-test ${1} -eq 256 } - -s6-svscanctl -t /var/run/s6/services diff --git a/camera-ustreamer/rootfs/etc/services.d/proxy/run b/camera-ustreamer/rootfs/etc/services.d/proxy/run index c792302..bf53c03 100644 --- a/camera-ustreamer/rootfs/etc/services.d/proxy/run +++ b/camera-ustreamer/rootfs/etc/services.d/proxy/run @@ -1,11 +1,8 @@ #!/usr/bin/with-contenv bashio # ============================================================================== -# Add-on: mjpg-streamer -# Runs the Nginx daemon +# Add-on: camera-ustreamer +# Runs the proxy daemon # ============================================================================== -# Wait for aiortc web server to be available -bashio::net.wait_for 80 - bashio::log.info "Starting proxy..." -# exec caddy run -config /etc/caddy/Caddyfile +exec caddy run -config /etc/caddy/Caddyfile diff --git a/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish b/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish index 1ecc5e9..0ef5ffe 100644 --- a/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish +++ b/camera-ustreamer/rootfs/etc/services.d/ustreamer/finish @@ -1,7 +1,7 @@ #!/usr/bin/execlineb -S0 # ============================================================================== -# Add-on: mjpg-streamer -# Take down the S6 supervision tree when mjpg-streamer fails +# Add-on: camera-ustreamer +# Take down the S6 supervision tree when ustreamer fails # ============================================================================== if -n { s6-test $# -ne 0 } if -n { s6-test ${1} -eq 256 } diff --git a/camera-ustreamer/rootfs/etc/services.d/ustreamer/run b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run index 52f5786..ff07ea4 100644 --- a/camera-ustreamer/rootfs/etc/services.d/ustreamer/run +++ b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run @@ -6,4 +6,5 @@ bashio::log.info "Starting mjpg-streamer.." -mjpg_streamer -i "$(bashio::config 'mjpg_input')" -o "output_http.so -w /www_mjpg -p 80" +# mjpg_streamer -i "$(bashio::config 'mjpg_input')" -o "output_http.so -w /www_mjpg -p 80" +exec ustreamer --host=127.0.0.1 --port=80 \ No newline at end of file From 5af6182cbd8216b55f125a37387df613953837cc Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Thu, 16 Mar 2023 12:02:45 +0100 Subject: [PATCH 3/5] Prepare for test on device --- camera-ustreamer/Dockerfile | 8 ++-- camera-ustreamer/build.yaml | 7 ++++ camera-ustreamer/config.yaml | 22 +++++----- camera-ustreamer/rootfs/etc/caddy/Caddyfile | 18 ++++++--- .../rootfs/etc/cont-init.d/proxy.sh | 40 +++++++++---------- .../rootfs/etc/services.d/janus/run | 2 +- .../rootfs/etc/services.d/ustreamer/run | 2 +- 7 files changed, 57 insertions(+), 42 deletions(-) create mode 100644 camera-ustreamer/build.yaml diff --git a/camera-ustreamer/Dockerfile b/camera-ustreamer/Dockerfile index be2a709..9cf43fe 100644 --- a/camera-ustreamer/Dockerfile +++ b/camera-ustreamer/Dockerfile @@ -81,12 +81,14 @@ RUN apk add -U \ opus \ speexdsp \ zlib \ - caddy + caddy \ + vim \ + screen COPY rootfs/ / WORKDIR / # # Make files executable -# # RUN chmod +x /etc/cont-init.d/*.sh -# # RUN chmod +x /etc/services.d/*/* +# RUN chmod +x /etc/cont-init.d/*.sh +# RUN chmod +x /etc/services.d/*/* diff --git a/camera-ustreamer/build.yaml b/camera-ustreamer/build.yaml new file mode 100644 index 0000000..5f575c8 --- /dev/null +++ b/camera-ustreamer/build.yaml @@ -0,0 +1,7 @@ +labels: + org.opencontainers.image.title: "Home Assistant Add-on: Camera-ustreamer" + org.opencontainers.image.description: "ustreamer addon for Home-Assistant." + org.opencontainers.image.source: "https://github.com/fredrikbaberg/ha-3dprinter-addons" +args: + JANUS_GATEWAY_VERSION: "1.1.3" + USTREAMER_VERSION: "5.38" \ No newline at end of file diff --git a/camera-ustreamer/config.yaml b/camera-ustreamer/config.yaml index 7bc9e7f..d62d002 100644 --- a/camera-ustreamer/config.yaml +++ b/camera-ustreamer/config.yaml @@ -1,12 +1,12 @@ -name: "Camera-mjpg-streamer" -version: "2022.7.0" -slug: "camera-mjpg-streamer" -description: "Camera streaming addon for Home Assistant, based on mjpg-streamer." -url: "https://github.com/fredrikbaberg/ha-3dprinter-addons/tree/main/camera-mjpg-streamer" +name: "Camera-ustreamer" +version: "2023.3.0-rc0" +slug: "camera-ustreamer" +description: "Camera streaming addon for Home Assistant, based on ustreamer." +url: "https://github.com/fredrikbaberg/ha-3dprinter-addons/tree/main/camera-ustreamer" ingress: true ingress_stream: true panel_icon: mdi:camera -panel_title: mjpg-streamer +panel_title: ustreamer arch: - armv7 - amd64 @@ -21,8 +21,8 @@ ports: 80/tcp: null ports_description: 80/tcp: Web-based interface (Not required for Ingress) -options: - mjpg_input: "input_uvc.so -n" -schema: - mjpg_input: "str" -image: ghcr.io/fredrikbaberg/ha-addon-camera-mjpg-streamer-{arch} +# options: +# mjpg_input: "input_uvc.so -n" +# schema: +# mjpg_input: "str" +# image: ghcr.io/fredrikbaberg/ha-addon-camera-ustreamer-{arch} diff --git a/camera-ustreamer/rootfs/etc/caddy/Caddyfile b/camera-ustreamer/rootfs/etc/caddy/Caddyfile index eaa6af7..e2d3284 100644 --- a/camera-ustreamer/rootfs/etc/caddy/Caddyfile +++ b/camera-ustreamer/rootfs/etc/caddy/Caddyfile @@ -1,12 +1,18 @@ # Ingress :8099 { - @blocked not remote_ip 172.30.32.2 - respond @blocked "This is only for access through Ingress" 403 - reverse_proxy 127.0.0.1:8080 + # @blocked not remote_ip 172.30.32.2 + # respond @blocked "This is only for access through Ingress" 403 + handle_path /janus/* { + reverse_proxy localhost:8188 # Janus API + } + reverse_proxy 127.0.0.1:8080 # ustreamer } # External access -:8080 { - root * /opt/janus/share/janus/demos - file_server +:80 { + root * /opt/janus/share/janus/demos + handle_path /janus/* { + reverse_proxy localhost:8188 # Janus API + } + file_server # Janus demo } diff --git a/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh b/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh index c84e750..880841e 100644 --- a/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh +++ b/camera-ustreamer/rootfs/etc/cont-init.d/proxy.sh @@ -1,22 +1,22 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Add-on: aiortc -# Configures NGINX for use with aiortc -# ============================================================================== +# #!/usr/bin/with-contenv bashio +# # ============================================================================== +# # Add-on: aiortc +# # Configures NGINX for use with aiortc +# # ============================================================================== -# Generate Ingress configuration -bashio::var.json \ - interface "$(bashio::addon.ip_address)" \ - port "^$(bashio::addon.ingress_port)" \ - | tempio \ - -template /etc/nginx/templates/ingress.gtpl \ - -out /etc/nginx/servers/ingress.conf +# # Generate Ingress configuration +# bashio::var.json \ +# interface "$(bashio::addon.ip_address)" \ +# port "^$(bashio::addon.ingress_port)" \ +# | tempio \ +# -template /etc/nginx/templates/ingress.gtpl \ +# -out /etc/nginx/servers/ingress.conf -# Generate direct access configuration, if enabled. -if bashio::var.has_value "$(bashio::addon.port 80)"; then - bashio::var.json \ - port "^$(bashio::addon.port 80)" \ - | tempio \ - -template /etc/nginx/templates/direct.gtpl \ - -out /etc/nginx/servers/direct.conf -fi +# # Generate direct access configuration, if enabled. +# if bashio::var.has_value "$(bashio::addon.port 80)"; then +# bashio::var.json \ +# port "^$(bashio::addon.port 80)" \ +# | tempio \ +# -template /etc/nginx/templates/direct.gtpl \ +# -out /etc/nginx/servers/direct.conf +# fi diff --git a/camera-ustreamer/rootfs/etc/services.d/janus/run b/camera-ustreamer/rootfs/etc/services.d/janus/run index fd58df9..f7aa02d 100644 --- a/camera-ustreamer/rootfs/etc/services.d/janus/run +++ b/camera-ustreamer/rootfs/etc/services.d/janus/run @@ -6,4 +6,4 @@ bashio::log.info "Starting janus.." -exec /opt/janus/bin/janus \ No newline at end of file +exec /opt/janus/bin/janus --configs-folder /opt/janus/etc/janus/ --plugins-folder /opt/janus/lib/janus/plugins/ diff --git a/camera-ustreamer/rootfs/etc/services.d/ustreamer/run b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run index ff07ea4..1e2d900 100644 --- a/camera-ustreamer/rootfs/etc/services.d/ustreamer/run +++ b/camera-ustreamer/rootfs/etc/services.d/ustreamer/run @@ -7,4 +7,4 @@ bashio::log.info "Starting mjpg-streamer.." # mjpg_streamer -i "$(bashio::config 'mjpg_input')" -o "output_http.so -w /www_mjpg -p 80" -exec ustreamer --host=127.0.0.1 --port=80 \ No newline at end of file +exec ustreamer --host=127.0.0.1 --h264-sink demo::ustreamer::h264 --h264-sink-mode 660 --h264-sink-rm \ No newline at end of file From 78067704d048584845c4a09173f3b91c97372465 Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Thu, 16 Mar 2023 12:25:01 +0100 Subject: [PATCH 4/5] Update docs and workflow --- .github/workflows/camera-ustreamer.yml | 54 ++++++++++++++++++++++++++ camera-ustreamer/DOCS.md | 35 +---------------- camera-ustreamer/README.md | 6 ++- camera-ustreamer/config.yaml | 2 +- 4 files changed, 60 insertions(+), 37 deletions(-) create mode 100644 .github/workflows/camera-ustreamer.yml diff --git a/.github/workflows/camera-ustreamer.yml b/.github/workflows/camera-ustreamer.yml new file mode 100644 index 0000000..6c57d9e --- /dev/null +++ b/.github/workflows/camera-ustreamer.yml @@ -0,0 +1,54 @@ +name: camera-ustreamer manual build + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on + strategy: + matrix: + addon: ["camera-ustreamer"] + arch: ["aarch64", "amd64", "armhf", "armv7", "i386"] + steps: + - name: Check out the repository + uses: actions/checkout@v3 + + - name: Get information + id: info + uses: home-assistant/actions/helpers/info@master + with: + path: "./${{ matrix.addon }}" + + - name: Check if add-on should be built + id: check + run: | + if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then + echo "::set-output name=build_arch::true"; + echo "::set-output name=image::$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)"; + else + echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build"; + echo "::set-output name=build_arch::false"; + fi + + - name: Login to GitHub Container Registry + if: env.BUILD_ARGS != '--test' + uses: docker/login-action@v2.1.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build ${{ matrix.addon }} add-on + if: steps.check.outputs.build_arch == 'true' + uses: home-assistant/builder@2023.03.0 + with: + args: | + ${{ env.BUILD_ARGS }} \ + --${{ matrix.arch }} \ + --target /data/${{ matrix.addon }} \ + --image "${{ steps.check.outputs.image }}" \ + --docker-hub "ghcr.io/${{ github.repository_owner }}" \ + --addon \ + --docker-hub-check diff --git a/camera-ustreamer/DOCS.md b/camera-ustreamer/DOCS.md index c45cb93..18156e9 100644 --- a/camera-ustreamer/DOCS.md +++ b/camera-ustreamer/DOCS.md @@ -1,36 +1,3 @@ # Documentation -## Configuration - -- `mjpg_input`: Specify input arguments for mjpg_streamer. - -## How to use - -Set input arguments through `mjpg_input` configuration option, start the add-on. - -## Accessing camera from Home Assistant - -The camera stream and snapshot can be accessed by e.g. [MJPEG IP Camera](https://www.home-assistant.io/integrations/mjpeg/), with URLs: -* MJPEG URL: `http:///?action=stream` -* Still image URL: `http:///?action=snapshot`. - -Addon hostname can be found under [addon settings](https://my.home-assistant.io/redirect/supervisor_addon/?addon=b7aa59c4_camera-mjpg-streamer&repository_url=https%3A%2F%2Fgithub.com%2Ffredrikbaberg%2Fha-3dprinter-addons). - -## Ingress? - -Ingress support is included only to verify that the camera can be accessed. Streaming will most likely only work in the "JavaScript" tab. - -## Testing - -For testing you can set `mjpg_input` to: -> input_file.so -f /www_mjpg -e - -This will result in showing a test image. - -## Versions - -Some notes regarding the software and versions. -Not all software is installed for all images. - -- mjpg-streamer - - Compiled from [https://github.com/jacksonliam/mjpg-streamer](https://github.com/jacksonliam/mjpg-streamer). +@TODO diff --git a/camera-ustreamer/README.md b/camera-ustreamer/README.md index e010b0c..1f05d8f 100644 --- a/camera-ustreamer/README.md +++ b/camera-ustreamer/README.md @@ -1,5 +1,7 @@ -# mjpg-streamer +# ustreamer -Provides camera stream through `mjpg-streamer`, to be used by e.g. OctoPrint addon. +**Work in progress!** + +Provides camera stream through `ustreamer`, to be used by e.g. OctoPrint addon. Instructions are provided in the tab "Docs". diff --git a/camera-ustreamer/config.yaml b/camera-ustreamer/config.yaml index d62d002..af17488 100644 --- a/camera-ustreamer/config.yaml +++ b/camera-ustreamer/config.yaml @@ -25,4 +25,4 @@ ports_description: # mjpg_input: "input_uvc.so -n" # schema: # mjpg_input: "str" -# image: ghcr.io/fredrikbaberg/ha-addon-camera-ustreamer-{arch} +image: ghcr.io/fredrikbaberg/ha-addon-camera-ustreamer-{arch} From 70443100a8b52a4943bb2c75b694b23b20316e16 Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Thu, 16 Mar 2023 12:28:56 +0100 Subject: [PATCH 5/5] Remove build.yaml --- camera-ustreamer/build.yaml | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 camera-ustreamer/build.yaml diff --git a/camera-ustreamer/build.yaml b/camera-ustreamer/build.yaml deleted file mode 100644 index 5f575c8..0000000 --- a/camera-ustreamer/build.yaml +++ /dev/null @@ -1,7 +0,0 @@ -labels: - org.opencontainers.image.title: "Home Assistant Add-on: Camera-ustreamer" - org.opencontainers.image.description: "ustreamer addon for Home-Assistant." - org.opencontainers.image.source: "https://github.com/fredrikbaberg/ha-3dprinter-addons" -args: - JANUS_GATEWAY_VERSION: "1.1.3" - USTREAMER_VERSION: "5.38" \ No newline at end of file