node-m3u8-downloader
Version:
Downloads an m3u8 playlist to specified output
108 lines (88 loc) • 4 kB
Markdown
<h1 align="center">Node M3U8 Downloader</h1>
[](https://www.npmjs.com/package/node-m3u8-downloader)
[](https://raw.githubusercontent.com/merasugd/m3u8-dl/main/LICENSE)
## About
A module that downloads m3u8 segments/playlists to specified output
## Installation
```bash
npm install node-m3u8-downloader
```
## Usage
#### Create an instance
```js
const m3u8 = require('node-m3u8-downloader');
// Initialize the instance with options
const options = {
streamUrl: 'http://example.com/playlist.m3u8',
outputFile: '/path/to/output.mp4',
mergedPath: '/path/to/merged.ts', // default: os.tmpdir()/m3u8dl/merged.ts
quality: 'highest', // default: highest
cache: '/path/to/cache', // cache path for temporary files
concurrency: 10, // number of download threads (default: 20)
ffmpegPath: '/custom/path/to/ffmpeg', // custom path to ffmpeg
useFfmpegToMerge: false, // use ffmpeg to merge
cb: console.log, // callback function
};
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
```js
instance.addCaption(urlOrPath, lang)
```
#### Arguments
- `urlOrPath`: the uri of subtitles files or path
- `lang`: language of the subtitle (default: english)
#### Start the download
```js
await instance.startDownload()
```
#### Events
```js
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.
```js
{
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
[](https://www.youtube.com/@merasu_gd)
[](https://www.facebook.com/profile.php?id=61554338001508)
[](https://merasugd.github.io/m3u8-dl/)
[](https://github.com/merasugd)