church-api/.serena/memories/project_overview.md
Benjamin Slingo 0c06e159bb Initial commit: Church API Rust implementation
Complete church management system with bulletin management, media processing, live streaming integration, and web interface. Includes authentication, email notifications, database migrations, and comprehensive test suite.
2025-08-19 20:56:41 -04:00

41 lines
2 KiB
Markdown

# Church API Project Overview
## Purpose
The Church API is a Rust-based web service designed for church media management and streaming. The primary functionality includes:
- **Media Management**: Upload, organize, and manage church sermons and media content
- **Video Streaming**: Provide intelligent video streaming with adaptive codec support (AV1, HEVC, H.264)
- **User Authentication**: JWT-based authentication system
- **Database Integration**: PostgreSQL database with SQLx for data persistence
- **Email Services**: Automated email functionality for church communications
## Tech Stack
- **Language**: Rust (2021 edition)
- **Web Framework**: Axum 0.7 with async/await (Tokio runtime)
- **Database**: PostgreSQL with SQLx 0.7
- **Media Processing**:
- GStreamer bindings (0.22) for high-performance streaming
- FFmpeg bindings (ffmpeg-next 7.0) - being replaced with GStreamer
- **Authentication**: JWT (jsonwebtoken) + bcrypt for password hashing
- **Logging**: tracing + tracing-subscriber for structured logging
- **Testing**: Built-in Rust testing framework
## Key Features
1. **Smart Video Streaming**: Detects client capabilities and serves optimal codec (AV1 direct, HEVC, or H.264 with transcoding)
2. **Hardware Acceleration**: Uses Intel QSV and VA-API for efficient video processing
3. **Chunk-based Streaming**: Netflix-style 10-second segments for smooth playback
4. **Caching System**: Intelligent caching of transcoded video segments
5. **HLS Support**: HTTP Live Streaming for maximum compatibility
## Architecture
- **Services Layer**: Business logic for transcoding, streaming, media scanning
- **Handlers Layer**: HTTP request handlers using Axum
- **Models Layer**: Data models and database entities
- **Utils Layer**: Shared utilities (codec detection, validation, etc.)
## Current Performance Focus
The project is actively migrating from FFmpeg CLI calls to native GStreamer bindings to:
- Eliminate subprocess overhead
- Reduce buffering and latency
- Improve hardware acceleration utilization
- Enable better error handling and resource management