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()
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()
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
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
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()