Node M3U8 Downloader#


About#
A module that downloads m3u8 segments/playlists to specified output
Installation#
| npm install node-m3u8-downloader |
Usage#
Create an instance#
| const m3u8 = require('node-m3u8-downloader'); |
| |
| |
| const options = { |
| streamUrl: 'http://example.com/playlist.m3u8', |
| outputFile: '/path/to/output.mp4', |
| mergedPath: '/path/to/merged.ts', |
| quality: 'highest', |
| cache: '/path/to/cache', |
| concurrency: 10, |
| ffmpegPath: '/custom/path/to/ffmpeg', |
| useFfmpegToMerge: false, |
| cb: console.log, |
| }; |
| |
| const instance = new m3u8(options); |
Options#
streamUrl
: The URL of the m3u8 playlist.outputFile
: Path where the downloaded output file will be saved.mergedPath
: Path where merged ts files from segments are stored (default: cache + '/merged.ts').quality
: Quality of the stream to download (default: highest) (qualities: highest, medium and lowest).cache
: Path where temporary files are stored.concurrency
: Number of download threads (default: 10).ffmpegPath
: Custom path to ffmpeg executable.useFfmpegToMerge
: Use ffmpeg to merge segments. (default: false)cb
: Callback function for events.
Add a caption#
| instance.addCaption(urlOrPath, lang) |
Arguments#
urlOrPath
: the uri of subtitles files or pathlang
: language of the subtitle (default: english)
Start the download#
| await instance.startDownload() |
Events#
| instance.on(event, callback) |
All Events#
start
: Emitted when the downloader is starting.parsing
: Emitted when parsing the m3u8 playlist.segments_download:build
: Emitted when the segment downloader is built.segments_download:start
: Emitted when the segment downloader starts.segments_download:progress
: Emitted when a new segment is downloaded.progressData
: Object with download progress information. | { |
| uri: string, |
| path: string, |
| progress: { |
| total: int, |
| current: int, |
| percentage: int |
| } |
| } |
segments_download:end
: Emitted when all segments are downloaded.merging:start
: Emitted when merging of segments starts.merging:end
: Emitted when merging of segments ends.conversion:start
: Emitted when conversion to mp4 and caption adding starts.conversion:end
: Emitted when conversion ends.end
: Emitted when the m3u8 download is complete.
Features#
- Fast download (uses concurrency)
- Master playlist support
- Simple download
- Supports captions to add to video
Support#
For support, make an issue in github.
🔗 Links#



