0.4.1 • Published 5 years ago

camerakit v0.4.1

Weekly downloads
19
License
MIT
Repository
-
Last release
5 years ago

CameraKit helps you add reliable camera to your app quickly. Our open source camera platform provides consistent capture results, service that scales, and endless camera possibilities.

With CameraKit Web you are able to effortlessly do the following:

  • ✅ Create custom capture streams
  • ✅ Capture image and video from the same stream
  • ✅ Handle permissions automatically
  • ✅ Set custom media sources
  • ✅ Change stream resolution
  • 📷 Capture images
  • 📹 Record video
  • 📹 Start, stop and pause video recording
  • 🧲 Download images and videos

Other Camera Implementations

CameraKit Web as the name suggests, is our camera platform for websites. In addition to Web, we provide our camera interface on the following platforms:

Browser support

BrowserPreviewPicturesRecording
Desktop Chrome
Android Chrome
Firefox
Edge
Desktop Safari
Mobile Safari

Sponsored By

Getting Started

Setup

Install the camerakit package.

$ npm install camerakit

Usage

Import and use camerakit in your project.

import camerakit from "camerakit";

Or, alternatively, you can import via a script tag:

<script src="path/to/camerakit.min.js"></script>
<!-- You can now access `camerakit` from the global scope -->

For additional Safari requirements, see Safari support details.

Example usage:

async function () {
  const devices = await camerakit.getDevices();

  const preview = await camerakit.createCaptureStream({
    audio: devices.audio[0],
    video: devices.video[0]
  });

  preview.setResolution({width: 1920, height: 1080});
  const myPicture = preview.shutter.capture();

  preview.recorder.start();

  // Wait...

  // Pause the recording & resume
  await preview.recorder.pause();
  await preview.recorder.start();

  // Wait some more...

  const recordedVideo = await preview.recorder.stop(); // Use the video yourself

  preview.recorder.downloadLatestRecording(); // Download the video direct from browser

  // Stop using camera
  preview.destroy();

  // Play video via camerakit player
  const player = new camerakit.Player();
  player.src = window.URL.createObjectURL(recordedVideo);

  // Use the video player wherever you want!
  document.getElementById("your-player-container").appendChild(player);
  player.play();
}

Safari support details

Currently, the WebAssembly and JS worker files used for video recording and playback on Safari must be hosted seperately on a webserver. The compiled files can be found in dist/browser/, ensure they're accessible via a public URL (e.g https://myurl.com/myWorkerFile.js).

If you'd like to host the wasm/worker files in a custom path, you'll need to update the base param on camerakit.Loader and as well as to fallbackConfig when calling createCaptureStream:

import camerakit from "camerakit";

async function () {
  // Point fallback video player to correct directory
  camerakit.Loader.base = "/webm";

  const myStream = await camerakit.createCaptureStream({
    video: ...,
    audio: ...,
    fallbackConfig: {
      base: "/webm" // Point fallback recorder
    }
  });
}

API documentation

camerakit

Methods

NameParametersReturnDescription
camerakit.getDevicesnonePromise<{audio: Array<MediaSource>, video: Array<MediaSource>}>Returns available media devices for streaming
camerakit.createCaptureStream{audio?: MediaSource, video?: MediaSource, fallbackConfig?: Partial<FallbackConfig>}Promise<CaptureStream>Creates new CaptureStream instance with provided media inputs
camerakit.enableStorage{method?: "localStorage" \| "sessionStorage" \| null}voidEnables photo storage as a default
camerakit.disableStoragenonevoidDisables photo storage as a default
camerakit.enableDebugnonevoidEnables debug mode for logging output
camerakit.disableDebugnonevoidDisables debug mode

Properties

NameType
camerakit.PlayerPlayer
camerakit.LoaderLoader

CaptureStream

Instance methods

NameParametersReturnDescription
stream.initnonePromise<void>Initializes stream and requests permissions from browser
stream.setResolution{width?: number, height?: number, aspect?: number, source?: "original" \| "preview"}Promise<void>Sets the video resolution of the specified source
stream.setSource{audio?: MediaSource, video?: MediaSource, source?: "original" \| "preview"}Promise<void>Overrides original media inputs for specified source
stream.getPreview{source?: "original" \| "preview"}HTMLVideoElementReturns an video element with the appropriate internal event handlers
stream.getMediaStream{source?: "original" \| "preview"}Promise<MediaStream>Returns raw MediaStream for use in video display
stream.destroynonevoidCloses all open streams and cancels capture

Properties

NameType
stream.shutterShutter
stream.recorderRecorder

Shutter

Used for taking photos of the CaptureStream.

Instance methods

nameParametersReturnDescription
shutter.capture{source?: "original" \| "preview", save?: "localStorage" \| "sessionStorage" \| null}stringTakes and returns picture from specified source
shutter.captureAndDownload{source?: "original" \| "preview", filename?: string}booleanCalls capture and creates file download from result
shutter.downloadLatestCapturefilename?: stringbooleanDownloads the last picture taken

Recorder

Used for recording video of the the CaptureStream.

Instance methods

nameParametersReturnDescription
recorder.start{source?: "original" \| "preview"}Promise<void>Starts the recording from the specified source
recorder.stopnonePromise<?Blob>Stops the recording and returns a completed video file
recorder.pausenonePromise<void>Pauses the recording until resumed with recorder.start()
recorder.getLatestRecordingnone?BlobReturns last recorded video file
recorder.downloadLatestRecordingfilename?: stringbooleanCreates file download from last video recording
recorder.setMimeTypemimeType: stringbooleanSets the video recording mime type for all sources

Player

A player following the HTMLVideoElement spec. Reccomended for playback as it can serve as a fallback for browsers that don't natively support webm.

Example:

const player = new camerakit.Player();

player.src = window.URL.createObjectURL(/* Your video Blob */);

player.play();
player.pause();
player.muted = true;
player.width = 1920;
player.height = 1080;

// Restart video playback
player.stop();
player.currentTime = 0;
player.play();

NOTE: If your browser supports the exported video, creating a Player instance will return a vanilla HTMLVideoElement.

Loader

Exposed OGVLoader.

FallbackConfig

NOTE: All fields are optional:

{
  base: string; // Base directory for wasm/worker files

  width: number;
  height: number;
  bitrate: number;
  framerate: number;
}

License

CameraKit Web is MIT License