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

beamlambda

v0.1.18

Published

Node.js native bindings to FFmpeg as an AWS Lambda layer.

Downloads

15

Readme

npm version License

Aerostat Beam Lambda

Node.js native bindings to FFmpeg for AWS Lambda layers with support for asynchronous processing via streams and promises.

The purpose of this package is to facilitate access to the capabilities of FFmpeg - including media muxing, demuxing, encoding, decoding and filtering - from AWS Lambda functions written in Node.js. Rather than using the filesystem and controlling the FFmpeg as an external command line process, the beam coder executes functions of the FFmpeg libav* libraries directly. Work is configured with Javascript objects and jobs execute over data buffers that are shared between Javascript and C. Long running media processing operations are asynchronous, running as promises that execute native code on a separate thread from the main event loop.

This package provides a lambda layer that can be included in your serverless lambda functions. To do this, follow the installation instructions below and require the beamlambda module. Then use the package as if it were a locally installed beamcoder in combination with AWS and other libraries.

Example

Get FFmpeg format details for any media file on the Internet.

Create a lambda function called beam-format as follows:

const beamcoder = require('beamlambda');

exports.handler = async (event) => {
    let fmt = await beamcoder.demuxer(event.url);
    return fmt.toJSON();
};

Add beam lambda as a layer as described below by selecting Provide a layer version ARN on the Layer selection page.

Create a test event as follows:

{
  "url": "https://raw.githubusercontent.com/Streampunk/beamlambda/HEAD/images/beamlambda_small.jpg"
}

Change the url for any media file you like, such as an MP4 file.

Run the test. A result similar to the following will be produced:

{
  "type": "demuxer",
  "iformat": "image2",
  "streams": [
    {
      "type": "Stream",
      "index": 0,
      "time_base": [ 1, 25 ],
      "start_time": 0,
      "duration": 1,
      "codecpar": {
        "type": "CodecParameters",
        "codec_type": "video",
        "codec_id": 7,
        "name": "mjpeg",
        "format": "yuvj420p",
        "bits_per_raw_sample": 8,
        "width": 369,
        "height": 243,
        "color_range": "pc",
        "color_space": "bt470bg",
        "chroma_location": "center"
      }
    }
  ],
  "url": "https://raw.githubusercontent.com/Streampunk/beamlambda/HEAD/images/beamlambda_small.jpg",
  "duration": 40000
}

Aerostat

Beam lambda is part of Streampunk Media's Aerostat open-source product set, whereby a conceptual fleet of media-oriented aerostats (blimps, air ships, zeppelins etc.) are launched into the clouds. Media content is beamed between the fleet as if light beams, and beamed to and from locations on the planet surface as required. See also the Aerostat Beam Engine.

Installation

NPM

AWS layer

Beam lambda uses features of Node.js only available from version 8 onwards, so the compatible runtime for a lambda function must be set to nodejs8.10 or later (when available).

Add one of the following generally accessible layers to your lambda function by ARN, based on the AWS region.

| region | layer arn | | ---------------------------- | --------------------------------------------------------------- | | ap-south-1 (Mumbai) | arn:aws:lambda:ap-south-1:258641003975:layer:beamlambda:1 | | ap-northeast-2 (Seoul) | arn:aws:lambda:ap-northeast-2:258641003975:layer:beamlambda:1 | | ap-southeast-1 (Singapore) | arn:aws:lambda:ap-southeast-1:258641003975:layer:beamlambda:1 | | ap-southeast-2 (Sydney) | arn:aws:lambda:ap-southeast-2:258641003975:layer:beamlambda:1 | | ap-northeast-1 (Tokyo) | arn:aws:lambda:ap-northeast-1:258641003975:layer:beamlambda:1 | | ca-central-1 (Canada) | arn:aws:lambda:ca-central-1:258641003975:layer:beamlambda:1 | | eu-central-1 (Frankfurt) | arn:aws:lambda:eu-central-1:258641003975:layer:beamlambda:1 | | eu-west-1 (Ireland) | arn:aws:lambda:eu-west-1:258641003975:layer:beamlambda:4 | | eu-west-2 (London) | arn:aws:lambda:eu-west-2:258641003975:layer:beamlambda:1 | | eu-west-3 (Paris) | arn:aws:lambda:eu-west-3:258641003975:layer:beamlambda:1 | | eu-north-1 (Stockholm) | arn:aws:lambda:eu-north-1:258641003975:layer:beamlambda:1 | | sa-east-1 (Sao Paulo) | arn:aws:lambda:sa-east-1:258641003975:layer:beamlambda:1 | | us-east-1 (N. Virginia) | arn:aws:lambda:us-east-1:258641003975:layer:beamlambda:1 | | us-east-2 (Ohio) | arn:aws:lambda:us-east-2:258641003975:layer:beamlambda:1 | | us-west-1 (N. California) | arn:aws:lambda:us-west-1:258641003975:layer:beamlambda:1 | | us-west-2 (Oregon) | arn:aws:lambda:us-west-2:258641003975:layer:beamlambda:1 |

Use beam lambda in your function by requiring the module from the layer:

const AWS = require('aws-sdk');
const beamcoder = require('beamlambda');
exports.handler = async (event) => { // Available for Node.js 8 onwards
  // Do something involving the beam coder here, possibly asynchronously
};

Local installation - linux only

Beam lambda can be installed on Linux and make use of the self-contained FFmpeg libraries without needing to install FFmpeg development resources. Ensure that your systems has Node.js v10 LTS or later installed and has build tools set up as described for node-gyp. Then install beamlambda in your project and require it in your Javascript code.

npm install beamlambda

const beamcoder = require('beamlambda');

API

Please see the documentation for beamcoder.

License

This project is licensed under the GNU General Public License, version 3 or later. Copyright (C) 2019, Streampunk Media Ltd.

This software links to libraries from the FFmpeg project, including optional parts and optimizations covered by the GPL v2.0 or later. Your attention is drawn to the FFmpeg project's page FFmpeg License and Legal Considerations and the Copyright notices of the FFmpeg developers.

This project is in no way part of or affiliated with the FFmpeg project.

Acknowledgements

A massive thank you to the FFmpeg development team who's tireless and ongoing work make this project - and so many other media software projects - possible.