Open the file and write the metadata header to describe this recording. Called after we establish an end-to-end connection
        This uses Version 1 of our protocol

        Version 0 can be seen here: https://github.com/openai/universe/blob/f85a7779c3847fa86ec7bb513a1da0d3158dda78/bin/recording_agent.py

def begin_recording(self):
        """
        Open the file and write the metadata header to describe this recording. Called after we establish an end-to-end connection
        This uses Version 1 of our protocol

        Version 0 can be seen here: https://github.com/openai/universe/blob/f85a7779c3847fa86ec7bb513a1da0d3158dda78/bin/recording_agent.py
        """
        logger.info("[RewardProxyServer] [%d] Starting recording", self.id)

        if self._closed:
            logger.error(
                "[RewardProxyServer] [%d] Attempted to start writing although client connection is already closed. Aborting", self.id)
            self.close()
            return

        if self._n_open_files != 0:
            logger.error("[RewardProxyServer] [%d] WARNING: n open rewards files = %s. This is unexpected. Dropping connection.", self.id, self._n_open_files)
            self.close()
            return

        logfile_path = os.path.join(self.factory.logfile_dir, 'rewards.demo')
        logger.info('Recording to {}'.format(logfile_path))
        self.file = open(logfile_path, 'w')

        self._n_open_files += 1
        logger.info("[RewardProxyServer] [%d] n open rewards files incremented: %s", self.id, self._n_open_files)

        self.file.write(json.dumps({
            'version': 1,
            '_debug_version': '0.0.1',  # Give this an internal version for debugging corrupt reward.demo files # TODO, pull this from setup.py or the host docker image
        }))
        self.file.write('\n')
        self.file.flush()

        logger.info("[RewardProxyServer] [%d] Wrote version number", self.id)