code: async def stream_frames(self, frames="allframes", components=None, on_packet=None):
          
  
          if components is None:
              components = ["all"]
          else:
              _validate_components(components)
  
          self._protocol.set_on_packet(on_packet)
  
          cmd = "streamframes %s %s" % (frames, " ".join(components))
          return await asyncio.wait_for(
              self._protocol.send_command(cmd), timeout=self._timeout
          )
docs: Stream measured frames from QTM until :func:`~qtm.QRTConnection.stream_frames_stop`
             is called.
  
  
          :param frames: Which frames to receive, possible values are 'allframes',
              'frequency:n' or 'frequencydivisor:n' where n should be desired value.
          :param components: A list of components to receive, could be 'all' or any combination of
                  '2d', '2dlin', '3d', '3dres', '3dnolabels',
                  '3dnolabelsres', 'force', 'forcesingle', '6d', '6dres',
                  '6deuler', '6deulerres', 'gazevector', 'image', 'timecode',
                  'skeleton', 'skeleton:global'
  
          :rtype: The string 'Ok' if successful