Vidwave is a video streaming platform inspired by YouTube, allowing users to upload, transcode, stream, and manage video content. This project leverages modern web technologies and cloud services to provide a seamless video sharing experience.
- Video upload (up to 50MB .mp4 files)
- Automatic video transcoding using FFmpeg
- HLS (HTTP Live Streaming) video playback
- User authentication and authorization
- Video management (edit title, description, comments)
- User studio for managing uploaded videos
- Video deletion (removes from S3 and database)
- React.js
- Tailwind CSS
- video.js
- JWT for authentication
- Express.js
- Redis for queue management
- AWS S3 for video storage
- Docker
- Docker Compose
- Users upload videos through the React frontend.
- The backend, built with Express, handles file uploads using Multer.
- Upload events are pushed to a Redis queue.
- Worker processes pop events from the queue and trigger Docker containers for transcoding.
- A custom Docker image (
pulkitxm/docker-video
) handles video transcoding and S3 uploading. - Transcoded videos are stored in AWS S3 buckets.
- The frontend streams videos using video.js and HLS.
- Docker and Docker Compose
- Node.js and npm
- AWS account with S3 bucket
Create a .env
file in for srerver and workers using the .env.sample
.
- Clone the repository:
git clone https://github.com/Pulkitxm/VidWave.git
cd VidWave
- Start the application using Docker Compose:
docker-compose up
This command starts both the server and client.
- To start additional workers:
cd workers
npm run dev
The custom Docker image for video processing is available on Docker Hub:: pulkitxm/docker-video
This image handles video transcoding and S3 uploading. It accepts the following environment variables:
PROCESS
: Set to 'transcode&upload'AWS_ACCESS_KEY_ID
: Your AWS access keyAWS_SECRET_ACCESS_KEY
: Your AWS secret keyAWS_REGION
: Your AWS regionAWS_BUCKET_NAME
: Your S3 bucket nameVIDEO_FILE_PATH
: Path to the video file inside the containerOUTPUT_NAME
: Desired output name for the transcoded video
Contributions are welcome! Please feel free to submit a Pull Request.