let info = `#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000000,
#EXT-X-PRIVINF:FILESIZE=3193744
2593BB1CC6230F8E4807030765E5A483-00001.ts
#EXTINF:10.000000,
#EXT-X-PRIVINF:FILESIZE=3397724
2593BB1CC6230F8E4807030765E5A483-00002.ts
#EXTINF:10.50000,
#EXT-X-PRIVINF:FILESIZE=1531072, CC=2
2593BB1CC6230F8E4807030765E5A483-00003.ts
#EXT-X-ENDLIST`
function parseM3u8(info) {
if(!info.includes('#EXTM3U')) {
return 'This is not a m3u8';
}
info = info.split(/\n/);
let re = [];
let obj = {};
let count = -1;
for (let i of info){
if (i.includes('#EXTINF')){
count++
obj = {index: count}; //重置对象
duration = i.match(/:(\S*),/)[1];
obj['duration'] = Number(duration);
}
if (i.includes('#EXT-X-PRIVINF')) {
let str = i.split(':')[1];
let list = str.split(', ');
for (let entry of list) {
let [key, value] = entry.split('=');
obj[key.toLowerCase()] = value;
}
}
if (i.includes('.ts')) {
obj['url'] = i;
re.push(obj);
}
}
return re;
}
console.log(parseM3u8(info))
console