npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@rair/ingest

v0.2.1

Published

Shared module for conversion, encryption and manifest creation

Downloads

7

Readme

@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