public XdcamStream(XdcamMedia media, bool forWrite) { _directory = media?.Directory as IngestDirectory ?? throw new ApplicationException("XDCAM media directory is not IngestDirectory"); _client = _directory.GetFtpClient(); if (!Monitor.TryEnter(_directory.XdcamLockObject)) { throw new ApplicationException("Directory is in use"); } try { _client.Connect(); if (media.XdcamMaterial?.type == MaterialType.Edl) { var smilXml = _directory.ReadXmlDocument(media.XdcamMaterial.uri, _client); if (smilXml != null) { _smil = SerializationHelper <Smil> .Deserialize(smilXml); } _isEditList = true; } _smilIndex = 0; _media = media; if (_isEditList) { _currentStream = _getNextStream(); } else { _currentStream = forWrite ? _client.OpenWrite($"Clip/{media.FileName}") : _client.OpenRead(media.XdcamMaterial.uri.TrimStart('.', '/')); } } catch { Monitor.Exit(_directory.XdcamLockObject); _client.Disconnect(); throw; } }
public XdcamMedia(IngestDirectory directory, Guid guid = default(Guid)) : base(directory, guid) { }