Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
picamera.js
Advanced tools
This package provides the JavaScript client-side implementation for pi_webrtc, a project designed to enable WebRTC-based real-time video and audio streaming on a Raspberry Pi.
Try it out: https://tzuhuantai.github.io/PiCamera.js/demo/
You can find the source code here: index.html
npm install picamera.js
Display live streaming on the HTML <video>
element.
<video id="videoElement"></video>
<script type="module">
import { PiCamera } from 'picamera.js';
let videoRef = document.getElementById('videoElement');
let conn = new PiCamera({
deviceUid: 'your-custom-uid',
mqttHost: 'your.mqtt.cloud',
mqttPath: '/mqtt',
mqttPort: '8884', // Websocket Port
mqttUsername: 'hakunamatata',
mqttPassword: 'Wonderful',
stunUrls: ["stun:stun1.l.google.com:19302", "stun:stun2.l.google.com:19302"],
});
conn.attach(videoRef);
conn.connect();
</script>
Use webrtc datachannel to get the snapshot image only.
let conn = new PiCamera({
deviceUid: 'your-custom-uid',
mqttHost: 'your.mqtt.cloud',
mqttPath: '/mqtt',
mqttPort: '8884', // Websocket Port
mqttUsername: 'hakunamatata',
mqttPassword: 'Wonderful',
stunUrls: ["stun:stun1.l.google.com:19302"],
datachannelOnly: true,
});
conn.onDatachannel = (dc) => {
conn.snapshot();
}
conn.onSnapshot = (image) => {
// get a base64 image here, then terminate the connection.
conn.terminate();
}
conn.connect();
Available flags for initialization.
Option | Type | Default | Description |
---|---|---|---|
deviceUid | string | The custom --uid provided in the running pi_webrtc . | |
mqttHost | string | The MQTT server host. | |
mqttPath | string | /mqtt | The MQTT server path. |
mqttPort | number | 8884 | The WebSocket port for the MQTT server. |
mqttProtocol | string | wss | The portocol for the MQTT server. |
mqttUsername | string | The username for the MQTT server. | |
mqttPassword | string | The password for the MQTT server. | |
stunUrls | string[] | An array of STUN server URLs for WebRTC. | |
turnUrl | string | The TURN server URL for WebRTC. | |
turnUsername | string | The username for the TURN server. | |
turnPassword | string | The password for the TURN server. | |
timeout | number | 10000 | The connection timeout in milliseconds (ms ). |
datachannelOnly | boolean | false | Specifies that the connection is only for data transfer, without media streams. |
isMicOn | boolean | true | Enables the local microphone stream by default if the connection is established. |
isSpeakerOn | boolean | true | Enables the remote audio stream by default if the connection is established. |
= (state: RTCPeerConnectionState) => {}
Emitted when the WebRTC peer connection state changes.
= (dataChannel: RTCDataChannel) => {}
Emitted when the data channel successfully opens for data communication.
= (image: string) => {}
Triggered after calling the snapshot()
method. Emits a base64-encoded image once all image packets are received from the server.
= () => {}
Emitted when the P2P connection cannot be established within the allotted time. Automatically calls the terminate()
function.
.attach(mediaElement: HTMLVideoElement)
Attaches the remote media stream to the specified media element for playback.
mediaElement
- The HTML <video>
element where the remote media stream will be rendered..connect()
Start trying to establish the WebRTC connection.
.terminate()
Terminates the WebRTC connection.
.getStatus()
Retrieves the current connection status.
.snapshot(quality?: number)
Requests a snapshot image from the server.
quality
- The range from 0
to 100
, determines the image quality. The default value is 30
..toggleMic(enabled?: boolean)
Toggles the local audio stream on or off. If an argument is provided, it will force the state to the specified value, otherwise, the current state will be toggled.
.toggleSpeaker(enabled?: boolean)
Toggles the remote audio stream on or off. If an argument is provided, it will force the state to the specified value, otherwise, the current state will be toggled.
This project is licensed under the AGPL-3.0-only license. Under this license, anyone is free to use, modify, and distribute the code, but any use in network services or any modifications require the source code to be made public. Commercial usage without source code disclosure is not permitted.
If your use case does not permit source code disclosure or you have other licensing requirements, a commercial license is available. This option exempts you from the AGPL's source code sharing requirements and includes dedicated support. The commercial license also enables optional features, such as removing watermarks or unlocking additional functionalities.
For more information, please contact: 📧 Email: tzu.huan.tai@gmail.com
FAQs
WebRTC connection for Raspberry Pi Camera
We found that picamera.js demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.