VideoShift
Tags: devchallenge, awschallenge, amplify, fullstack
Published: 2024-05-27 03:05:37

*This is a submission for the [The AWS Amplify Fullstack TypeScript Challenge ](https://dev.to/challenges/awschallenge)*

## What I Built
The project presents a robust, scalable, and efficient video transcoding service designed to
cater to the needs of high-demand video processing. The service leverages modern web
technologies and cloud infrastructure to offer seamless video transcoding capabilities that
support various media formats. This service is especially designed to be a cost-effective
and efficient solution for content creators, media professionals, and businesses looking to
enhance their digital media workflow.

## Demo and Code
<!-- Share a link to your Amplify App and source code. Include some screenshots as well. -->
**LINK:** [](https://trancoding-service.vercel.app/)https://trancoding-service.vercel.app/ (was facing issue with amplify deployment at the moment)

#### 
**CODE:** [https://github.com/jatingodnani/trancoding-service](https://github.com/jatingodnani/trancoding-service)

## Integrations
- **Frontend Interface:** Developed using Next.js, the frontend is designed as a responsive web application that provides users with a seamless interface to upload, manage, and view transcoded videos. The choice of Next.js facilitates server-side rendering and static site generation, which enhances the performance and SEO of the platform.
- **Message Queue and Counters:** Redis is employed as a message broker and for managing counters. It handles job queueing processes, ensuring that video transcoding tasks are executed in an orderly and efficient manner. Redis's high- speed data handling capabilities make it ideal for tasks that require real-time data
processing.
- **Containerization with AWS ECS:** Each video transcoding process is isolated within a container, managed via Amazon Elastic Container Service (ECS). This allows for scalable and efficient management of computational resources. Containerization ensures that each transcoding task is securely and independently handled, improving the reliability of the service. Tasks are serverless (on Fargate) which further enhances scalabality.
- **Storage and Database Management:** Amazon DynamoDB is used to store
metadata and links to the transcoded videos stored in Amazon S3 buckets.
DynamoDB offers fast and flexible NoSQL database solutions that scale seamlessly alongside the growth of the service. This integration ensures durable and cost-
efficient storage of large volumes of data.
- **Docker and Amazon ECR:** The service uses Docker for creating and managing the application's container images, ensuring consistent environments across development, testing, and production. Amazon Elastic Container Registry (ECR) is used for storing and managing Docker container images, facilitating smooth deployment processes and secure storage of application images.

<!-- Reminder: Qualifying technologies are data, authentication, serverless functions, and file storage as outlined in the guidelines -->

**Connected Components and/or Feature Full**
- **Scalable Video Transcoding:** Capable of handling multiple video transcoding tasks 
concurrently without compromising on processing time or quality. 
- **User-Friendly Dashboard:** Enables users to easily upload videos, monitor the status 
of transcoding processes, and access the output from a single, intuitive interface. 
- **Support for Multiple Formats:** Offers support for a wide range of video formats, 
providing flexibility for users to upload various types of media files. 
- **Cost-Effective:** Optimized resource usage and cloud integration reduce operational 
costs, making it an affordable solution for all scales of users. 

<!-- Let us know if you developed UI using Amplify connected components for UX patterns, and/or if your project includes all four integrations to qualify for the additional prize categories. -->

<!-- Team Submissions: Please pick one member to publish the submission and credit teammates by listing their DEV usernames directly in the body of the post. -->
**Member 1 UserName (me):** kartikjoshiuk
**Member 2 Username:** jating
<!-- Don't forget to add a cover image (if you want). -->


<!-- Thanks for participating! -->