{"id":28228611,"url":"https://github.com/akhilk2802/streamwave","last_synced_at":"2026-04-17T05:03:48.608Z","repository":{"id":255263435,"uuid":"846367782","full_name":"akhilk2802/StreamWave","owner":"akhilk2802","description":"A distributed live streaming platform leveraging gRPC, RTMP, FFmpeg, and DASH for scalable video delivery.","archived":false,"fork":false,"pushed_at":"2025-02-10T02:26:25.000Z","size":253,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-18T15:12:46.462Z","etag":null,"topics":["distributed-systems","ffmpeg","golang","grpc","livestream","rpc","streams"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akhilk2802.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-23T04:04:13.000Z","updated_at":"2025-02-10T02:26:28.000Z","dependencies_parsed_at":"2024-08-28T23:25:02.985Z","dependency_job_id":"37bd520b-58cf-4530-8e29-2477b2ff504c","html_url":"https://github.com/akhilk2802/StreamWave","commit_stats":null,"previous_names":["akhilk2802/streamwave"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/akhilk2802/StreamWave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhilk2802%2FStreamWave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhilk2802%2FStreamWave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhilk2802%2FStreamWave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhilk2802%2FStreamWave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akhilk2802","download_url":"https://codeload.github.com/akhilk2802/StreamWave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhilk2802%2FStreamWave/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259561649,"owners_count":22876848,"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":["distributed-systems","ffmpeg","golang","grpc","livestream","rpc","streams"],"created_at":"2025-05-18T15:12:46.476Z","updated_at":"2026-04-17T05:03:48.569Z","avatar_url":"https://github.com/akhilk2802.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StreamWave: Scalable Live Streaming Platform\n\n## Overview\nStreamWave is a distributed live streaming platform designed to handle real-time video ingestion, transcoding, and delivery. It utilizes **RTMP** for video ingestion, **FFmpeg** for transcoding, and **DASH** for adaptive streaming. The system is built with **Golang**, leveraging **gRPC** for inter-service communication and designed to scale with **Docker** and **Kubernetes** for cloud-native deployment.\n\n---\n\n## Features\n- **Real-time Video Streaming**: Supports live video streaming via RTMP.\n- **Automated Video Transcoding**: Converts incoming streams into multiple resolutions (1080p, 720p, 480p, 360p) for adaptive streaming.\n- **Segmented Video Processing**: Implements **MapReduce** for efficient segmentation and distributed processing.\n- **Cloud Storage Integration**: Supports both local file system storage and AWS S3 for scalable storage.\n- **DASH Playback Support**: Outputs video segments in **DASH format** for smooth playback across devices.\n- **Microservice Architecture**: Two independent services (**Stream-Ingest** \u0026 **Stream-Processing**) communicating via **gRPC**.\n\u003c!-- - **Kubernetes \u0026 Docker Support**: Fully containerized for seamless cloud deployment and orchestration. --\u003e\n\n---\n\n## Architecture\nStreamWave follows a **microservices-based architecture**, consisting of the following services:\n\n### 1. **Stream-Ingest Service** (RTMP Ingestion \u0026 Metadata Handling)\n- **Listens for live streams** from OBS Studio via RTMP.\n- **Triggers metadata processing hooks** (on_publish, on_done) when a stream starts or stops.\n- **Communicates with Stream-Processing Service** via gRPC to initiate transcoding.\n\n### 2. **Stream-Processing Service** (Transcoding \u0026 Segmentation)\n- **Receives a request from Stream-Ingest** to process a new stream.\n- **Uses FFmpeg** to transcode video into multiple resolutions.\n- **Segments video into chunks** for DASH streaming.\n- **Stores output files in the local system or AWS S3**.\n\n---\n\n## Folder Structure\n```plaintext\nStreamWave/\n├── backend/\n│   ├── cmd/\n│   │   ├── stream_ingest/\n│   │   │   └── main.go      # Entry point for Stream-Ingest Service\n│   │   ├── stream_processing/\n│   │   │   └── main.go      # Entry point for Stream-Processing Service\n│   ├── internal/\n│   │   ├── stream_ingest/\n│   │   │   ├── grpc/\n│   │   │   │   └── client.go\n│   │   │   ├── handlers/\n│   │   │   │   └── stream_ingest_handlers.go\n│   │   ├── stream_processing/\n│   │   │   ├── mapReduce/\n│   │   │   │   └── mapReduce_framework.go\n│   │   │   ├── processor/\n│   │   │   │   └── segment_processor.go\n│   │   │   ├── grpc/\n│   │   │   │   └── server.go\n│   ├── proto/\n│   │   ├── stream_ingest.proto\n│   │   ├── stream_processing.proto\n│   │   ├── common.proto\n├── frontend/   # Yet to complete\n├── docs/       # Documentation\n├── .gitignore\n└── README.md\n```\n\n---\n\n## Technologies Used\n| Component          | Technology |\n|-------------------|------------|\n| Backend Framework | Golang (Gin, gRPC) |\n| Video Ingestion   | NGINX with RTMP Module |\n| Video Transcoding | FFmpeg |\n| Video Streaming   | DASH (Dynamic Adaptive Streaming over HTTP) |\n| Storage           | Local FS / AWS S3 |\n| Communication     | gRPC |\n---\n\n## Installation \u0026 Setup\n### Prerequisites\n- **Go** (\u003e=1.18)\n- **FFmpeg**\n- **NGINX with RTMP Module**\n- **Docker \u0026 Kubernetes (Optional for cloud deployment)**\n\n### Step 1: Clone the Repository\n```sh\ngit clone https://github.com/akhilk2802/StreamWave.git\ncd StreamWave/backend\n```\n\n### Step 2: Configure Environment Variables\nCreate a `.env` file in the backend directory:\n```ini\nUSE_S3=false\nOUTPUT_DIR=./output\nFFMPEG_PATH=/usr/bin/ffmpeg\nRTMP_URL=rtmp://localhost:1936/live\n```\n\n### Step 3: Start Services\n```sh\n# Start Stream-Ingest Service\ncd cmd/stream_ingest\ngo run main.go\n\n# Start Stream-Processing Service\ncd ../stream_processing\ngo run main.go\n```\n\n### Step 4: Start NGINX RTMP Server\nEnsure your `nginx.conf` is properly set up and run:\n```sh\nsudo nginx -t\nsudo nginx -s reload\n```\n\n### Step 5: Test with OBS Studio\n- **Set OBS output to RTMP**: `rtmp://localhost:1936/live`\n- **Start streaming**\n- **Monitor logs in the backend services**\n\n---\n\n## API Endpoints\n### Stream-Ingest Service (Port 8081)\n| Method | Endpoint           | Description |\n|--------|------------------|-------------|\n| `POST` | `/start-stream`  | Initiates streaming |\n| `POST` | `/stop-stream`   | Stops a stream |\n| `GET`  | `/status`        | Checks service health |\n\n### Stream-Processing Service (Port 50052, gRPC)\n| Method          | Description |\n|----------------|-------------|\n| `StartStream()` | Initiates transcoding |\n| `StopStream()`  | Stops transcoding |\n| `ForwardMetadata()` | Forwards metadata |\n\n---\n\n## Deployment\n### **Docker Compose (Local Setup)**\n```sh\ndocker-compose up --build\n```\n\n### **Kubernetes (Cloud Deployment)**\n```sh\nkubectl apply -f k8s/streamwave-deployment.yaml\nkubectl get pods -n streamwave\n```\n\n---\n\n## Future Improvements\n- **Integrate WebRTC for Low-Latency Streaming**\n- **Implement Video Analytics for User Engagement**\n- **Expand Storage Options with Multi-CDN Support**\n\n---\n\n## Contributors\n- **Akhileshkumar S Kumbar** - [GitHub](https://github.com/akhilk2802)\n\n## License\nThis project is licensed under the **MIT License**.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhilk2802%2Fstreamwave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakhilk2802%2Fstreamwave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhilk2802%2Fstreamwave/lists"}