DEV Community

Masui Masanori
Masui Masanori

Posted on

[Xubuntu] Try using WebRTC on Electron applications

Intro

I will try using WebRTC on an Electron application in this time.

I will use the previously created WebRTC application.

Environments

  • Xubuntu ver.22.04
  • Node.js ver.18.12.1

package.json

{ "name": "webrtc-electron-sample", "version": "1.0.0", "description": "WebRTC sample", "main": "js/main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "electron-forge start", "package": "electron-forge package", "make": "electron-forge make" }, "author": "Masui Masanori", "license": "MIT", "dependencies": { "electron-squirrel-startup": "^1.0.0", "npm": "^9.1.2" }, "devDependencies": { "@electron-forge/cli": "^6.0.3", "@electron-forge/maker-deb": "^6.0.3", "@electron-forge/maker-rpm": "^6.0.3", "@electron-forge/maker-squirrel": "^6.0.3", "@electron-forge/maker-zip": "^6.0.3", "electron": "^21.3.0", "ts-loader": "^9.4.1", "typescript": "^4.9.3", "webpack": "^5.75.0", "webpack-cli": "^5.0.0" } } 
Enter fullscreen mode Exit fullscreen mode

Errors

rpm

As before, I tried to create an executable using Electron Forge and got the error below.

> webrtc-electron-sample@1.0.0 make > electron-forge make ✔ Checking your system ✔ Loading configuration ✖ Resolving make targets › Cannot make for rpm, the following external binaries need to be installed… ◼ Running package command ◼ Running preMake hook ◼ Making distributables ◼ Running postMake hook An unhandled rejection has occurred inside Forge: Error: Cannot make for rpm, the following external binaries need to be installed: rpmbuild Electron Forge was terminated. Location: at MakerRpm.ensureExternalBinariesExist (/home/masanori/Documents/workspace/webrtc-electron-sample/node_modules/@electron-forge/maker-base/dist/Maker.js:100:19) at Task.task (/home/masanori/Documents/workspace/webrtc-electron-sample/node_modules/@electron-forge/core/dist/api/make.js:126:27) at Task.run (/home/masanori/Documents/workspace/webrtc-electron-sample/node_modules/listr2/dist/index.cjs:978:35) 
Enter fullscreen mode Exit fullscreen mode

This was because the "rpm" wasn't installed.
To avoid this error, I should install "rpm" by "sudo apt install rpm".

An unhandled rejection has occurred inside Forge:[object Object]

After installing rpm, I got another error when I ran "npm run make".

... ✔ Loading configuration ✔ Resolving make targets › Making for the following targets: deb, rpm ✔ Running package command ✔ Preparing to package application ✔ Running packaging hooks ✔ Running generateAssets hook ✔ Running prePackage hook ✔ Packaging application ✔ Packaging for x64 on linux [6s] ✔ Running postPackage hook ✔ Running preMake hook ❯ Making distributables ✖ Making a deb distributable for linux/x64 › An error occured while making for target: deb ◼ Making a rpm distributable for linux/x64 ◼ Running postMake hook An unhandled rejection has occurred inside Forge: [object Object] Electron Forge was terminated. Location: 
Enter fullscreen mode Exit fullscreen mode

Despite the error, the executable is still generated and can be run.
And this also reproduced in Windows environments.

To resolve this, I should add "authors" and "description" into "@electron-forge/maker-squirrel" of forge.config.js.

forge.config.js

module.exports = { packagerConfig: {}, rebuildConfig: {}, makers: [ { name: '@electron-forge/maker-squirrel', config: { authors: 'Masui Masanori', description: 'WebRTC sample' }, }, { name: '@electron-forge/maker-zip', platforms: ['darwin'], }, { name: '@electron-forge/maker-deb', config: {}, }, { name: '@electron-forge/maker-rpm', config: {}, }, ], }; 
Enter fullscreen mode Exit fullscreen mode

Result

... ✔ Running preMake hook ✔ Making distributables ✔ Making a deb distributable for linux/x64 [2m1s] ✔ Making a rpm distributable for linux/x64 [1m6s] ✔ Running postMake hook › Artifacts available at: /home/example/Documents/workspace/webrtc-electro… 
Enter fullscreen mode Exit fullscreen mode

Using WebRTC

Electron applications serve resource files such as HTML, JavaScript, etc. via file protocols.

I used to think that MediaStream and WebRTC required the resource files to be served over HTTPS or localhost.

So I thought MediaStream and WebRTC wouldn't work on Electron applications.
But both of them actually work fine.

MediaStream

Because the file protocol "file://" is considered as secure context, so I can use the MediaStream.
This behavior is the same not only on Electron but also on other web browsers such as FireFox.

WebRTC(Web access)

If I use other web browsers, I will get errors because of CORS.
But Electron doesn't block by default.

So I can use MediaStream and WebRTC.

But I should limit the accessable URL for security.

Top comments (0)