Node.js Video Library / MP4 & FLV parser / MP4 builder / HLS muxer
npm install node-video-lib



Node.js Video Library / MP4 & FLV parser / MP4 builder / HLS muxer
This library works only with MP4 and FLV video files encoded using H.264/H.265 video codecs and AAC audio codec.
``bash`
$ npm install node-video-lib
`javascript
const fs = require('fs');
const VideoLib = require('node-video-lib');
let fd = fs.openSync('/path/to/file', 'r');
try {
let movie = VideoLib.MovieParser.parse(fd);
// Work with movie
console.log('Duration:', movie.relativeDuration());
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fd);
}
`
`javascript
const fs = require('fs');
const VideoLib = require('node-video-lib');
let fd = fs.openSync('/path/to/file', 'r');
try {
let movie = VideoLib.MovieParser.parse(fd);
let fragmentList = VideoLib.FragmentListBuilder.build(movie, 5);
for (let i = 0; i < fragmentList.count(); i++) {
let fragment = fragmentList.get(i);
let sampleBuffers = VideoLib.FragmentReader.readSamples(fragment, fd);
let buffer = VideoLib.HLSPacketizer.packetize(fragment, sampleBuffers);
// Now buffer contains MPEG-TS chunk
}
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fd);
}
`
`javascript
const fs = require('fs');
const VideoLib = require('node-video-lib');
let fd = fs.openSync('/path/to/file', 'r');
try {
let movie = VideoLib.MovieParser.parse(fd);
let fw = fs.openSync('/path/to/output.mp4', 'w');
try {
VideoLib.MP4Builder.build(movie, fd, fw);
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fw);
}
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fd);
}
`
`javascript
const fs = require('fs');
const VideoLib = require('node-video-lib');
let fd = fs.openSync('/path/to/file', 'r');
try {
let movie = VideoLib.MovieParser.parse(fd);
let fragmentList = VideoLib.FragmentListBuilder.build(movie, 5);
console.log('Duration:', fragmentList.relativeDuration());
let fdi = fs.openSync('/path/to/index.idx', 'w');
try {
VideoLib.FragmentListIndexer.index(fragmentList, fdi);
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fdi);
}
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fd);
}
`
`javascript
const fs = require('fs');
const VideoLib = require('node-video-lib');
let fd = fs.openSync('/path/to/file', 'r');
let fdi = fs.openSync('/path/to/index.idx', 'r');
try {
let fragmentList = VideoLib.FragmentListIndexer.read(fdi);
console.log('Duration:', fragmentList.relativeDuration());
for (let i = 0; i < fragmentList.count(); i++) {
let fragment = fragmentList.get(i);
let sampleBuffers = VideoLib.FragmentReader.readSamples(fragment, fd);
let buffer = VideoLib.HLSPacketizer.packetize(fragment, sampleBuffers);
// Now buffer contains MPEG-TS chunk
}
} catch (ex) {
console.error('Error:', ex);
} finally {
fs.closeSync(fd);
fs.closeSync(fdi);
}
`
A tool for parsing video files (MP4 or FLV).
`javascript`
const MovieParser = require('node-video-lib').MovieParser
Methods:
* parse(source) - Parse video file
source \
Return: \
A tool for parsing MP4 video files.
`javascript`
const MP4Parser = require('node-video-lib').MP4Parser
Methods:
* parse(source) - Parse MP4 file
source \
Return: \
* check(buffer) - Check MP4 header
buffer \
Return: \
A tool for parsing FLV video files.
`javascript`
const FLVParser = require('node-video-lib').FLVParser
Methods:
* parse(source) - Parse FLV file
source \
Return: \
* check(buffer) - Check FLV header
buffer \
Return: \
A tool for building MP4 video files.
`javascript`
const MP4Builder = require('node-video-lib').MP4Builder
Methods:
* build(movie, source, fd) - Build MP4 file
movie \
source \
fd \
A tool for creating MPEG-TS chunks.
`javascript`
const HLSPacketizer = require('node-video-lib').HLSPacketizer
Methods:
* packetize(fragment, sampleBuffers) - Create MPEG-TS chunk from movie fragment
fragment \
sampleBuffers \
Return: \
A tool for splitting the movie into a list of fragments.
`javascript`
const FragmentListBuilder = require('node-video-lib').FragmentListBuilder
Methods:
* build(movie, fragmentDuration) - Split the movie to a list of fragments with an appropriate duration
movie \
fragmentDuration \
Return: \
A tool to work with index files.
`javascript`
const FragmentListIndexer = require('node-video-lib').FragmentListIndexer
Methods:
* index(fragmentList, fd) - Index fragment list
fragmentList \
fd \
* read(fd) - Read fragment list from index
fd \
Return: \
A tool for reading samples data of the given movie fragment.
`javascript`
const FragmentReader = require('node-video-lib').FragmentReader
Methods:
* readSamples(fragment, source) - Read samples data
fragment \
source \
Return: \
A movie class
`javascript`
const Movie = require('node-video-lib').Movie
Properties:
duration \
timescale \
tracks \
Methods:
* relativeDuration() - Movie duration in seconds
Return: \
* resolution() - Video resolution
Return: \
* size() - Samples size
Return: \
* addTrack(track) - Add a track to the tracks list
track \
A list of movie fragments class.
`javascript`
const FragmentList = require('node-video-lib').FragmentList
Properties:
fragmentDuration \
duration \
timescale \
video \
Methods:
* relativeDuration() - Movie duration in seconds
Return: \
* count() - Fragments count
Return: \
* size() - Samples size
Return: \
* get(index) - Get fragment by index
Return: \
A movie fragment class
`javascript`
const Fragment = require('node-video-lib').Fragment
Properties:
timestamp \
duration \
timescale \
videoExtraData \
audioExtraData \
samples \
Methods:
* relativeTimestamp() - Fragment timestamp in seconds
Return: \
* relativeDuration() - Fragment duration in seconds
Return: \
* hasVideo() - Fragment has a video track
Return: \
* hasAudio() - Fragment has an audio track
Return: \
A general track class
`javascript`
const Track = require('node-video-lib').Track
Properties:
duration \
timescale \
codec \
extraData \
samples \
Methods:
* relativeDuration() - Track duration in seconds
Return: \
* ensureDuration() - Calculate and set duration based on the sample durations (only if duration is zero)
Return: \
* size() - Samples size
Return: \
An audio track class. Extends the general track class
`javascript`
const AudioTrack = require('node-video-lib').AudioTrack
Properties:
channels \
sampleRate \
sampleSize \
A video track class. Extends the general track class
`javascript`
const VideoTrack = require('node-video-lib').VideoTrack
Properties:
width \
height \
Methods:
* resolution() - Video resolution
Return: \
A general video sample class
`javascript`
const Sample = require('node-video-lib').Sample
Properties:
timestamp \
timescale \
size \
offset \
Methods:
* relativeTimestamp() - Sample timestamp in seconds
Return: \
An audio sample class. Extends the general sample class
`javascript`
const AudioSample = require('node-video-lib').AudioSample
A video sample class. Extends the general sample class
`javascript``
const VideoSample = require('node-video-lib').VideoSample
Properties:
compositionOffset \
keyframe \