瀏覽代碼

allow preservation of custom extensions in index files

Gil Pedersen 11 年之前
父節點
當前提交
275ca90af6
共有 2 個文件被更改,包括 20 次插入3 次删除
  1. 17 2
      bin/hlsrecord
  2. 3 1
      lib/reader.js

+ 17 - 2
bin/hlsrecord

@@ -13,6 +13,12 @@ hlsrecord.version(require('../package').version)
    .option('-b, --begin-date <date>', 'Start recording at', dateValue)
    .option('-e, --end-date <date>', 'Stop recording at', dateValue)
    .option('-s, --start-offset <seconds>', 'Playback start time offset', parseFloat)
+   .option('--extension <label>', 'preserve vendor extension', function (val) {
+     return (hlsrecord.extension || []).concat(val);
+   })
+   .option('--segment-ext <label>', 'preserve vendor segment extension', function (val) {
+     return (hlsrecord.segmentExt || []).concat(val);
+   })
 //   .option('-a, --user-agent <string>', 'HTTP User-Agent')
 //   .option('-f, --full', 'record all variants')
    .parse(process.argv);
@@ -58,16 +64,25 @@ if (hlsrecord.beginDate)
 if (hlsrecord.endDate)
   console.log('fetching until:', hlsrecord.endDate);
 
-var options = {
+var extensions = {};
+(hlsrecord.extension || []).forEach(function(ext) {
+  extensions[ext] = false;
+});
+(hlsrecord.segmentExt || []).forEach(function(ext) {
+  extensions[ext] = true;
+});
+
+var readerOptions = {
   startDate: hlsrecord.beginDate,
   stopDate: hlsrecord.endDate,
   maxStallTime: 5 * 60 * 1000,
   fullStream:true,
+  extensions: extensions,
   highWaterMark:0,
 };
 
 function createReader(src) {
-  var r = reader(src, options);
+  var r = reader(src, readerOptions);
   r.on('error', function(err) {
     console.error('reader error', err);
   });

+ 3 - 1
lib/reader.js

@@ -121,6 +121,8 @@ function HlsStreamReader(src, options) {
 
   this.maxStallTime = options.maxStallTime || Infinity;
 
+  this.extensions = options.extensions || {};
+
   this.index = null;
   this.readState = {
     nextSeq:-1,
@@ -208,7 +210,7 @@ function HlsStreamReader(src, options) {
       self.baseUrl = meta.url;
     });
 
-    m3u8parse(stream, function(err, index) {
+    m3u8parse(stream, { extensions:self.extensions }, function(err, index) {
       if (err) {
         self.emit('error', err);
         updatecheck(false);