public void Load(string filename) { Reset(); if (!File.Exists(filename)) { Unload(); return; } lock (_zipFileLock) { if (_zipFile != null) { _zipFile.Dispose(); _zipFile = null; } _zipFile = new ZipFile(filename); if (!_zipFile.EntryFileNames.Contains(descriptionFilename)) { Unload(); return; } var frameFiles = _zipFile.EntryFileNames.Where(s => s.Substring(s.Length - 3, 3) == "mfx"); _filesToLoad = frameFiles.OrderBy(f => f).ToList(); if (_filesToLoad.Count == 0) { Unload(); return; } if (_zipFile.EntryFileNames.Contains(audioFilename)) { if (_audioStream != null) { _audioStream.Dispose(); _audioStream = null; } _audioStream = new MemoryStream(); _zipFile[audioFilename].Extract(_audioStream); _audioStream.Position = 0; _soundPlayer.LoadWavStream(_audioStream); } using (var settingsStream = new MemoryStream()) { _zipFile[descriptionFilename].Extract(settingsStream); settingsStream.Position = 0; var description = PointCloudStreamDescription.Load(settingsStream); MinTimeUTC = description.RecordingStartDateTimeUTC; CurrentTimeUTC = MinTimeUTC; MaxTimeUTC = description.RecordingStopDateTimeUTC; int count = description.FrameCount; var span = MaxTimeUTC - MinTimeUTC; if (count > 0 && span.TotalSeconds > 0) { FileFPS = count / span.TotalSeconds; } } } Status = PointCloudPlayerStatus.Stopped; Seek(0); }