Skip to content

Instantly share code, notes, and snippets.

@koush
Created March 7, 2020 01:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koush/9f1b231d37d43dcbeaa84913040e6fd2 to your computer and use it in GitHub Desktop.
Save koush/9f1b231d37d43dcbeaa84913040e6fd2 to your computer and use it in GitHub Desktop.
const fs = require('fs');
var f = fs.readFileSync('check.ts')
var offset = 0
var pids = {}
// var fout = fs.openSync("check-trim.ts", "w")
var incompleteTypes = {
video: 0,
audio: 0,
}
var lastPacket
function checkPtsDts(type, chunk) {
var pusi = chunk[1] & 0x40
var adaptation = chunk[3] & 0x20
var payload = chunk[3] & 0x10
if (!payload)
props.payload = false
var props = {}
var adaptationAdjust = 0
if (adaptation) {
var adaptationLength = chunk[4]
adaptationAdjust = chunk[4] + 1
props.adaptationAdjust = adaptationAdjust
if (adaptationLength) {
var discontinuity = chunk[5] & 0x80
var randomAccess = chunk[5] & 0x40
var pcr = chunk[5] & 0x10
if (discontinuity)
props.discontinuity = true
if (randomAccess)
props.randomAccess = true
if (pcr) {
var pcrHigh = chunk.readInt32BE(6)
var pcrLow = chunk.readInt16BE(10)
console.log(pcrHigh, pcrLow)
pcrHigh <<= (16 - 9)
pcrHigh |= pcrLow >> (16 - 9)
pcrLow &= 0x1FF
pcr = pcrHigh * 300 + pcrLow
props.pcr = pcr
console.log(pcrHigh, pcrLow)
}
}
else {
console.log('emoty adpa')
}
}
if (!pusi) {
incompleteTypes[type]++
props.partial = true
}
else {
props.first = true
var pesLength = chunk.readUInt16BE(8 + adaptationAdjust)
props.pesLength = pesLength
var pesFlag = chunk[10 + adaptationAdjust]
var alignment = pesFlag & 0x04
var ptsOrDts = chunk[11 + adaptationAdjust]
var pts = ptsOrDts & 0x80
var dts = ptsOrDts & 0x40
var ptsLength = chunk.readUIntBE(12 + adaptationAdjust)
var pesPosition = 12 + adaptationAdjust
if (pts) {
pesPosition += 5
}
if (dts) {
pesPosition += 5
}
if (!alignment)
props.alignment = false
if (!pts)
props.pts = false
if (!dts)
props.dts = false
}
if (Object.keys(props).length != 0) {
console.log(`${type}: ${JSON.stringify(props)}`)
}
else {
// console.log(`${type} fine`)
}
lastPacket = chunk
}
while (offset < f.length) {
var chunk = f.slice(offset, offset + 188)
offset += 188
var pid = chunk.readInt16BE(1) & 0x00001FFF
pids[pid] = (pids[pid] || 0) + 1
if (pid == 256 || pid == 0x64)
checkPtsDts('video', chunk)
else if (pid == 257 || pid == 0xc8)
checkPtsDts('audio', chunk)
// if (pid != 17) {
// fs.writeSync(fout, chunk)
// }
}
// fs.closeSync(fout)
for (var pid of Object.keys(pids)) {
console.log(parseInt(pid).toString(16) + " : " + pids[pid])
}
console.log('partial video: ' + incompleteTypes.video)
console.log('partial audio: ' + incompleteTypes.audio)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment