alezanai / kvs-parser

Kinesis Video Stream Parser Library in Node.js
GNU General Public License v3.0
3 stars 1 forks source link

Kinesis Video Stream Parser Library in Node.js

Unofficial Node.js Kinesis Video Stream Parser Library, provided without any warranty, and not by AWS.

This library is using

Features

The lib exposes stream to manipulate the kinesis video streams. It is exposed at different level (from higher-level to lower-level)

Context

Installation

You need to have ffmpeg libraries on your system, see beamcoder installation instructions.

npm install kvs-parser

Usage

FrameStream

FrameStream is decoding the fragments and then extract frame for each fragment

Example

const fs = require('fs');
const {FrameStream} = require('kvs-parser');

// see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/KinesisVideoMedia.html#getMedia-property
const getMediaParams = {
 StartSelector: { /* required */
    StartSelectorType: FRAGMENT_NUMBER | SERVER_TIMESTAMP | PRODUCER_TIMESTAMP | NOW | EARLIEST | CONTINUATION_TOKEN, /* required */
    AfterFragmentNumber: 'STRING_VALUE',
    ContinuationToken: 'STRING_VALUE',
    StartTimestamp: new Date || 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)' || 123456789
  },
  StreamARN: 'STRING_VALUE',
  StreamName: 'STRING_VALUE'
};

const stream = new FrameStream(getMediaParameters, {
    fps: 30, // fps here is used to set the pts of each frame in beamcoder
    encoder: {// 
        name: 'mjpeg',
        width: 1920,
        height: 1080,
        pix_fmt: 'yuvj420p',
        time_base: [1, 1],
    }
});

let frameNum = 0;

stream.on('data', ({encoded, tags, frame}) => {
    const filename = `tmp/frame-${frameNum.toString().padStart(5, '0')}.jpg`;
    console.log(`Writing file ${filename}`);
    frameNum++
    fs.writeFileSync(filename, encoded.packets[0].data);
});

Parameters

Output