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

2 KiB

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