示例#1
0
 def initAndRun(self,
                cameraStream: cams.PiCameraCircularIO,
                file=None,
                parent=None):
     self.logger = self.logger.getChild(
         "RTSP") if file is None else self.logger.getChild("Record")
     self._myParent = parent
     self._redirectPackages(cameraStream, file)
     self.name = "cam_RTSP_queue" if file is None else "cam_file_queue"
     self.setDaemon(False)
     self.start()
     if parent is not None:
         try:
             with self.lock:
                 with cameraStream.lock:
                     save_pos = cameraStream.tell()
                     try:
                         pos = cameraStream._find_all(
                             camf.PiVideoFrameType.sps_header)
                         if pos is not None:
                             cameraStream.seek(pos)
                             while True:
                                 buf = cameraStream.read1()
                                 if not buf:
                                     break
                                 self._queue.put(buf)
                     finally:
                         cameraStream.seek(save_pos)
                         cameraStream.clear()
         except:
             self.logger.exception("Konnte anfang nicht speichern")
示例#2
0
def test_camera_stream_frames_trunc_right():
    # We don't officially support this but the code should work if entire
    # frames are truncated (without leaving partial frame data) which is what
    # we're testing for here (of course, the resulting H.264 stream won't be
    # valid, but we're not testing that...)
    camera = mock.Mock()
    encoder = mock.Mock()
    camera._encoders = {1: encoder}
    stream = PiCameraCircularIO(camera, size=10)
    frames = []
    for data, frame in generate_frames('hkffkff'):
        encoder.frame = frame
        if frame.complete:
            frames.append(frame)
        stream.write(data)
    stream.seek(7)
    stream.truncate()
    del frames[-2:]
    assert stream.getvalue() == b'hkkffkk'
    assert list(stream.frames) == frames
    assert list(reversed(stream.frames)) == frames[::-1]