Video Touch is a Video Hosting & Streaming platform. In Video Touch users can easily upload, manage and stream videos on demand.
- The Goals of This Project
- Features
- Technologies
- Backend Architecture
- How to Run
- Documentation Apis
- Frontend
- Implementing video processing with the help of asynchornus job queue
- Generating video thumbnail
- Using RabbitMQ as a Job Queue
- Using Event Driven Communications
- Using GraphQL for client side communications
- Using AWS s3 as storage
- Stream videos with CDN (AWS Cloudfront)
- Building a simple Dashboard with Next.js and shadcn/ui
- Using Github Actions for implementing CI
- Using Docker-Compose for our deployment mechanism.
- User Login/Registration
- Video Upload
- Video Transcoding in several resolutions(720p,540p,480p,360p)
- Automatic Thumbnail Generation
- Stream videos on Demand with CDN
- NestJS - A progressive Node.js framework
- MongoDB - As Database
- RabbitMQ - As Job Queue and Event Driven Communications
- GraphQL - For writing Client Side API's
- AWS S3 - As Video Storage
- AWS CloudFront - As CDN
- Next.js - For developing dashboard
- shadcn/ui - UI compoenent
- Docker - For deployment
- Github Actions - For CI
To run this project locally, follow these steps:
- Clone this repository
git clone [email protected]:toufiq-austcse/video-touch.git
- Run server app
-
You will need AWS credentials, S3 Bucket and Cloudfront distribution
-
From project directory run the following commands:
cd server cp example.env .env
-
Put your aws credentials, s3 bucket name and cloudfront cdn url in the following env's value
AWS_ACCESS_KEY_ID= AWS_REGION= AWS_SECRET_ACCESS_KEY= AWS_S3_BUCKET_NAME= CDN_BASE_URL=
-
Create a seperate diretory for videos in your s3 bucket and put directory url in the following env value. Example value
https://test-bucket.s3.ap-southeast-1.amazonaws.com/videos
VIDEO_BASE_URL=
-
Put your JWT secret key and token expiren value in seconds in the following env's value
JWT_SECRET= JWT_EXPIRATION_TIME_IN_SEC=
-
Run the follwong command
docker compose up -d
- Run the Frontend app
- From project directory run the following commands:
cd frontend docker compose up -d