class_docstr: Wrapper class for iterating over replay observation data.
  
  Yields the observations for a replay from player_id's perspective. The class
  can throw connection errors from the controller. These should be caught
  at the top level, since they are unrecoverable (the controller is unusable).
  
  Determines the replay version from the protocol information in the replay
  file. Uses a cache of processes, one for each binary version required
  to process corresponding replays.
  
  How to use the class:
  
  with ReplayObservationStream() as replay_stream:
    replay_stream.start_replay(replay_data, player_id)
  
    # Get game data if needed.
    info = replay_stream.game_info()
  
    for observation in replay_stream.observations():
      # Do something with each observation.
code: def game_info(self):
      return self._controllers[0].game_info()
  
imports: import io
  import json
  import time
  from absl import logging
  import mpyq
  from pysc2 import run_configs
  from s2clientprotocol import sc2api_pb2
label_desc: Use image node_id 6 for calling the ReplayObservationStream obj's underlying member method code with example usage: obj.game_info() and returns: self