{"id":13406881,"url":"https://github.com/versatica/mediasoup-client","last_synced_at":"2025-05-14T02:10:00.802Z","repository":{"id":39996649,"uuid":"97622249","full_name":"versatica/mediasoup-client","owner":"versatica","description":"mediasoup client side JavaScript library","archived":false,"fork":false,"pushed_at":"2025-05-05T16:20:50.000Z","size":3431,"stargazers_count":616,"open_issues_count":12,"forks_count":243,"subscribers_count":42,"default_branch":"v3","last_synced_at":"2025-05-09T18:38:49.570Z","etag":null,"topics":["client-library","javascript","nodejs","sfu","webrtc"],"latest_commit_sha":null,"homepage":"https://mediasoup.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/versatica.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":"mediasoup","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-07-18T16:44:51.000Z","updated_at":"2025-05-05T16:20:52.000Z","dependencies_parsed_at":"2022-07-17T11:47:39.649Z","dependency_job_id":"8f1f35e2-ed90-489b-8935-e6c06d520bc1","html_url":"https://github.com/versatica/mediasoup-client","commit_stats":{"total_commits":990,"total_committers":20,"mean_commits":49.5,"dds":0.07272727272727275,"last_synced_commit":"fd4b87c4013c8b6a0c0b3b96dc23cc8726604d72"},"previous_names":[],"tags_count":253,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/versatica%2Fmediasoup-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/versatica%2Fmediasoup-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/versatica%2Fmediasoup-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/versatica%2Fmediasoup-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/versatica","download_url":"https://codeload.github.com/versatica/mediasoup-client/tar.gz/refs/heads/v3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254053330,"owners_count":22006717,"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":["client-library","javascript","nodejs","sfu","webrtc"],"created_at":"2024-07-30T19:02:41.939Z","updated_at":"2025-05-14T02:09:55.787Z","avatar_url":"https://github.com/versatica.png","language":"TypeScript","funding_links":["https://opencollective.com/mediasoup","https://opencollective.com/mediasoup/"],"categories":["TypeScript","webrtc"],"sub_categories":[],"readme":"# mediasoup-client v3\n\n[![][npm-shield-mediasoup-client]][npm-mediasoup-client]\n[![][github-actions-shield-mediasoup-client]][github-actions-mediasoup-client]\n[![][opencollective-shield-mediasoup]][opencollective-mediasoup]\n\nTypeScript client side library for building [mediasoup][mediasoup-website] based applications.\n\n## Website and Documentation\n\n- [mediasoup.org][mediasoup-website]\n\n## Support Forum\n\n- [mediasoup.discourse.group][mediasoup-discourse]\n\n## Usage Example\n\n```ts\nimport { Device } from 'mediasoup-client';\nimport mySignaling from './my-signaling'; // Our own signaling stuff.\n\n// Create a device (use browser auto-detection).\nconst device = new Device();\n\n// Communicate with our server app to retrieve router RTP capabilities.\nconst routerRtpCapabilities = await mySignaling.request(\n\t'getRouterCapabilities'\n);\n\n// Load the device with the router RTP capabilities.\nawait device.load({ routerRtpCapabilities });\n\n// Check whether we can produce video to the router.\nif (!device.canProduce('video')) {\n\tconsole.warn('cannot produce video');\n\n\t// Abort next steps.\n}\n\n// Create a transport in the server for sending our media through it.\nconst { id, iceParameters, iceCandidates, dtlsParameters, sctpParameters } =\n\tawait mySignaling.request('createTransport', {\n\t\tsctpCapabilities: device.sctpCapabilities,\n\t});\n\n// Create the local representation of our server-side transport.\nconst sendTransport = device.createSendTransport({\n\tid,\n\ticeParameters,\n\ticeCandidates,\n\tdtlsParameters,\n\tsctpParameters,\n});\n\n// Set transport \"connect\" event handler.\nsendTransport.on('connect', async ({ dtlsParameters }, callback, errback) =\u003e {\n\t// Here we must communicate our local parameters to our remote transport.\n\ttry {\n\t\tawait mySignaling.request('transport-connect', {\n\t\t\ttransportId: sendTransport.id,\n\t\t\tdtlsParameters,\n\t\t});\n\n\t\t// Done in the server, tell our transport.\n\t\tcallback();\n\t} catch (error) {\n\t\t// Something was wrong in server side.\n\t\terrback(error);\n\t}\n});\n\n// Set transport \"produce\" event handler.\nsendTransport.on(\n\t'produce',\n\tasync ({ kind, rtpParameters, appData }, callback, errback) =\u003e {\n\t\t// Here we must communicate our local parameters to our remote transport.\n\t\ttry {\n\t\t\tconst { id } = await mySignaling.request('produce', {\n\t\t\t\ttransportId: sendTransport.id,\n\t\t\t\tkind,\n\t\t\t\trtpParameters,\n\t\t\t\tappData,\n\t\t\t});\n\n\t\t\t// Done in the server, pass the response to our transport.\n\t\t\tcallback({ id });\n\t\t} catch (error) {\n\t\t\t// Something was wrong in server side.\n\t\t\terrback(error);\n\t\t}\n\t}\n);\n\n// Set transport \"producedata\" event handler.\nsendTransport.on(\n\t'producedata',\n\tasync (\n\t\t{ sctpStreamParameters, label, protocol, appData },\n\t\tcallback,\n\t\terrback\n\t) =\u003e {\n\t\t// Here we must communicate our local parameters to our remote transport.\n\t\ttry {\n\t\t\tconst { id } = await mySignaling.request('produceData', {\n\t\t\t\ttransportId: sendTransport.id,\n\t\t\t\tsctpStreamParameters,\n\t\t\t\tlabel,\n\t\t\t\tprotocol,\n\t\t\t\tappData,\n\t\t\t});\n\n\t\t\t// Done in the server, pass the response to our transport.\n\t\t\tcallback({ id });\n\t\t} catch (error) {\n\t\t\t// Something was wrong in server side.\n\t\t\terrback(error);\n\t\t}\n\t}\n);\n\n// Produce our webcam video.\nconst stream = await navigator.mediaDevices.getUserMedia({ video: true });\nconst webcamTrack = stream.getVideoTracks()[0];\nconst webcamProducer = await sendTransport.produce({ track: webcamTrack });\n\n// Produce data (DataChannel).\nconst dataProducer = await sendTransport.produceData({\n\tordered: true,\n\tlabel: 'foo',\n});\n```\n\n## Authors\n\n- Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]\n- José Luis Millán [[github](https://github.com/jmillan/)]\n\n## Social\n\n- Twitter: [@mediasoup_sfu](https://twitter.com/mediasoup_sfu)\n\n## Sponsor\n\nYou can support mediasoup by [sponsoring][sponsor] it. Thanks!\n\n## License\n\n[ISC](./LICENSE)\n\n[mediasoup-website]: https://mediasoup.org\n[mediasoup-discourse]: https://mediasoup.discourse.group\n[npm-shield-mediasoup-client]: https://img.shields.io/npm/v/mediasoup-client.svg\n[npm-mediasoup-client]: https://npmjs.org/package/mediasoup-client\n[github-actions-shield-mediasoup-client]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml/badge.svg\n[github-actions-mediasoup-client]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml\n[opencollective-shield-mediasoup]: https://img.shields.io/opencollective/all/mediasoup.svg\n[opencollective-mediasoup]: https://opencollective.com/mediasoup/\n[sponsor]: https://mediasoup.org/sponsor/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fversatica%2Fmediasoup-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fversatica%2Fmediasoup-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fversatica%2Fmediasoup-client/lists"}