streaming m3u8 parser for Apple's HTTP Live Streaming protocol

Usage no npm install needed!

<script type="module">
  import chovyM3u8 from 'https://cdn.skypack.dev/@chovy/m3u8';



node-m3u8 is a streaming m3u8 parser tailored for dealing with Apple's HTTP Live Streaming protocol. It may work for other m3u files, but I have not tested it for those uses.

Note: this is an updated fork of m3u8 that fixes a bunch of warnings with unknown attributes. These attributes have been accounted for. The main package m3u8 appears to be dead.


npm install --save @chovy/m3u8


var m3u8 = require('@chovy/m3u8');
var fs   = require('fs');

var parser = m3u8.createStream();
var file   = fs.createReadStream('/path/to/file.m3u8');

parser.on('item', function(item) {
  // emits PlaylistItem, MediaItem, StreamItem, and IframeStreamItem
parser.on('m3u', function(m3u) {
  // fully parsed m3u file

All items and the m3u object have toString() methods for conversion to m3u8. Attributes and properties have getter/setters on m3u and item objects:

parser.on('item', function(item) {
  var duration = item.get('bandwidth');
  item.set('uri', 'http://example.com/' + item.get('uri'));

The M3U and Item objects are available on m3u8:

var m3u8 = require('@chovy/m3u8');

var m3u = m3u8.M3U.create();
  duration : 10,
  uri      : 'file'

See tests for more usage patterns.