{"id":13907607,"url":"https://github.com/foyzulkarim/mern-video-streaming","last_synced_at":"2025-04-07T17:10:33.475Z","repository":{"id":65736569,"uuid":"593892005","full_name":"foyzulkarim/mern-video-streaming","owner":"foyzulkarim","description":"MERN Video Streaming is a cutting-edge, open-source platform for video streaming, offering a comprehensive, full-stack solution utilizing the latest MERN stack technologies.","archived":false,"fork":false,"pushed_at":"2024-03-17T04:45:08.000Z","size":6305,"stargazers_count":189,"open_issues_count":12,"forks_count":70,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-03-31T14:13:54.296Z","etag":null,"topics":["bullmq","ffmpeg","hls","mern","messaging","react","redis","stream","streaming","video","vidigenie"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foyzulkarim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-01-27T04:23:58.000Z","updated_at":"2025-03-27T11:00:13.000Z","dependencies_parsed_at":"2024-03-31T07:46:25.866Z","dependency_job_id":null,"html_url":"https://github.com/foyzulkarim/mern-video-streaming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foyzulkarim%2Fmern-video-streaming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foyzulkarim%2Fmern-video-streaming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foyzulkarim%2Fmern-video-streaming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foyzulkarim%2Fmern-video-streaming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foyzulkarim","download_url":"https://codeload.github.com/foyzulkarim/mern-video-streaming/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247694876,"owners_count":20980733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bullmq","ffmpeg","hls","mern","messaging","react","redis","stream","streaming","video","vidigenie"],"created_at":"2024-08-06T23:02:01.490Z","updated_at":"2025-04-07T17:10:33.456Z","avatar_url":"https://github.com/foyzulkarim.png","language":"JavaScript","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# MERN Video Streaming Project\n\n\u003e I am writing a full in-depth explanation in my medium.com page. Please visit\n\u003e [Build a MERN based video hosting and sharing system](https://medium.com/@foyzulkarim/mern-based-video-hosting-and-sharing-system-part-0-setup-server-and-client-project-skeleton-948622f869da)\n\u003e to understand the whole architecture and step by step instructions.\n\n## Overview\n\nMERN Video Streaming is a cutting-edge, open-source platform for video\nstreaming, offering a comprehensive, full-stack solution utilizing the latest\nMERN stack technologies. With MERN Video Streaming, users can easily upload,\nmanage, and stream videos on demand, providing a seamless experience. This\nproject features a video processing capability that provides real-time\nnotifications upon completion.\n\nThe backend is comprised of three services, utilizing Redis messaging for\ncommunication. These include an API server, a video conversion service, and an\nHTTP server serving HLS video files. On the client side, the project uses\ncreate-react-app and MUI library, along with socket.io-client and React Context.\n\n## Architecture\n\n![image](https://user-images.githubusercontent.com/497812/220627727-04a26928-71df-4c9b-9637-92289a2beee2.png)\n\n### Backend Services\n\n#### API Server\n\nThe API server is an Expressjs app that uses Joi, Multer, BullMQ, Socket.io, and\nMongoDB driver. The server communicates with Redis to process and store data,\nand uses MongoDB as the primary database. The database and Redis are spun up via\nthe docker-compose command.\n\n#### Video Conversion Service\n\nThe video conversion service is a node process that is responsible for\nconverting videos and communicating with Redis via the BullMQ library. The\nservice is not exposed to any HTTP port.\n\n#### HTTP Server\n\nThe HTTP server is a plain and simple server that serves HLS video files.\n\n### Frontend app\n\nThe client app is based on create-react-app and MUI library. It uses\nsocket.io-client and React Context to communicate with the API server and\ndisplay the video content.\n\n## Prerequisites\n\nTo get started with MERN Video Streaming, you will need to have the following\nsoftware installed on your local machine:\n\n- [Node.js](https://nodejs.org/en/)\n- [Docker](https://www.docker.com/)\n- [Docker Compose](https://docs.docker.com/compose/)\n\n### Built with Open-Source Technologies\n\nMERN Video Streaming has been built with the following open-source technologies:\n\n- [MongoDB](https://www.mongodb.com/) - A document-based database used to store\n  user and video data\n- [Express](https://expressjs.com/) - A Node.js web application framework used\n  for the server-side of the application\n- [React](https://reactjs.org/) - A JavaScript library for building user\n  interfaces used for the client-side of the application\n- [Node.js](https://nodejs.org/en/) - A JavaScript runtime environment used to\n  run the server-side code\n\n## Installation\n\nTo run the project locally, follow these steps:\n\n### 1. Clone the repository\n\n```bash\ngit clone git@github.com:foyzulkarim/mern-video-streaming.git\n```\n\n\n### 2. Run project locally using docker-compose\n\n#### 2.1 Run the `server` app\nFrom project directory run bellow commands\n\n```bash\ncd server\nnpm run start\n```\n\n#### 2.2 Run the `client` app\nFrom project directory run bellow commands\n\n```bash\ncd client\nyarn install\nyarn start\n```\n\n\n### 3. Usage\n\nYou can now access the application at http://localhost:3000.\n\n## Special note: Video folder structures\n\nTo upload the videos and serve them from server's folder we need to have below folder structure.\n\n\u003cimg width=\"284\" alt=\"image\" src=\"https://github.com/foyzulkarim/mern-video-streaming/assets/497812/391fa393-50ee-483a-b3fb-a3e076c20b86\"\u003e\n\n## Contributing to MERN Video Streaming\n\nMERN Video Streaming is an open-source project and we welcome contributions from\nthe community. If you would like to contribute to the project, please refer to\nthe `CONTRIBUTING.md` file for guidelines.\n\n## License\n\nMERN Video Streaming is licensed under the MIT License. Please see the `LICENSE`\nfile for more information.\n\n## Note\n\nBefore running the above commands, make sure that you have Docker and Node.js\ninstalled on your machine.\n\nThis readme file is not finished yet. I will update it as I go along with the\nproject. Thanks.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoyzulkarim%2Fmern-video-streaming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoyzulkarim%2Fmern-video-streaming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoyzulkarim%2Fmern-video-streaming/lists"}