{"id":25213962,"url":"https://github.com/mehmetkahya0/local-web-camera","last_synced_at":"2026-04-09T12:55:31.447Z","repository":{"id":276616461,"uuid":"929595543","full_name":"mehmetkahya0/local-web-camera","owner":"mehmetkahya0","description":"A peer-to-peer web camera streaming application built with WebRTC, Socket.IO, and Express. Stream your camera to another device on your local network with minimal latency.","archived":false,"fork":false,"pushed_at":"2025-02-09T13:10:32.000Z","size":1651,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-09T13:23:01.366Z","etag":null,"topics":["ai","camera","client","copilot","css","cursor","github","html","js","node","nodejs","security","server","socket-io","socket-io-client","socket-io-server","ssh","tool","web","websocket"],"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/mehmetkahya0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-02-08T22:57:48.000Z","updated_at":"2025-02-09T13:10:35.000Z","dependencies_parsed_at":"2025-02-09T13:23:03.051Z","dependency_job_id":"9397b6c6-63e7-4115-8779-9263faa774c0","html_url":"https://github.com/mehmetkahya0/local-web-camera","commit_stats":null,"previous_names":["mehmetkahya0/local-web-camera"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehmetkahya0%2Flocal-web-camera","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehmetkahya0%2Flocal-web-camera/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehmetkahya0%2Flocal-web-camera/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehmetkahya0%2Flocal-web-camera/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mehmetkahya0","download_url":"https://codeload.github.com/mehmetkahya0/local-web-camera/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247307820,"owners_count":20917554,"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":["ai","camera","client","copilot","css","cursor","github","html","js","node","nodejs","security","server","socket-io","socket-io-client","socket-io-server","ssh","tool","web","websocket"],"created_at":"2025-02-10T16:58:04.569Z","updated_at":"2025-12-30T23:07:26.099Z","avatar_url":"https://github.com/mehmetkahya0.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Local Web Camera 🎥\n\n[![GitHub license](https://img.shields.io/github/license/mehmetkahya0/local-web-camera)](https://github.com/mehmetkahya0/local-web-camera/blob/main/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/mehmetkahya0/local-web-camera)](https://github.com/mehmetkahya0/local-web-camera/stargazers)\n[![GitHub issues](https://img.shields.io/github/issues/mehmetkahya0/local-web-camera)](https://github.com/mehmetkahya0/local-web-camera/issues)\n[![GitHub forks](https://img.shields.io/github/forks/mehmetkahya0/local-web-camera)](https://github.com/mehmetkahya0/local-web-camera/network)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D%2014.0.0-brightgreen)](https://nodejs.org/)\n[![WebRTC](https://img.shields.io/badge/WebRTC-Enabled-blue)](https://webrtc.org/)\n[![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Fmehmetkahya0%2Flocal-web-camera\u0026label=VISITORS\u0026countColor=%23263759)](https://visitorbadge.io/status?path=https%3A%2F%2Fgithub.com%2Fmehmetkahya0%2Flocal-web-camera)\n\nA peer-to-peer web camera streaming application built with WebRTC, Socket.IO, and Express. Stream your camera to another device on your local network with minimal latency.\n\n## 🌟 Features\n\n- Real-time video streaming using WebRTC\n- Peer-to-peer connection (no server routing for video)\n- Automatic network interface detection\n- Mobile-friendly interface\n- Simple host/viewer architecture\n- Connection status monitoring\n- Automatic reconnection handling\n- Cross-browser compatibility\n- iOS and Android support\n\n## 🚀 Quick Start\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/mehmetkahya0/local-web-camera.git\ncd local-web-camera\n```\n\n2. Install dependencies:\n```bash\nnpm install\n```\n\n3. Start the server:\n```bash\nnpm start\n```\n\n4. Open the application:\n- On the host device: `http://localhost:8080`\n- On viewer devices: Use the URL displayed in the console or shared by the host\n\n## 🛠️ Tech Stack\n\n- **Frontend**:\n  - Native WebRTC API\n  - Vanilla JavaScript\n  - HTML5\n  - CSS3\n\n- **Backend**:\n  - Node.js\n  - Express\n  - Socket.IO\n  - STUN/TURN servers\n\n## 📱 Usage\n\n### As a Host:\n1. Click \"Start Camera\" to enable your device's camera\n2. Click \"Share Link\" to generate a viewing URL\n3. Share the generated URL with the viewer\n\n### As a Viewer:\n1. Open the http://[Host_Device_Local_IP]?room=SHARED_LINK_ROOM_ID\n2. Wait for the connection to be established\n3. The stream will start automatically\n\n## 🔧 Configuration\n\nThe server runs on port 8080 by default. To change this:\n\n1. Open `server.js`\n2. Modify the `port` constant\n3. Restart the server\n\n## 🌐 Network Requirements\n\n- Both devices must be on the same network (for best performance)\n- Port 8080 must be accessible\n- STUN/TURN servers must be reachable\n- WebRTC must not be blocked by firewall\n\n## 📋 System Requirements\n\n- Node.js ≥ 14.0.0\n- Modern web browser with WebRTC support\n- Camera and microphone access\n- Network connectivity\n\n## 🔒 Security Features\n\n- HTTPS ready (certificates included)\n- Peer-to-peer encryption (WebRTC)\n- One viewer per stream limit\n- Automatic connection monitoring\n- Cross-Origin Resource Sharing (CORS) protection\n\n## 🛡️ Security\n\n### Network Security\n- End-to-end encryption via WebRTC\n- DTLS (Datagram Transport Layer Security) protocol\n- Secure signaling through Socket.IO\n- Network isolation between peers\n\n### Data Protection\n- No video/audio data storage on server\n- Temporary session-only data\n- Automatic data cleanup on disconnection\n- No personal information collection\n\n### Access Control\n- Unique room IDs per session\n- Auto-expiring session tokens\n- IP-based rate limiting\n- Validation of all incoming connections\n\n### Best Practices\n1. Use HTTPS in production\n2. Keep Node.js and dependencies updated\n3. Change default port in public deployments\n4. Enable firewall rules as needed\n\n### Security Audit Commands\n```bash\n# Run security audit on dependencies\nnpm audit\n\n# Check for known vulnerabilities\nnpm audit fix\n\n# Update dependencies to secure versions\nnpm update\n```\n\n## Chart Features\n\nThe application includes real-time data visualization capabilities using charts:\n\n### Available Charts\n\n- **Connection Status:** Displays real-time connection status of users\n- **Bandwidth Usage:** Shows network bandwidth consumption\n- **User Activity:** Tracks active users over time\n\n### Using Charts\n\n1. Open the dashboard panel\n2. Select desired chart type from the dropdown\n3. Charts will update automatically in real-time\n\n```mermaid\ngraph TD\n    A[Data Collection] --\u003e B[Processing]\n    B --\u003e C[Chart Rendering]\n    C --\u003e D[Real-time Updates]\n    D --\u003e B\n```\n\n### Chart Configuration\n\nCharts can be customized through the settings panel:\n- Update frequency (1-60 seconds)\n- Data retention period\n- Display options\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🔮 Future Improvements\n\n- [ ] Multiple viewer support\n- [ ] Chat functionality\n- [ ] Screen sharing\n- [ ] Recording capability\n- [ ] Bandwidth adaptation\n- [ ] Room password protection\n\n## 🐛 Known Issues\n\n- iOS Safari may require user interaction to start playing video\n- Some networks may block WebRTC connections\n- Connection quality depends on network conditions\n\n## 📞 Contact\n\nMehmet Kahya - [@mehmetkahya0](https://github.com/mehmetkahya0)\n\nProject Link: [https://github.com/mehmetkahya0/local-web-camera](https://github.com/mehmetkahya0/local-web-camera)\n\n## 🙏 Acknowledgments\n\n- WebRTC Community\n- Socket.IO Team\n- Node.js Community\n\n---\n\n\u003cp align=\"center\"\u003eMade with ❤️ by \u003ca href=\"https://github.com/mehmetkahya0\"\u003eMehmet Kahya\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehmetkahya0%2Flocal-web-camera","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmehmetkahya0%2Flocal-web-camera","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehmetkahya0%2Flocal-web-camera/lists"}