Add live score overlay to video stream using shared volume between transcoder and overlay service
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 21s
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 21s
This commit is contained in:
@@ -37,23 +37,15 @@ services:
|
|||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|
||||||
# FFmpeg transcoder for H265 to H264
|
# FFmpeg transcoder for H265 to H264 with score overlay
|
||||||
transcoder:
|
transcoder:
|
||||||
image: linuxserver/ffmpeg:latest
|
build: ./transcoder
|
||||||
|
image: ${PROJECT_NAME}-transcoder:latest
|
||||||
container_name: ${PROJECT_NAME}-transcoder
|
container_name: ${PROJECT_NAME}-transcoder
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
network_mode: host
|
network_mode: host
|
||||||
command: >
|
volumes:
|
||||||
-re
|
- score-data:/tmp:rw
|
||||||
-rtsp_transport tcp
|
|
||||||
-i rtsp://localhost:8554/court
|
|
||||||
-c:v libx264
|
|
||||||
-preset ultrafast
|
|
||||||
-tune zerolatency
|
|
||||||
-b:v 2M
|
|
||||||
-f rtsp
|
|
||||||
-rtsp_transport tcp
|
|
||||||
rtsp://localhost:8554/court_h264
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- mediamtx
|
- mediamtx
|
||||||
|
|
||||||
@@ -67,6 +59,7 @@ services:
|
|||||||
- mediamtx
|
- mediamtx
|
||||||
volumes:
|
volumes:
|
||||||
- ${RECORDINGS_FOLDER}:/recordings
|
- ${RECORDINGS_FOLDER}:/recordings
|
||||||
|
- score-data:/tmp:rw
|
||||||
environment:
|
environment:
|
||||||
- SQUASHKIWI_API=${SQUASHKIWI_API}
|
- SQUASHKIWI_API=${SQUASHKIWI_API}
|
||||||
- COURT_ID=${COURT_ID}
|
- COURT_ID=${COURT_ID}
|
||||||
@@ -146,6 +139,7 @@ volumes:
|
|||||||
nginx-cache:
|
nginx-cache:
|
||||||
prometheus-data:
|
prometheus-data:
|
||||||
grafana-data:
|
grafana-data:
|
||||||
|
score-data:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
|
13
squashkiwi-streaming/config/transcoder/Dockerfile
Normal file
13
squashkiwi-streaming/config/transcoder/Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
FROM linuxserver/ffmpeg:latest
|
||||||
|
|
||||||
|
# Install fonts for text overlay
|
||||||
|
RUN apk add --no-cache ttf-dejavu
|
||||||
|
|
||||||
|
# Copy transcoder script
|
||||||
|
COPY transcoder.sh /transcoder.sh
|
||||||
|
RUN chmod +x /transcoder.sh
|
||||||
|
|
||||||
|
# Create score file directory
|
||||||
|
RUN mkdir -p /tmp
|
||||||
|
|
||||||
|
ENTRYPOINT ["/transcoder.sh"]
|
31
squashkiwi-streaming/config/transcoder/transcoder.sh
Normal file
31
squashkiwi-streaming/config/transcoder/transcoder.sh
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Transcoder with live score overlay for SquashKiwi streaming
|
||||||
|
|
||||||
|
# Create initial score file if it doesn't exist
|
||||||
|
SCORE_FILE="/tmp/score.txt"
|
||||||
|
if [ ! -f "$SCORE_FILE" ]; then
|
||||||
|
echo "Waiting for match..." > "$SCORE_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start ffmpeg with drawtext filter for score overlay
|
||||||
|
exec ffmpeg \
|
||||||
|
-re \
|
||||||
|
-rtsp_transport tcp \
|
||||||
|
-i rtsp://localhost:8554/court \
|
||||||
|
-vf "drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:\
|
||||||
|
textfile='$SCORE_FILE':\
|
||||||
|
reload=1:\
|
||||||
|
fontcolor=white:\
|
||||||
|
fontsize=24:\
|
||||||
|
box=1:\
|
||||||
|
boxcolor=black@0.7:\
|
||||||
|
boxborderw=5:\
|
||||||
|
x=10:\
|
||||||
|
y=10" \
|
||||||
|
-c:v libx264 \
|
||||||
|
-preset ultrafast \
|
||||||
|
-tune zerolatency \
|
||||||
|
-b:v 2M \
|
||||||
|
-f rtsp \
|
||||||
|
-rtsp_transport tcp \
|
||||||
|
rtsp://localhost:8554/court_h264
|
Reference in New Issue
Block a user