# m3u8-downloader
M3u8 downloader - Multi Thread/Auto Merge/Event Monitor/Custom HTTP Referrer/Support HTTP Proxy

****Pure Javascript

# How to use

Download m3u8 video files directly 
```shell
npm install -g m3u8-downloader-concurrency 

m3u8-downloader --url="https://xxx/xxx.m3u8"
# or with proxy
m3u8-downloader --proxy="http://127.0.0.1:1080" --url="https://xxx/xxx.m3u8" --out tmpdir
```


# options

## --out=outputDir 

Specify the download output directory

## --proxy="http://127.0.0.1:1080" 

Specify the proxy to use

## --suffix=".ts" 

Specify the suffix name of the video fragment to download

## --root="https://abc.com/video28912030123/" 

Specify the URL Root address of the video fragment to download

## --referrer="https://abc.com"

HTTP Referrer

## --threadCount=3

Thread Count

## --debug=true
DEBUG false or true


# Advanced usage
```shell
npm install --save m3u8-downloader-concurrency 
```

```javascript
let url = 'https://abc.com/video28912030123/index.m3u8'; //required
let outputDir = '/Users/xxxx/Downloads/tmp'; //required

// let outputFileName = 'output.ts'; //optional
// let threadCount = 5; //optional

// let videoUrlDirPath = 'https://abc.com/video28912030123/'; //optional
// let headerReferrer = 'https://abc.com'; //optional
// let videoSuffix = '.ts'; //optional

// let retryOnError = true; //optional

// let proxy = '127.0.0.1:1080'; //optional

let downloader = require('m3u8-downloader-concurrency')

let options = {
    url,
    outputDir, //optional
    proxy, //optional
    // outputFileName, //optional
    threadCount, //optional
    videoSuffix, //optional
    videoUrlDirPath, //optional
    headerReferrer, //optional
    retryOnError, //optional
    debug //optional
};

let listener = downloader.download(options)

listener.on('start', function (options) {
    console.log("started downloading", options);
});

listener.on('progress', function (percent) {
    console.log('progress', percent);
});


listener.on('downloaded', function (list) {
    console.log('downloaded', list);
});


listener.on('complete', function (outFile) {
  console.log("done", outFile);
});

listener.on('error', function (error) {
    console.error('error', error);
});

```
