{"id":18657849,"url":"https://github.com/lightsofapollo/webrtc-playground","last_synced_at":"2025-11-05T22:30:22.287Z","repository":{"id":140860714,"uuid":"87946932","full_name":"lightsofapollo/webrtc-playground","owner":"lightsofapollo","description":"WebRTC playground \u0026 intro","archived":false,"fork":false,"pushed_at":"2017-04-18T17:46:43.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-12-27T15:12:40.654Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/lightsofapollo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2017-04-11T14:55:20.000Z","updated_at":"2017-04-11T14:55:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"aa94acfe-06ac-4b95-aac1-112c56468a22","html_url":"https://github.com/lightsofapollo/webrtc-playground","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/lightsofapollo%2Fwebrtc-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightsofapollo%2Fwebrtc-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightsofapollo%2Fwebrtc-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightsofapollo%2Fwebrtc-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lightsofapollo","download_url":"https://codeload.github.com/lightsofapollo/webrtc-playground/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239475960,"owners_count":19645041,"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":[],"created_at":"2024-11-07T07:30:02.508Z","updated_at":"2025-11-05T22:30:22.244Z","avatar_url":"https://github.com/lightsofapollo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WebRTC playground\n\nThis a simple starter project for playing with various WebRTC concepts.\n\nThis project includes a standard babel + webpack setup to make things a little\neasier (particularly for the UI).\n\n## Getting Started\n\nThis project uses yarn (but npm should work too)\n\n```js\nyarn\nyarn start\n```\n\n## Reading\n\nWebRTC is built on top of a number of other technologies:\n\n### Transports\n\nWebRTC uses a unique networking that greatly differs from HTTP 1.1 (but has some similar features as HTTP2).\n\nDTLS: TLS + UDP as a basis for the SCTP networking layer.\nSCTP: (via UDP tunneling) Streams + Messages + [Less ahead-of-line blocking](https://en.wikipedia.org/wiki/Head-of-line_blocking)\n\n\n### Signaling\n\nTo establish a connection with a peer we need a way to exchange information.\nVoIP applications drove most of the conventions here and use [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol)\nto initiate connections.\n\nWhile WebRTC has a robust signaling system it relies on some external system to\npass data between peers to initialize the connection (i.e. Socket.io).\n\nThe process for \"signaling\" roughly looks like this:\n\n```\ncaller: CreateOffer - Build the offer (this may contain info like the media streams)\ncaller: SetLocalDescription (set the offer as the current local description for this session)\ncaller: ICE - (The caller beings using ICE to find it's own IP)\ncaller: Send Offer -\u003e callee\ncaller: Send Ice Candidates -\u003e callee\n(somehow the callee gets both the offer and all the ice candidates)\ncallee: SetRemoteDescription (Register the offer from callee)\ncallee: Add Ice candidates (sent from caller)\ncallee: CreateAnswer -\u003e caller\ncallee: ICE - (The caller begins using ICE to find it's own IP)\ncallee: Send Answer -\u003e caller\ncallee: Send Ice Candidates -\u003e caller\n(somehow the caller gets messages from the callee)\ncaller: SetRemoteDescription (Remote description from calle's CreateAnswer)\ncaller: Add Ice candidates (sent from caller)\n```\n\nIf everything went well then the caller and callee can now communicate over the\nestablished session (Also see TURN / STUN).\n\n## Further Reading\n\n  - [DTLS](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security)\n  - [SCTP](https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol)\n  - [WebRTC MDN](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)\n  - [ICE](https://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment)\n  - [TURN](https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT)\n  - [STUN](https://en.wikipedia.org/wiki/STUN)\n  - [SDP](https://tools.ietf.org/html/rfc4566#page-7)\n\n# LICENSE\n\nMIT\n\nSee LICENSE.MD\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightsofapollo%2Fwebrtc-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flightsofapollo%2Fwebrtc-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightsofapollo%2Fwebrtc-playground/lists"}