stream-linker
TypeScript icon, indicating that this package has built-in type declarations

1.3.1 • Public • Published

Read this in other languages: English | Tiếng Việt

StreamLinker

StreamLinker is a library that allows you to connect and livestream video data from an input source to an RTMP path. This library utilizes ffmpeg, bullmq and hls-maker technologies for video processing.

Installation

npm install stream-linker

Notes

  • Make sure you have ffmpeg and necessary libraries installed before using this library.
  • Make sure you have Redis installed and running on your system, as StreamLinker uses BullMQ, a Redis-based queue library. You can refer to BullMQ's documentation for advanced Redis configurations.

Usage

const { StreamLinker, StreamLinkerConfig } = require('stream-linker');

const options: StreamLinkerConfig = {
    rtmpOuputPath: 'rtmp://example.com/live/streamkey',
    startInputFilePath: '/path/to/your/source/file',
    // ... other options as needed
};

const linker = new StreamLinker(options);

// Start livestreaming video
linker.start();

Tutorial Video

Tutorial Video

API

Class: StreamLinker

Constructor

new StreamLinker(options: StreamLinkerConfig);

Creates a new instance of StreamLinker.

Method: start

linker.start(): Promise<void>

Initiates the video livestream. This method will begin the video conversion process and stream it to the provided RTMP path.

Method: append

StreamLinker.append(sourceFilePath: string, rtmpOuputPath: string, redisConfig?: ConnectionConfig): Promise<void>

Appends video to the live stream. This method allows you to add additional segments to the ongoing stream.

Method: insert

StreamLinker.insert(sourceFilePath: string, rtmpOuputPath: string, redisConfig?: ConnectionConfig): Promise<void>

Insert video to the live stream. This method allows you to insert additional segments to the ongoing stream.

Method: stop

StreamLinker.stop(rtmpOuputPath: string, redisConfig?: ConnectionConfig): Promise<boolean>

Stops the livestream for the specified RTMP output path.

Configuration

Interface: StreamLinkerConfig

interface StreamLinkerConfig {
    rtmpOuputPath: string; 
    standbyInputFilePath?: string;
    startInputFilePath: string;
    isAppendDefault?: boolean;
    workerConnection?: ConnectionConfig,
    queueConnection?: ConnectionConfig,
    ffmpegHLSOptions?: ffmpegOptions,
    ffmpegStreamOptions?: ffmpegOptions
}
  • rtmpOuputPath (string): Destination RTMP stream.

  • startInputFilePath (string): Path to the source video file.

  • standbyInputFilePath (optional, string): Path to a backup video file. Activated if the source video ends. If not provided, the source video is looped.

  • isAppendDefault (optional, boolean): Default is true. If it is false stream will be stopped when video source ends (no loop)

  • workerConnection (optional, ConnectionConfig): Redis connection for the worker.

  • queueConnection (optional, ConnectionConfig): Redis connection for the queue.

  • ffmpegHLSOptions (optional) Ffmpeg options for conversion input video to HLS

  • ffmpegStreamOptions (optional) Ffmpeg options for live streaming

Configuration for StreamLinker. Includes necessary information for initializing and configuring the livestream.

Example

const { StreamLinker, StreamLinkerConfig } = require('stream-linker');

const redisConfig = {
    host: '127.0.0.1', 
    port: 6379,
    username: 'default',
    password: 'passWord',
    db: 0
}

const options: StreamLinkerConfig = {
    rtmpOuputPath: 'rtmp://example.com/live/streamkey',
    startInputFilePath: '/path/to/source/video.mp4',
    standbyInputFilePath: '/path/to/standby/video.mp4', // Optional
    workerConnection: redisConfig, // Optional
    queueConnection: redisConfig, // Optional
    ffmpegStreamOptions: {
        input: [
            '-re', 
            '-live_start_index', '50'
        ], 
        output: [
            '-c', 'copy', 
            '-preset', 'veryfast', 
            '-f', 'flv', 
            '-flvflags', 'no_duration_filesize'
        ]
    }, // Optional
    ffmpegHLSOptions: { 
        input: ['...'], 
        output: ['...']
    }, // Optional
    
};

const linker = new StreamLinker(options);

// Start livestreaming video
linker.start();

// Append additional video to the live stream 
// redisConfig param is optional
StreamLinker.append('/path/to/another/source/file', 'rtmp://example.com/live/streamkey', redisConfig);

// Insert additional video to the live stream
// redisConfig param is optional
StreamLinker.insert('/path/to/another/source/file', 'rtmp://example.com/live/streamkey', redisConfig);

// Stop the livestream
// redisConfig param is optional
StreamLinker.stop('rtmp://example.com/live/streamkey', redisConfig);

// Events tracking
stream.on('startStream', function (ffmpegCommand) {
    console.log("onStartStream", ffmpegCommand)
});

stream.on('progressStream', function (totalFrames, progressFrames) {
    console.log("onProgressStream", totalFrames, progressFrames);
});

stream.on('endStream', function (streamOutput) {
    console.log("onEndStream", streamOutput);
});

stream.on('errorStream', function (err, stdout, stderr) {
    console.log("err", err, "stdout", stdout, "stderr", stderr);
});

stream.on('completed', function (value) {
    console.log("onCompleted", value);
});

Command Line Interface (CLI)

StreamLinker provides a CLI for seamless streaming. Below are the available commands and their usage:

Installation

Install StreamLinker globally using npm:

npm install -g stream-linker

Start Command

You can use -h or --help to see the available options.

stream-linker -h

Launch your stream with StreamLinker:

stream-linker start -i <inputPath> -o <outputUrl> [-s <standbyPath>]
  • -i, --input <inputPath>: Path to the input video file. Must be specified.
  • -o, --output <outputUrl>: RTMP output URL for live streaming. Must be specified.
  • -s, --standby <standbyPath> (optional): Path to the standby video for no signal.
  • ... use stream-linker start -h to see the available options.

Example:

stream-linker start -i /path/to/input/video.mp4 -o rtmp://example.com/live/streamkey -s /path/to/standby/video.mp4

Append Command

Append a video to your live stream:

stream-linker append -i <inputPath> -o <outputUrl>
  • -i, --input <inputPath>: Path to the input video file. Must be specified.
  • -o, --output <outputUrl>: RTMP output URL for live streaming. Must be specified.
  • ... use stream-linker append -h to see the available options.

Example:

stream-linker append -i /path/to/another/video.mp4 -o rtmp://example.com/live/streamkey

Insert Command

Insert a video to your live stream:

stream-linker insert -i <inputPath> -o <outputUrl>
  • -i, --input <inputPath>: Path to the input video file. Must be specified.
  • -o, --output <outputUrl>: RTMP output URL for live streaming. Must be specified.
  • ... use stream-linker insert -h to see the available options.

Example:

stream-linker insert -i /path/to/another/video.mp4 -o rtmp://example.com/live/streamkey

Stop Command

Stop a livestream for a specific output URL:

stream-linker stop <outputUrl>
  • <outputUrl>: RTMP output URL for live streaming. Must be specified.
  • ... use stream-linker stop -h to see the available options.

Example:

stream-linker stop rtmp://example.com/live/streamkey

Note:

  • Make sure you have installed StreamLinker globally using npm install -g stream-linker before using the CLI.
  • Ensure that both the input and standby video files exist at the specified paths.

Support

Contact the author: hunglsxx@gmail.com

License

This library is released under the MIT License.

Package Sidebar

Install

npm i stream-linker

Weekly Downloads

3

Version

1.3.1

License

MIT

Unpacked Size

30.1 kB

Total Files

6

Last publish

Collaborators

  • hunglsx