|
@@ -14,6 +14,14 @@ try {
|
|
|
module.exports = tssmooth;
|
|
module.exports = tssmooth;
|
|
|
exports.TsSmooth = TsSmooth;
|
|
exports.TsSmooth = TsSmooth;
|
|
|
|
|
|
|
|
|
|
+function RateError(msg) {
|
|
|
|
|
+ Error.call(this);
|
|
|
|
|
+
|
|
|
|
|
+ this.message = msg;
|
|
|
|
|
+}
|
|
|
|
|
+util.inherits(RateError, Error);
|
|
|
|
|
+RateError.prototype.name = 'Rate Error';
|
|
|
|
|
+
|
|
|
function parsePCR(buffer, index, pcr_pid) {
|
|
function parsePCR(buffer, index, pcr_pid) {
|
|
|
var head = buffer.readUInt32BE(index, true);
|
|
var head = buffer.readUInt32BE(index, true);
|
|
|
var pid = (head >> 8) & 0x1fff;
|
|
var pid = (head >> 8) & 0x1fff;
|
|
@@ -83,15 +91,18 @@ function TsSmooth(options) {
|
|
|
var delta = pcrtime - self.pcrtime;
|
|
var delta = pcrtime - self.pcrtime;
|
|
|
if (delta > 100E3 || delta < 0) {
|
|
if (delta > 100E3 || delta < 0) {
|
|
|
console.error('PCR_error: '+(delta/1E6).toFixed(2)+'s missing');
|
|
console.error('PCR_error: '+(delta/1E6).toFixed(2)+'s missing');
|
|
|
- var now = utime();
|
|
|
|
|
- var error = now - pcrtime;
|
|
|
|
|
- if (Math.abs(error) > 60*1E6) {
|
|
|
|
|
- console.error('PCR sync reset from '+(error/1E6).toFixed(2)+'s error');
|
|
|
|
|
- self.pcr = -1;
|
|
|
|
|
- pcrtime = self.pcr2time(newPCR);
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ var now = utime();
|
|
|
|
|
+ var error = now - pcrtime;
|
|
|
|
|
+ if (Math.abs(error) > 20*1E6) {
|
|
|
|
|
+ self.emit('error', new RateError('PCR sync offset '+(error/1E6).toFixed(2)+'s error'));
|
|
|
|
|
+ self.pcr = -1;
|
|
|
|
|
+ pcrtime = self.pcr2time(newPCR);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
self.pcrtime = pcrtime;
|
|
self.pcrtime = pcrtime;
|
|
|
|
|
+
|
|
|
return pcrtime;
|
|
return pcrtime;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -150,7 +161,7 @@ TsSmooth.prototype._transform = function(chunk, encoding, cb) {
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
// remove bad data
|
|
// remove bad data
|
|
|
- console.error('slice', sync, end);
|
|
|
|
|
|
|
+ debug('slice', sync, end);
|
|
|
buf = Buffer.concat([buf.slice(0, index), buf.slice(sync)]);
|
|
buf = Buffer.concat([buf.slice(0, index), buf.slice(sync)]);
|
|
|
end -= sync-index;
|
|
end -= sync-index;
|
|
|
continue;
|
|
continue;
|