Example #1
0
def navdata2video( inputFile, outputFile, outDir = ".", dumpIndividualFrames=False, startIndex=0 ):
    data = open(inputFile, "rb").read()
    arr = []
    while len(data) > 0:
        packet, data = cutPacket( data )
        if videoAckRequired( packet ):
            frameNumber, frameFlags, fragmentNumber = struct.unpack("<HBB", packet[7:11])
            arr.append( (frameNumber, fragmentNumber, packet[12:]) )
    vf = open(outputFile, "wb")
    prev = None
    frameIndex = startIndex
    frame = ""
    for a in sorted(arr):
        if prev != a[:2]:
            if prev is not None and prev[0] != a[0]:
                # new frame
                if dumpIndividualFrames:
                    fout = open(outDir+os.sep+"frame%04d.bin" % frameIndex, "wb")
                    fout.write(frame)
                    fout.close()                    
                frame = ""
                frameIndex += 1
            frame += a[2]
            vf.write(a[2])
        else:
            print "duplicity", prev
        prev = a[:2]
    vf.close()
Example #2
0
def navdata2video(inputFile,
                  outputFile,
                  outDir=".",
                  dumpIndividualFrames=False,
                  startIndex=0,
                  frameExt=".bin"):
    data = open(inputFile, "rb").read()
    out = open(outputFile, "wb")
    vf = VideoFrames()
    frameIndex = startIndex
    while len(data) > 0:
        packet, data = cutPacket(data)
        if videoAckRequired(packet):
            vf.append(packet)
        frame = vf.getFrame()
        if frame:
            if dumpIndividualFrames:
                fout = open(
                    outDir + os.sep + ("frame%04d" % frameIndex) + frameExt,
                    "wb")
                fout.write(frame)
                fout.close()
                frameIndex += 1
            out.write(frame)
    out.close()
    vf.stat()
Example #3
0
 def append(self, packet):
     "append video packet with piece of frame"
     assert videoAckRequired(packet)
     frameNumber, frameFlags, fragmentNumber, fragmentsPerFrame = struct.unpack("<HBBB", packet[7:12])
     data = packet[12:]
     if frameNumber != self.currentFrameNumber:
         if self.currentFrameNumber is not None and self.parts is not None:
             s = ""
             complete = True
             for i, d in enumerate(self.parts):
                 if d is None:
                     if self.verbose:
                         print (self.currentFrameNumber, i, len(self.parts))
                     complete = False
                     continue
                 s += d
             if complete:
                 self.frames.append((self.currentFrameNumber, self.currentFrameFlags, s))
         if self.verbose:
             print "processing", frameNumber
             if self.statFirst is None:
                 self.statFirst = frameNumber
             self.statLast = frameNumber
             self.statCount += 1
         self.currentFrameNumber = frameNumber
         self.currentFrameFlags = frameFlags
         if self.onlyIFrames and frameFlags != 1:
             self.parts = None
         else:
             self.parts = [None] * fragmentsPerFrame
     if not self.onlyIFrames or frameFlags == 1:
         if self.parts[fragmentNumber] is not None:
             if self.verbose:
                 print "duplicity", (frameNumber, fragmentNumber)
         self.parts[fragmentNumber] = data
Example #4
0
 def append( self, packet ):
     "append video packet with piece of frame"
     assert videoAckRequired( packet )
     frameNumber, frameFlags, fragmentNumber, fragmentsPerFrame = struct.unpack("<HBBB", packet[7:12])
     data = packet[12:]
     if frameNumber != self.currentFrameNumber:
         if self.currentFrameNumber is not None and self.parts is not None:
             s = ""
             complete = True
             for i,d in enumerate(self.parts):
                 if d is None:
                     if self.verbose:
                         print (self.currentFrameNumber, i, len(self.parts))
                     complete = False
                     continue
                 s += d
             if complete:
                 self.frames.append( (self.currentFrameNumber, self.currentFrameFlags, s) )
         if self.verbose:
             print "processing", frameNumber
             if self.statFirst is None:
                 self.statFirst = frameNumber
             self.statLast = frameNumber
             self.statCount += 1
         self.currentFrameNumber = frameNumber
         self.currentFrameFlags = frameFlags
         if self.onlyIFrames and frameFlags != 1:
             self.parts = None
         else:
             self.parts = [None]*fragmentsPerFrame
     if not self.onlyIFrames or frameFlags == 1:
         if self.parts[ fragmentNumber ] is not None:
             if self.verbose:
                 print "duplicity", (frameNumber, fragmentNumber)
         self.parts[ fragmentNumber ] = data
Example #5
0
def navdata2video(inputFile, outputFile, outDir=".", dumpIndividualFrames=False, startIndex=0, frameExt=".bin"):
    data = open(inputFile, "rb").read()
    out = open(outputFile, "wb")
    vf = VideoFrames()
    frameIndex = startIndex
    while len(data) > 0:
        packet, data = cutPacket(data)
        if videoAckRequired(packet):
            vf.append(packet)
        frame = vf.getFrame()
        if frame:
            if dumpIndividualFrames:
                fout = open(outDir + os.sep + ("frame%04d" % frameIndex) + frameExt, "wb")
                fout.write(frame)
                fout.close()
                frameIndex += 1
            out.write(frame)
    out.close()
    vf.stat()