@rair/ingest

v0.2.1
Shared module for conversion, encryption and manifest creation

@rair/ingest

A javascript module for handling the common file ingestion tasks for Rair. This includes transcoding, chunking and encryption.

Examples


API

Exports a single object with the following functions:

ingest.encodeHLS(input, format='mp4', handlers = { print: () => {}, printErr: () => {}, onExit: () => {} })

A sync operation. Calls into ffmpeg to convert video files to the approved RAIR encoding.

Accepts as input a binary file in any form that can be converted into a Uint8Array (e.g. typed array, buffer, arrayBuffer).

Optionally takes a format hint

Optionally takes a handlers object with closures to handle when the code prints, errors or exits.

Returns an array of named files. This includes the manifests and chunks for HLS streaming. e.g.

[{ name: 'master.m3u8', data: Uint8Array },
{ name: 'segment_001.ts', data: Uint8Array }, ...]
const file = document.getElementById('fileupload').files[0];
const fileData = await file.arrayBuffer()
let result = ingest.encodeHLS(fileData, 'mp4')

async ingest.encryptBrowser(hlsData, key)

Encrypts the chunk files given an AES key.

Accepts hlsData which is an array of files as {name, data} objects identical to the result of encodeHLS.

Accepts a AES encryption key. This is a standard browser CryptoKey for AES-128-CBC encryption that has the encrypt usage set.

Returns a promise that resolves to a list of files where the .ts files are encrypted with the provided key.

const key = await window.crypto.subtle.generateKey(
  {
    name: "AES-CBC",
    length: 128
  },
  true,
  ["encrypt"]
);
let result = ingest.encodeHLS(fileData, 'mp4')
const encryptedResult = await ingest.encryptBrowser(result, key)

async ingest.bundleAsZip(hlsData)

Bundle up a list of files into a zip. Accepts the same format as the result of encodeHLS and return a blob which contains a binary zip file.

let result = ingest.encodeHLS(fileData, 'mp4')
const zipBlob = await ingest.bundleAsZip(result)
// the zip blob can then be handed to the user file system
npm i @rair/ingest

Metadata

  • MIT
  • Whatever
  • Willem Olding
  • released 11/1/2020

Downloads

Maintainers