Audio-video chat library and example over WebRTC using peerjs
. The library allows you to easily setup a single
peer-to-peer call using audio, video and chat.
As the open peerjs
server is quite busy, and sometimes down, it might be better to run your own peer server. However,
since we need access to the camera and microphone, which are only accessible under HTTPS, you need to run it using SSL.
For Parcel, this is as simple as adding a --ssl
command line parameter. For the peerjs
server, however, you need to
generate an SSL keypair as described here. Long story short,
you need to run the following command to generate a localhost keypair:
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
Next, double-click the localhost.crt
to install it in your local key store. Manually select "Trusted Root
Certification Authorities" as the storage location. Next, restart your browser (all open instances need to be closed
first in order to reload the CAs). Copy the generated localhost.key
and localhost.crt
to the current working
directory, and start the peerjs
server using npm run server
. Note that this certificate is valid for 1 month only,
so get used to this.
For an alternative approach, consider using the free version of ngrok.
Ngrok allows you to create (for free) a single tunnel for your server. Next, you can run the client
and access it over your local network using the IP address of the development server's machine. You have to enable
parcel
to serve over https as described above.
Use a service as serveo to tunnel local requests via the Internet. In that case, run the server and expose it externally:
npm run server
ssh -R 80:localhost:9000 serveo.net # The URL returned should be the host option in the PeerJS initialization call
For example:
{
"host": "volpes.serveo.net",
"port": 443,
"path": "/myapp",
"secure": true,
"debug": 2
}
Next, do the same for the client app
npm start
ssh -R 80:localhost:1234 serveo.net # The URL returned can be used to access the client
First, install all dependencies:
npm i # only once to install all dependencies: or use `pnpm i` as a better alternative
Next, start the peerjs
server and parcel by running:
npm start