From 09f883ca883917e89b5bfaa9005aa64fb5f9634f Mon Sep 17 00:00:00 2001 From: Domagoj Zecevic Date: Fri, 19 Jun 2026 10:31:03 +0200 Subject: [PATCH] fix for video --- .claude/settings.local.json | 24 +++++++++++++++++++++++- internal/video/stream.go | 18 +++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index b69b7da..b75e843 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -24,7 +24,29 @@ "Bash(ffmpeg -loglevel warning -ss 0 -i /home/dzecevic/repos/CamMonitor/footage/record/A260520_153838_153852.265 -vframes 1 -vf scale=160:90:force_original_aspect_ratio=decrease -f image2 -vcodec mjpeg /tmp/test_thumb.jpg)", "Bash(ffmpeg -loglevel error -i /home/dzecevic/repos/CamMonitor/footage/record/A260520_153838_153852.265 -ss 0 -vframes 1 -vf scale=160:90:force_original_aspect_ratio=decrease -f image2 -vcodec mjpeg /tmp/test_thumb2.jpg)", "Bash(mv /home/dzecevic/repos/CamMonitor/footage/images/* /home/dzecevic/repos/CamMonitor/footage/20260520/images/)", - "Bash(mv /home/dzecevic/repos/CamMonitor/footage/record/* /home/dzecevic/repos/CamMonitor/footage/20260520/record/)" + "Bash(mv /home/dzecevic/repos/CamMonitor/footage/record/* /home/dzecevic/repos/CamMonitor/footage/20260520/record/)", + "Bash(FOOTAGE_ROOT=./footage DB_PATH=/tmp/cam-debug.db ADMIN_USER=admin ADMIN_PASS=admin go run ./cmd/server)", + "Bash(FOOTAGE_ROOT=./footage DB_PATH=/tmp/cam-debug.db ADMIN_USER=admin ADMIN_PASS=admin go run ./cmd/server --listen :8081)", + "Bash(echo \"Server PID: $!\")", + "Bash(pkill -f \"go run ./cmd/server\")", + "Bash(FOOTAGE_ROOT=./footage DB_PATH=/tmp/cam-debug2.db LISTEN_ADDR=:18081 ADMIN_USER=admin ADMIN_PASS=admin go run ./cmd/server)", + "Bash(curl -s -c /tmp/cam-cookie.txt -b /tmp/cam-cookie.txt -X POST http://127.0.0.1:18081/login -d 'username=admin&password=admin' -L -o /dev/null -w '%{http_code}')", + "Bash(curl -s -c /tmp/cam-cookie.txt -b /tmp/cam-cookie.txt -X POST http://127.0.0.1:18081/login -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=admin&password=admin' -D - -o /dev/null)", + "Bash(python3 -c 'import urllib.parse; print\\(urllib.parse.quote\\('\\\\''20260520/record/A260520_153838_153852.265'\\\\'', safe='\\\\''/'\\\\''\\)\\)')", + "Bash(curl -v -s -c /tmp/cam-cookie.txt -b /tmp/cam-cookie.txt http://127.0.0.1:18081/thumb/video/__CMDSUB_OUTPUT__ -o /tmp/thumb-response.bin)", + "Bash(curl -v -s -c /tmp/cam-cookie.txt -b /tmp/cam-cookie.txt http://127.0.0.1:18081/stream/video/20260520/record/A260520_153838_153852.265 --max-time 5 -o /tmp/stream-response.bin)", + "Bash(xxd /tmp/stream-response.bin)", + "Bash(curl -s -c /tmp/cam-cookie.txt -b /tmp/cam-cookie.txt http://127.0.0.1:18081/day/20260520/videos)", + "Bash(ffprobe *)", + "Bash(ffmpeg -encoders)", + "Bash(time ffmpeg -loglevel error -i /home/dzecevic/repos/CamMonitor/footage/20260520/record/A260520_153838_153852.265 -t 5 -c:v libx264 -preset ultrafast -crf 28 -an -movflags frag_keyframe+empty_moov -f mp4 /tmp/test_transcode.mp4)", + "Bash(FOOTAGE_ROOT=./footage DB_PATH=/tmp/cam-debug3.db LISTEN_ADDR=:18082 ADMIN_USER=admin ADMIN_PASS=admin go run ./cmd/server)", + "Bash(curl -s -c /tmp/cam-cookie2.txt -b /tmp/cam-cookie2.txt -X POST http://127.0.0.1:18082/login -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=admin&password=admin' -o /dev/null)", + "Bash(curl -s -c /tmp/cam-cookie2.txt -b /tmp/cam-cookie2.txt http://127.0.0.1:18082/stream/video/20260520/record/A260520_153838_153852.265 --max-time 8 -o /tmp/stream_h264.mp4)", + "Bash(pkill -f \"cam-debug\")", + "Bash(ffmpeg -loglevel error -i /home/dzecevic/repos/CamMonitor/footage/20260520/record/A260520_153838_153852.265 -c:v libx264 -preset ultrafast -crf 28 -pix_fmt yuv420p -an -movflags frag_keyframe+empty_moov -f mp4 /tmp/stream_h264.mp4)", + "Bash(ffmpeg -loglevel error -i footage/20260520/record/A260520_153838_153852.265 -c:v libx264 -preset ultrafast -crf 28 -pix_fmt yuv420p -an -movflags frag_keyframe+empty_moov -f mp4 /tmp/stream_h264.mp4)", + "Bash(echo \"exit:$?\")" ] } } diff --git a/internal/video/stream.go b/internal/video/stream.go index c73aada..b38698b 100644 --- a/internal/video/stream.go +++ b/internal/video/stream.go @@ -21,7 +21,23 @@ func Stream(w http.ResponseWriter, r *http.Request, absPath, ffmpegPath string) ffmpegPath, "-loglevel", "error", "-i", absPath, - "-c:v", "copy", + // Transcode H.265 → H.264 for universal browser support. + // Firefox and Chrome on Linux/Windows cannot decode H.265 at all; + // stream-copying the HEVC bitstream into MP4 produces a file the + //