From 4be364ce2ee977eead4deccecbe2ca10eb218d88 Mon Sep 17 00:00:00 2001 From: Muaz Ahmad Date: Tue, 22 Aug 2023 18:20:09 +0500 Subject: [PATCH] m3u8 parsing and segment fetch queue --- hls-player.js | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/hls-player.js b/hls-player.js index 2086af9..617e372 100644 --- a/hls-player.js +++ b/hls-player.js @@ -7,16 +7,40 @@ class PlaylistLoader { this.refresh_interval = null; this.new_segments = []; } + fetch_playlist() { var xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { + xmlHttp.onreadystatechange = ( function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { - console.log(xmlHttp.responseText); + this.parse_playlist(xmlHttp.responseText); } - } + } ).bind(this) xmlHttp.open("GET", this.playlist_src, true); xmlHttp.send(null); } + + parse_playlist(playlist_content) { + var lines = playlist_content.split('\n'); + var segments = []; + var segment_block_flag = this.last_segment === null ? false : true; + for (var i = 0; i < lines.length; i++) { + if (lines[i].startsWith("#")) { + if (lines[i].startsWith("EXT-X-TARGETDURATION", 1)) { + this.refresh_interval = parseFloat(lines[i].split(':')[1]); + } + } else { + if (segment_block_flag || lines[i] == '') { + if (lines[i] == this.last_segment) { + segment_block_flag = false; + } + } else { + segments.push(lines[i]); + } + } + } + this.new_segments = segments; + this.last_segment = segments.at(-1); +} } var test = new PlaylistLoader();