Fuse file server tailor made for video streaming with gRPC api
Fuse Video Streamer creates a virtual disk sort of like Rclone that contains files and folders. In this case it supports streaming HTTP partial content. Fuse Video Streamer is a completely stateless application, it does not contain any files or directories by itself, instead it will connect to a list of fileservers (provided over the gPRCprotocol) to list out directories and files. When you open a file it will make a final request to get the streamable media url and it will continuesly make HTTP partial content requests to it and stream the file.
The image for this project is available on Docker at ghcr.io/sushydev/fuse_video_streamer:latest
. Below is an example of a docker-compose.yml
file to set up the project:
fuse_video_streamer:
container_name: fuse_video_streamer
image: ghcr.io/sushydev/fuse_video_streamer:latest
restart: unless-stopped
network_mode: host # Preferable if using a specific network
volumes:
- ./fuse_video_streamer.yml:/app/config.yml # Bind configuration
- ./fvs:/mnt/fvs:rshared # Bind the mount
- ./logs/fuse_video_streamer:/app/logs # Store logs
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfirmed
devices:
- /dev/fuse:/dev/fuse:rwm
pid: host # Very important, each stream is opened per PID!
To build the project manually, you can use the following Go commands:
-
Download Dependencies:
go mod download
-
Build the Project:
CGO_ENABLED=0 GOOS=linux go build -o fuse_video_streamer main.go
Fuse Video Streamer uses a config.yml
file (Very important its yml
and not yaml
) with the following properties
Example config.yml
.
mount_points: "/mnt/fvs"
volume_name: "fvs"
file_servers:
- "localhost:xxxx"
Now you're ready to use it
Ensure you have the following installed on your system:
- Go (version 1.23.2 or later)
- Install Dependencies:
go mod download
- Start:
go run main.go
Contributions are welcome! Please follow the guidelines in the CONTRIBUTING.md for submitting changes.
This project is licensed under the GNU GPLv3 License. See the LICENSE file for details.