ソースを参照

utilize individualized option of getSegment() to simplify code

Gil Pedersen 11 年 前
コミット
aa9dbe895d
4 ファイル変更11 行追加18 行削除
  1. 1 1
      bin/hlsdump
  2. 4 7
      lib/reader.js
  3. 5 9
      lib/recorder.js
  4. 1 1
      package.json

+ 1 - 1
bin/hlsdump

@@ -89,7 +89,7 @@ streamprocess(r, function (obj, done) {
     });
   }
 
-  var keyData = r.index.keyForSeqNo(obj.seq);
+  var keyData = obj.segment.key;
   if (keyData && keyData.method === 'AES-128' && keyData.uri && keyData.uri.length > 2) {
     fetchKey(function(err, key) {
       if (err) {

+ 4 - 7
lib/reader.js

@@ -68,16 +68,13 @@ function checknext(reader) {
     return null;
 
   var seq = state.nextSeq;
-  var segment = index.getSegment(seq);
+  var segment = index.getSegment(seq, true);
 
-  // check if we need to stop
-  if (reader.stopDate) {
-    var seqDate = index.dateForSeqNo(seq);
-    if (seqDate > reader.stopDate)
+  if (segment) {
+    // check if we need to stop
+    if (reader.stopDate && segment.program_time > reader.stopDate)
       return reader.push(null);
-  }
 
-  if (segment) {
     state.fetching = fetchfrom(reader, seq, segment, function(err, object) {
       state.fetching = null;
       if (err) reader.emit('error', err);

+ 5 - 9
lib/recorder.js

@@ -44,6 +44,11 @@ HlsStreamRecorder.prototype.updateIndex = function(update) {
   if (!this.index) {
     this.index = new m3u8parse.M3U8Playlist(update);
     if (!this.index.variant) {
+      if (this.index.version < 2) {
+        // version 2 is required to support the remapped IV attribute
+        this.index.version = 2;
+        debug('changed index version to:', this.index.version);
+      }
       this.index.segments = [];
       this.index.first_seq_no = self.seq;
       this.index.type = 'EVENT';
@@ -119,15 +124,6 @@ HlsStreamRecorder.prototype.process = function(obj, next) {
   // create our own uri
   segment.uri = util.format('%s.%s', this.segmentName(this.seq), mime.extension(meta.mime));
 
-  // manually set iv if sequence based, since we generate our own sequence numbering 
-  if (segment.key && !segment.key.iv) {
-    segment.key.hexadecimalInteger('iv', obj.seq);
-    if (this.index.version > 2) {
-      this.index.version = 2;
-      debug('changed index version to:', this.index.version);
-    }
-  }
-
   // save the stream segment
   var stream = oncemore(obj.stream);
   stream.pipe(fs.createWriteStream(path.join(this.dst, segment.uri)));

+ 1 - 1
package.json

@@ -30,7 +30,7 @@
     "commander": "~1.1.1",
     "debug": "~0.7.0",
     "deep-equal": "0.0.0",
-    "m3u8parse": "^0.1.8",
+    "m3u8parse": "^0.1.10",
     "measured": "~0.1.3",
     "mime": "^1.2.11",
     "oncemore": "~0.1.0",