Skip to content

Mist-AA/bideo_api

Repository files navigation

bideo.tech Banner

🎥 bideo.tech — Scalable Video Streaming Platform

A high-performance video streaming platform built for the modern web

Live Demo License Backend Frontend


📖 About the Project

bideo.tech is a YouTube-like video streaming platform that combines Spring Boot, AWS S3, RabbitMQ, Redis, PostgreSQL, and Firebase to deliver a seamless streaming experience.

It supports:

  • Video upload and processing (HLS format)
  • Secure user authentication with Firebase
  • Metadata caching for lightning-fast loading
  • Scalable architecture with async processing

🚀 Features

  • 🔐 Firebase Authentication — Secure login and user management
  • 📦 Chunked Video Streaming — HLS format stored on AWS S3
  • 📬 Asynchronous Processing — RabbitMQ job queue for uploads
  • Metadata Caching — Redis for reduced database hits
  • 🗄 Reliable Database — PostgreSQL for user & video records
  • 📱 Responsive Playback — Adaptive streaming for any device

🛠️ Tech Stack

Logo Technology Purpose
Spring Boot Spring Boot REST API backend
Firebase Firebase Authentication & user management
PostgreSQL PostgreSQL User & video metadata
AWS S3 AWS S3 Video storage (HLS chunks)
RabbitMQ RabbitMQ Queue for video processing
Redis Redis Caching metadata
HLS HLS Adaptive video streaming

📂 Architecture Overview

 User
  │
  ▼
[Frontend] ──▶ [Spring Boot Backend] ──▶ [PostgreSQL]  
                 │           │
                 │           ├──▶ [AWS S3: Stores .m3u8 + TS chunks]
                 │           ├──▶ [Redis: Cache metadata]
                 │           └──▶ [RabbitMQ: Video processing jobs]

⚙️ How It Works

1️⃣ Video Upload

  1. User uploads video from the frontend.
  2. Backend stores metadata in PostgreSQL and pushes a job to RabbitMQ.
  3. A background worker processes the video into HLS format (.m3u8 + .ts chunks).
  4. Processed files are uploaded to AWS S3.
  5. Video record is updated with the S3 URL.

2️⃣ Video Playback

  1. User requests video → Metadata is fetched from Redis (or PostgreSQL if not cached).
  2. Video is streamed directly from AWS S3 using HLS adaptive streaming.
  3. Redis caches the metadata for future requests.

💻 Local Development

Prerequisites

Make sure you have the following installed:

  • Java 17+
  • PostgreSQL (for user & video metadata)
  • Redis (for caching)
  • RabbitMQ (for job queues)
  • AWS S3 bucket (or MinIO for local testing)

Steps to Run Locally

# Clone Backend repository
git clone https://github.com/Mist-AA/bideo_api
1. Uncomment line 16 in SupportVariables
2. Uncomment line 30 in logback-spring.xml
3 In edit configurations, Modify Options > Add vm options. Then within VM options field, add this   -Dspring.profiles.active=dev
4. Use application-dev.properties with secret keys/values
5. Use service-account.json in resource folder

# Clone Frontend Rerpository
https://github.com/rajitk13/bideo_ui
In global.ts change https://bideo.tech path to http://localhost:8080

Docker Quick Start Commands

Redis
docker run -d --name my-redis -p 6379:6379 redis

Rabbitmq
docker run -d -p 5672:5672 -p 15672:15672 --name my-rabbit rabbitmq:3-management


🗝️ Environment Variables

Create a .env file in the root directory:

FIREBASE_PROJECT_ID=your_project_id
FIREBASE_CLIENT_EMAIL=your_client_email
FIREBASE_PRIVATE_KEY=your_private_key
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_S3_BUCKET_NAME=your_bucket_name
POSTGRES_URL=jdbc:postgresql://localhost:5432/
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your_password
RABBITMQ_HOST=localhost
REDIS_HOST=localhost

📸 Screenshots

Home Page Video Player
Home Page Video Player

🛠 Future Roadmap

  • Add recommendation engine based on viewing history
  • Enable real-time comments & chat
  • Build a creator analytics dashboard
  • Launch mobile app support

📜 License

Distributed under the MIT License. See LICENSE for details.


Creators Rajit | Ayushmaan

About

Collaborative project on a video streaming platform

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages