Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wooldoughnut310/jnaudiostream
HTML5 audio streamer library for live streaming microphone and receiving
https://github.com/wooldoughnut310/jnaudiostream
Last synced: 21 days ago
JSON representation
HTML5 audio streamer library for live streaming microphone and receiving
- Host: GitHub
- URL: https://github.com/wooldoughnut310/jnaudiostream
- Owner: WoolDoughnut310
- License: mit
- Created: 2022-10-21T10:50:59.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-11-03T19:37:51.000Z (about 2 years ago)
- Last Synced: 2024-11-09T04:49:22.223Z (about 1 month ago)
- Language: TypeScript
- Size: 21.5 KB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# jnaudiostream
HTML5 audio streamer library for live streaming microphone and receiving, based off [sfmediastream](https://github.com/ScarletsFiction/SFMediaStream). The transmitted data is compressed (depend on the browser media encoder) before being sent to node server, and the latency is configurable.
## Install with CDN link
You can download minified js from this repository or use the CDN link
```html
```
## Install with NPM
```
npm i jnaudiostream
```## Use the library
```javascript
// ES Modules
import { AudioRecorder, AudioStreamer } from "jnaudiostream";// CommonJS
const { AudioRecorder, AudioStreamer } = require("jnaudiostream");const recorder = new AudioRecorder(...);
const streamer = new AudioStreamer(...);
```This is for web bundler like Webpack or Browserify, and can't be used as a library for Node.js. If you want to use this recorder/effect/plugin for Node.js, the I think it may be possible by using headless browser like Puppeteer.
## How to use
### AudioRecorder
This class is used for streaming the microphone to the server.
### Properties
| Property | Details |
| -------------- | --------------------------------------------------------- |
| debug | Set to true for outputting any message to browser console |
| mediaRecorder | Return current `mediaRecorder` that being used |
| mediaStream | Return current `mediaStream` that being used |
| mediaGranted | Return true if user granted the recorder |
| recordingReady | Return true if the recording was ready |
| recording | Return true if currently recording |```js
// Example for accessing the properties
recorder.debug = true;
```### Method
| Function | Arguments | Description |
| -------------- | --------- | ------------------------------------ |
| startRecording | `()` | Start recording camera or microphone |
| stopRecording | `()` | Stop recording camera or microphone |#### Event Listener
##### onReady
Callback when the library is ready for recording
```js
recorder.onReady = function (packet) {
console.log("Header size: " + packet.data.size);
mySocket.emit("bufferHeader", packet);
};
```##### onBuffer
Callback when data buffer is ready to be played
```js
recorder.onBuffer = function (packet) {
console.log("Data", packet);
mySocket.emit("stream", packet);
};
```### Example
```js
const recorder = new AudioRecorder(
{
/* audio:{
sampleRate: 44100,
channelCount: 1,
echoCancellation: false,
} */
},
1000
); // 1secrecorder.onRecordingReady = function (packet) {
console.log("Recording started!");
console.log("Header size: " + packet.data.size + "bytes");// Every new streamer must receive this header packet
mySocket.emit("bufferHeader", packet);
};recorder.onBufferProcess = function (packet) {
console.log("Buffer sent: " + packet[0].size + "bytes");
mySocket.emit("stream", packet);
};recorder.startRecording();
setTimeout(function () {
recorder.stopRecording();
}, 5000);
```## AudioStreamer
This class is used for buffering and playing microphone stream from the server.
```js
// The minimum duration for audio is ~100ms
var audioStreamer = new AudioStreamer(1000); // 1sec
```### Properties
| Property | Details |
| -------- | --------------------------------------------------------- |
| debug | Set to true for outputting any message to browser console |
| playing | Return true if playing a stream |
| latency | Return current latency |
| mimeType | Return mimeType of current streamed media |```js
// Example for accessing the properties
audioStreamer.debug = true;
```### Method
| Function | Arguments | Description |
| --------------- | ---------------- | ----------------------------------------------------------------- |
| playStream | `()` | Set this library to automatically play any received buffer |
| setBufferHeader | `(bufferHeader)` | Receive buffer header containing mimeType and `ArrayBuffer` data |
| receiveBuffer | `(packetBuffer)` | Receive arrayBuffer and play it when last buffer finished playing |
| stop | `()` | Stop playing any buffer |### Example
```js
var audioStreamer = new AudioStreamer(1000); // 1sec
audioStreamer.playStream();// First thing that must be received
mySocket.on("bufferHeader", function (packet) {
audioStreamer.setBufferHeader(packet);
});mySocket.on("stream", function (packet) {
console.log("Buffer received: " + packet[0].byteLength + "bytes");
audioStreamer.receiveBuffer(packet);
});
```## Contribution
If you want to help `jnaudiostream` please fork this project and edit on your repository, then make a pull request to here.
### Compile from source
After you downloaded this repo you need to install the devDependencies.
```
$ npm i
$ tsc -w
```After you make some changes on `/src` it will automatically compile into `/dist/`. Make sure you cleared your cache before doing experiments.
## License
`jnaudiostream` is under the MIT license.
But don't forget to add a link to this repository.