No description
Find a file
holzi1005 6b7149540e
All checks were successful
docker-build / release (push) Successful in 9s
docker-build / docker-build (push) Successful in 10s
Update .forgejo/workflows/build.yml
2025-04-09 08:58:38 +02:00
.forgejo/workflows Update .forgejo/workflows/build.yml 2025-04-09 08:58:38 +02:00
Dockerfile update license 2025-01-07 19:19:16 +01:00
inotify.sh remove process-meter 2025-01-08 08:17:47 +01:00
LICENSE Initial commit 2025-01-07 13:10:51 +01:00
README.md Update README.md 2025-04-08 18:46:19 +02:00

Meetling Livekit Recording Uploader

This containerized utility monitors a directory for new .mp4 files, splits them into chunks, and uploads each chunk to a specified endpoint. It is intended for use with the Meetling Livekit recording system.


📦 Features

  • 📁 Watches the /out directory for new .mp4 files
  • ✂️ Splits files into configurable chunk sizes
  • 📤 Uploads chunks via HTTP with bearer token authorization
  • 🐳 Lightweight Alpine-based Docker image

⚙️ Environment Variables

Variable Default Description
CHUNK_SIZE 1048576 (1 MiB) Size of each chunk in bytes
UPLOAD_URL http://localhost:8000/recording/upload Upload endpoint URL
AUTH_TOKEN verySecretToken Bearer token for authentication

🚀 Usage

1. Build the Docker image

docker build -t meetling-uploader --build-arg VERSION=1.0.0 .

2. Run the container

docker run -v /your/output/directory:/out meetling-uploader

Replace /your/output/directory with the directory containing your .mp4 recordings.


🔄 Upload Process

Once a .mp4 file is completely written to /out, the script:

  1. Verifies the file exists.
  2. Calculates file size.
  3. Splits the file into chunks based on CHUNK_SIZE.
  4. Uploads each chunk using curl.

Each upload includes the following multipart form fields:

  • recording_id: Filename without .mp4
  • chunk_index: Index of the chunk (starting from 0)
  • total_chunks: Total number of chunks
  • file: The actual chunk

🐳 Dockerfile Overview

The image uses alpine:3.20 and installs:

  • inotify-tools (for file system event watching)
  • curl (for HTTP requests)
  • coreutils (for stat and dd utilities)

The script is located at /inotify.sh and is executed when the container starts.
It runs as the non-privileged user nobody for security.


📝 License

MIT License


👨‍💻 Maintainers

H2 invent GmbH
📧 support@h2-invent.com
🌐 https://meetling.de


Note: Ensure your backend server supports chunked uploads and correctly assembles the file.