1.6.5-beta.0 • Published 3 years ago
@wmik/use-media-recorder v1.6.5-beta.0
use-media-recorder
React based hooks to utilize the MediaRecorder API for audio, video and screen recording.
Features
- 👀 Familiar API - Extends the MediaRecorder/MediaStream API with minimal abstraction making it easy to use.
- 🔴 Media recording - Supports audio 🎤, video 🎥 & screen 🖥️ recording.
- 🎛️ Configurable - Adjust settings to match your recording requirements.
- 💅 Headless - Build your own custom user interface to fit your style.
Installation
npm install @wmik/use-media-recorder
Example
import React from 'react';
import useMediaRecorder from '@wmik/use-media-recorder';
function Player({ srcBlob, audio }) {
if (!srcBlob) {
return null;
}
if (audio) {
return <audio src={URL.createObjectURL(srcBlob)} controls />;
}
return (
<video
src={URL.createObjectURL(srcBlob)}
width={520}
height={480}
controls
/>
);
}
function ScreenRecorderApp() {
let {
error,
status,
mediaBlob,
stopRecording,
getMediaStream,
startRecording
} = useMediaRecorder({
recordScreen: true,
blobOptions: { type: 'video/webm' },
mediaStreamConstraints: { audio: true, video: true }
});
return (
<article>
<h1>Screen recorder</h1>
{error ? `${status} ${error.message}` : status}
<section>
<button
type="button"
onClick={getMediaStream}
disabled={status === 'ready'}
>
Share screen
</button>
<button
type="button"
onClick={startRecording}
disabled={status === 'recording'}
>
Start recording
</button>
<button
type="button"
onClick={stopRecording}
disabled={status !== 'recording'}
>
Stop recording
</button>
</section>
<Player srcBlob={mediaBlob} />
</article>
);
}Demo
API
useMediaRecorder (Default export)
Creates a custom media recorder object using the MediaRecorder API.
Parameters (MediaRecorderProps)
| Property | Type | Description |
|---|---|---|
| blobOptions | BlobPropertyBag | Options used for creating a Blob object. |
| recordScreen | boolean | Enable/disable screen capture. |
| customMediaStream | MediaStream | Custom stream e.g canvas.captureStream |
| onStart | function | Callback to run when recording starts. |
| onStop | function | Callback to run when recording stops. Accepts a Blob object as a parameter. |
| onError | function | Callback to run when an error occurs while recording. Accepts an error object as a parameter. |
| onDataAvailable | function | Callback to run when recording data exists. |
| mediaRecorderOptions | object | Options used for creating MediaRecorder object. |
| mediaStreamConstraints* | MediaStreamConstraints | Options used for creating a MediaStream object from getDisplayMedia and getUserMedia. |
NOTE: * means it is required
Returns (MediaRecorderHookOptions)
| Property | Type | Description |
|---|---|---|
| error | Error | Information about an operation failure. Possible exceptions |
| status | string | Current state of recorder. One of idle, acquiring_media, ready, recording, paused,stopping, stopped, failed. |
| mediaBlob | Blob | Raw media data. |
| isAudioMuted | boolean | Indicates whether audio is active/inactive. |
| stopRecording | function | End a recording. |
| getMediaStream | function | Request for a media source. Camera, mic and/or screen access. Returns instance of requested media source or customMediaStream if was provided in initializing. |
| clearMediaStream | function | Resets the media stream object to null. |
| clearMediaBlob | function | Resets the media blob to null. |
| startRecording | function(timeSlice?) | Begin a recording. Optional argument timeSlice controls chunk size. |
| pauseRecording | function | Stop without ending a recording allowing the recording to continue later. |
| resumeRecording | function | Continue a recording from a previous pause. |
| muteAudio | function | Disable audio. |
| unMuteAudio | function | Enable audio. |
| liveStream | MediaStream | Real-time stream of current recording. |
More examples
function LiveStreamPreview({ stream }) {
let videoPreviewRef = React.useRef();
React.useEffect(() => {
if (videoPreviewRef.current && stream) {
videoPreviewRef.current.srcObject = stream;
}
}, [stream]);
if (!stream) {
return null;
}
return <video ref={videoPreviewRef} width={520} height={480} autoPlay />;
}
<LiveStreamPreview stream={liveStream} />Related
License
MIT ©2020
1.6.4-beta.0
3 years ago
1.6.1-beta.0
3 years ago
1.6.0-beta.0
3 years ago
1.6.3-beta.0
3 years ago
1.6.2-beta.0
3 years ago
1.5.0-beta.0
4 years ago
1.6.5-beta.0
3 years ago
1.4.0-beta.0
4 years ago
1.3.0-beta.0
4 years ago
1.2.1-beta.0
4 years ago
1.2.0-beta.0
4 years ago
1.1.0-beta.1
5 years ago
1.0.0-alpha.4
5 years ago
1.0.0-alpha.3
5 years ago
1.0.0-alpha.2
5 years ago
1.0.0-alpha.1
5 years ago