Exodus is a modern video streaming platform built with a microservices architecture leveraging AWS, FastAPI, Flutter, and more. This application allows users to upload, store, and stream videos across various devices.
exodus/
├── backend/ # FastAPI-based backend service
├── consumer/ # Background processing service
├── exodus/ # Flutter-based mobile/web client
└── transcoder_segmentation/ # Video transcoding service
- FastAPI: High-performance web framework for building APIs
- PostgreSQL: Primary database for storing user and video metadata
- Redis: In-memory data store for caching and real-time features
- Docker: Containerization for consistent development and deployment
- AWS S3: Storage for video and thumbnail files
- Flutter: Cross-platform UI toolkit for mobile, web, and desktop
- Bloc Pattern: State management solution
- Dart: Programming language for Flutter applications
- User authentication and authorization
- Video uploading with thumbnail generation
- S3 storage integration for scalable content delivery
- Video metadata management
- Cross-platform client applications
- Pre-processing of uploaded videos: All uploaded videos are pre-processed using the MPEG-DASH standard and FFmpeg. Videos are transcoded into multiple resolutions (360p, 720p, 1080p) and segmented into smaller chunks for adaptive streaming and faster loading. This enables smooth playback across different network conditions and devices.
- Docker and Docker Compose
- Flutter SDK
- AWS account with proper credentials
- Python 3.8+
- ngrok (for exposing local HTTP endpoints)
-
Navigate to the backend directory:
cd backend -
Create a
.envfile with necessary environment variables:AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key AWS_REGION=your_region DATABASE_URL=postgresql://user:password@localhost:5432/exodus_db -
Start the backend services using Docker Compose:
docker-compose up --build -
The API will be available at
http://localhost:8000 -
Expose your local backend to the internet using ngrok (for HTTP features, webhooks, or mobile testing):
ngrok http 8000This will provide a public URL forwarding to your local FastAPI server.
-
Navigate to the Flutter app directory:
cd exodus -
Install dependencies:
flutter pub get -
Run the app in development mode:
flutter run
The backend provides the following API endpoints:
- Auth:
/auth/*- User registration, login, and authentication - Upload:
/upload/video/*- Video upload functionality and presigned URLs - Video:
/video/*- Video metadata and streaming endpoints
The FastAPI application structure follows a modular approach with routes, database models, and services organized in separate directories.
The Flutter application uses the BLoC pattern for state management, with a clear separation between UI components and business logic.
The application is designed to be deployed on cloud infrastructure:
- Backend services can be deployed using Docker containers on AWS ECS or similar services
- The Flutter web app can be deployed to any static web hosting service
- Mobile apps can be distributed through app stores after building release versions
Note: This project is a demonstration of modern application architecture and is not intended for production use without further security and performance considerations.