{"id":26802412,"url":"https://github.com/red5pro/red5pro-conference-host","last_synced_at":"2025-07-30T03:06:46.433Z","repository":{"id":47963632,"uuid":"358382571","full_name":"red5pro/red5pro-conference-host","owner":"red5pro","description":"Simple WebSocket Server for hosting Testbed Conference Example","archived":false,"fork":false,"pushed_at":"2022-08-24T18:35:00.000Z","size":1635,"stargazers_count":1,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-13T05:04:18.933Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/red5pro.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}},"created_at":"2021-04-15T20:19:48.000Z","updated_at":"2024-12-12T11:09:01.000Z","dependencies_parsed_at":"2022-08-12T15:20:44.356Z","dependency_job_id":null,"html_url":"https://github.com/red5pro/red5pro-conference-host","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/red5pro/red5pro-conference-host","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/red5pro%2Fred5pro-conference-host","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/red5pro%2Fred5pro-conference-host/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/red5pro%2Fred5pro-conference-host/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/red5pro%2Fred5pro-conference-host/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/red5pro","download_url":"https://codeload.github.com/red5pro/red5pro-conference-host/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/red5pro%2Fred5pro-conference-host/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267802797,"owners_count":24146510,"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","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2025-03-29T21:18:00.308Z","updated_at":"2025-07-30T03:06:46.395Z","avatar_url":"https://github.com/red5pro.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Red5 Pro Simple Conference Host\n\n\u003e Simple WebSocket Server for hosting Testbed Conference Example\n\nThis NodeJS based server is an example of a simple in-memory WebSocket server that allows participants in a conference to register and unregister to a room. It can be used with the [Conference Examples](https://github.com/red5pro/streaming-html5/tree/master/src/page/test/conference) from the Red5 Pro Testbed.\n\nUpon connection to the socket with the required parameters, connections are registered and all parties associated with the defined room are notified on previously existing connections. Likewise, when connections are closed, all parties associated with the defined room are notified.\n\nRequired connection parameters and notifications are detailed later in this document.\n\n\u003e You can specify the endpoint for this server when using the [Conference Examples](https://github.com/red5pro/streaming-html5/tree/master/src/page/test/conference) using the `socket` query parameter, e.g., [http://localhost:5080/webrtcexamples/test/conference/socket=localhost:8001](http://localhost:5080/webrtcexamples/test/conference/?socket=localhost:8001)\n\n# Requirements\n\n* NodeJS v10+\n* NPM 6+\n\n```sh\ncurl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh\nsudo bash nodesource_setup.sh\nsudo apt-get install -y nodejs\nsudo apt-get install build-essential\nsudo npm install forever -g\n```\n\n\u003e This project was developed with the latest NodeJS \u0026 NPM as of the time of this writing (April 15th, 2021).\n\n# Installation\n\n```sh\nnpm install\n```\n# SSL\n\nFor most NodeJS implementations, it is necessary to generate SSL certificate files, which are converted into .crt and .key files to be stored in the `\u003cservice\u003e/cert` folder.\n\n## Using Let's Encrypt\n\nThe following can be run to install Let's Encrypt Certbot on Ubuntu (`snap` is included with most Ubuntu distributions by default)\n\n1.\tsudo snap install core; sudo snap refresh core\n2.\tsudo snap install --classic certbot\n3.\tsudo ln -s /snap/bin/certbot /usr/bin/certbot\n\nTo generate the cert, run `sudo certbot certonly --standalone --email \u003cyour-email\u003e --agree-tos -d \u003cserver-fqdn\u003e`  (for example: `sudo certbot certonly --standalone --email jessica@infrared5.com --agree-tos -d test01.red5.net`)\n\nYou will then need to copy the fullchain and privatekey to the cert directory of your application\n\n```sh\nsudo cp /etc/letsencrypt/archive/\u003cserver-fqdn\u003e/fullchain1.pem ~/\u003cnodejs-server\u003e/cert/certificate.crt\nsudo cp /etc/letsencrypt/archive/\u003cserver-fqdn\u003e/privkey1.pem ~/\u003cnodejs-server\u003e/cert/privateKey.key\nsudo chmod +r ~/\u003cnodejs-server\u003e/cert/*\n```\n\n\u003e  (note: the number will increment as you renew, i.e., fullchain1.pem --\u003e fullchain2.pem, etc.\n\nYour index.js file then needs to be modified with the full path to the certificate and privateKey files (replace with the appropriate paths):\n\n```js\nif (useSSL) {\n  cert = fs.readFileSync('/home/ubuntu/serverapp/cert/certificate.crt')\n  key = fs.readFileSync('/home/ubuntu/serverapp/cert/privateKey.key')\n  port = 443\n```\n\n# Usage\n\n```sh\nnpm run start\n```\n\nor better yet,\n\n```sh\nforever start index.js\n```\n\nto view the log location and status of the running process, run `forever list`\n\n\u003e Running the above will start the server on the default port which is defined in index.js\n\nAlternatively:\n\n```sh\nPORT=3000 node index.js\n```\n\n\u003e Running the above will start the server on the defined port `3000`\n\n# Clients\n\n## Parameters\n\nAny connecting clients should provide the following query paramters in the URL when establishing a `WebSocket`:\n\n* `room` : the name of the room to join.\n* `streamName` : the name of the stream that the joining participant will be broadcasting with.\n\n## Payloads\n\nUpon any successful connection, each client associated with a `room` will be notified of an updated in-memory list of every `streamName`.\n\n\u003e It is important to note that this list will be reflective of all streams that are currently \"active\" in the room. It will grow as more client connections are made and shrink as client connections are closed.\n\nEach client will be notified of the object with the associated `room` and a `streams` list of a `JSON Array` listing of each `streamName`. Each `streamName` is a `String`.\n\n**Example**\n\n```\n{\n  room: 'room1',\n  streams: ['stream1', 'stream2', 'stream3']\n}\n```\n\n## Forever Commands\n\n\t•\tforever start: starts a script as a daemon.\n\t•\tforever stop: stops the daemon script by Id|Uid|Pid|Index|Script.\n\t•\tforever stopall: stops all running scripts.\n\t•\tforever restart: restarts the daemon script.\n\t•\tforever restartall: restarts all running forever scripts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fred5pro%2Fred5pro-conference-host","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fred5pro%2Fred5pro-conference-host","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fred5pro%2Fred5pro-conference-host/lists"}