from struct import *
tsfile = open('src.trp','rb')
if tsfile == None:
    print 'open file fail'
tsstring = tsfile.read()
print 'read file ok'
tsdata = unpack(repr(len(tsstring))+'B',tsstring)
print 'convert OK, size = %d' % len(tsdata)
i=0
while tsdata[i] != 0x47:
    i += 1
print 'found 1st sync: %d' % i
pidcount={}
discount={}
contp = {}
while i < len(tsdata)-188:
    pid =  ( tsdata[i+1]<< 8 | tsdata[i+2] )  & 0x1FFF
    cont = tsdata[i+3] & 0x0F
    if pid in contp.keys():
#        print '%04X : %02X' % (pid,cont)
        if cont != ((contp[pid]+1)&0xF):
            if cont != 0 or contp[pid] != 0:
                print 'not cont: %04X : %02x %02x' % (pid,contp[pid],cont)
                discount[pid] += 1
        contp[pid] = cont
        pidcount[pid] += 1
    else:
        contp.update({pid:cont})
        pidcount.update({pid:1})
        discount.update({pid:0})
    i += 188
# print out not cont number
allpid = contp.keys()
allpid.sort()
for ele in allpid:
    print 'pid: %04X  packet count : %7d, not continue: %d' % (ele,pidcount[ele],discount[ele])
2010年1月28日
code :Transport Stream continuity check - 3
print all pid packet number and the not-continue packe number
訂閱:
張貼留言 (Atom)
 
沒有留言:
張貼留言