A scalable YouTube-like application that allows users to upload, process, and stream videos. This project leverages modern web technologies and cloud infrastructure to create a functional video-sharing platform.
- List Videos: Browse all uploaded videos.
- Watch Videos: Stream videos directly from the app.
- Sign In/Out: Authenticate users using Firebase Auth.
- Upload Videos: Upload raw video files.
- Transcoded Videos: Watch videos processed for optimized streaming.
- TypeScript
- Next.js
- Express.js
- Docker
- FFmpeg
- Firebase Auth
- Firebase Functions
- Firebase Firestore
- Google Cloud Storage
- Google Cloud Pub/Sub
- Google Cloud Run
The application is built with a scalable cloud-based architecture:
- Cloud Storage: Stores raw and processed video files uploaded by users.
- Pub/Sub Messaging: Sends messages to trigger the video processing service.
- Video Processing Service (Cloud Run):
- Transcodes videos using FFmpeg.
- Uploads processed videos back to Cloud Storage.
- Metadata Storage (Cloud Firestore): Stores metadata for each video (e.g., title, description, processing status).
- Web Client (Next.js on Cloud Run):
- Hosts the frontend for users to interact with the application.
- API Layer (Firebase Functions):
- Handles API requests from the Next.js app and fetches data from Firestore.
- Install Node.js and NPM.
- Install Docker.
- (Optional) Install WSL2 for Windows Users.
- Clone this repository:
git clone cd youtube-clone - Install dependencies:
npm install
- Start the development server:
npm run dev