From a080b68a79703e0bf9800ab2d647737dcedb13d6 Mon Sep 17 00:00:00 2001 From: Mathias Koehler Date: Fri, 28 Apr 2023 07:25:41 +0200 Subject: [PATCH] Initial commit --- stream.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ testvideo.sh | 12 ++++++++++++ 2 files changed, 61 insertions(+) create mode 100755 stream.sh create mode 100755 testvideo.sh diff --git a/stream.sh b/stream.sh new file mode 100755 index 0000000..871d1d2 --- /dev/null +++ b/stream.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if ! command -v inotifywait >/dev/null 2>&1; then + echo "Please install inotify_utils" + exit 1 +fi + + +declare -A STREAMS + + +streaming() { + while true; do + echo "Streaming $1" + #echo ffmpeg -loglevel -8 -f v4l2 -framerate 30 -input_format mjpeg -i "/dev/$1" -f libndi_newtek -y "$1" + ~/ndi/ffmpeg/ffmpeg -f v4l2 -framerate 30 -input_format mjpeg -i "/dev/$1" -pix_fmt uyvy422 -f libndi_newtek -y "$1.mov" + echo "Failed $1; Restarting" + sleep 1 + done +} + + +check_initial_devices() { + for file in /dev/video*; do + echo "Found ${file##*/}" + (streaming "${file##*/}") & + STREAMS[$file]=$! + echo "${file##*/} PID ${STREAMS[$file]}" + done +} + + +listen_for_new_devices() { + inotifywait -m /dev --format "%f" -e create | + while read -r file; do + echo "Found $file" + if [[ -v "STREAMS[$file]" && "$file" =~ video\d+$ ]]; then + (streaming "$file") & + STREAMS[$file]=$! + echo "$file PID ${STREAMS[$file]}" + fi + done +} + + +check_initial_devices +listen_for_new_devices diff --git a/testvideo.sh b/testvideo.sh new file mode 100755 index 0000000..b06ce81 --- /dev/null +++ b/testvideo.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +~/ndi/ffmpeg/ffmpeg \ + -s 1280x720 \ + -framerate '30' \ + -f rawvideo \ + -pix_fmt rgb24 \ + -i /dev/zero \ + -vf "drawbox=enable='mod(n,2)':w=iw:h=ih:c=green:t=ih*0.02,drawbox=enable='not(mod(n,2))':w=iw:h=ih:c=blue:t=ih*0.02,drawtext=text='':timecode='00\:00\:00\:00':rate=30000/1000:x=(w-tw)/2:y=h-(h-th)/2:fontcolor=white:fontsize=90:box=0" \ + -pix_fmt uyvy422 \ + -f libndi_newtek \ + -y video1