/// <summary> /// Loads DVRSettings from a specified file. /// </summary> /// <param name="fileName">The filename to load. If you are trying to load multiple distinct files, set bypassCache to true.</param> /// Set to true to always read from the disk and return a distinct copy /// Set to false to use the cached copy if available. /// </param> /// <returns>the RTSPServer from the indicated file</returns> public static DVRSettings LoadFromFile(string fileName) { DVRSettings result = null; FileStream file = null; try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(DVRSettings)); file = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); result = (DVRSettings)xmlSerializer.Deserialize(file); } catch (Exception e) { Debug.WriteLine(String.Format("DVRSettings was not loaded -- the configuration file {0} could not be loaded", PersistFileName)); Debug.WriteLine(e.Message); } finally { if (file != null) { file.Close(); file.Dispose(); } } return(result); }
public DVRtoMPEG2TS(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest) { AppLogger.Message("In DVRtoMPEG2TS - CurrentProfile is " + CurrentProfile.Name); InitializeSink(); _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD DVR Source"); IFileSourceFilter fileSource = (IFileSourceFilter)_captureFilter; String[] sourceNameParts = sourceConfig.SourceName.Split('-'); DVRSettings dvrSettings = DVRSettings.LoadFromFile(); int hr = fileSource.Load(dvrSettings.RootFolder + sourceNameParts[0] + @"/Stream.LBL", null); DsError.ThrowExceptionForHR(hr); ILMDVRSource sourceControl = (ILMDVRSource)_captureFilter; sourceControl.ResetToDefaultsEx(LMDVRSource_APILEVEL.LMDVRSource_APILEVEL_1); _demux = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD MPEG2 Transport Demultiplexer"); _demuxControl = (ILMMpgDmx)_demux; _demuxControl.AutoLive = true; _demuxControl.AutoLiveTolerance = .5; // _currentVideoSettings = new VideoSettings(); // _currentVideoSettings.CodecType = CurrentProfile.Video.CodecType; ConnectFilters(_captureFilter, "Output", _demux, "Input 01"); if (CurrentProfile.Video != null) { VideoSettings settings = CurrentProfile.Video; _videoDecoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Decoder (3.0)"); _videoEncoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Encoder (4.0)"); ConnectFilters(_demux, "H.264 Video", _videoDecoder, "XForm In"); ConnectFilters(_videoDecoder, "XForm Out", _videoEncoder, "XForm In"); LMH264EncoderLib.ILMH264Encoder encoderConfig = (LMH264EncoderLib.ILMH264Encoder)_videoEncoder; encoderConfig.EnableRateControl = true; encoderConfig.BitRate = settings.ConstantBitRate * 1024; ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01"); } else { ConnectFilterToMux(_demux, "H.264 Video", "Input 01"); } ConnectMuxToSink(); }
/// <summary> /// Add the LEAD DVR Source filter to a graph (builder) and /// load the fileSource using the associated input graph's /// source name (from sourceConfig). For example, if the output /// graph source name was "Vid1-RTSP" then the input graph /// source name will have a name of "Vid1". /// <DVRSourceName> --> <LeftOfSinkSourceName> /// Vid1-RTSP (the output graph source name) --> Vid1 (the input graph source name) /// </summary> public static IBaseFilter GetAndConfigureDVRSourceForSink(IGraphBuilder builder, StreamSourceInfo sourceConfig) { IBaseFilter result = FilterGraphTools.AddFilterByName(builder, FilterCategory.LegacyAmFilterCategory, "LEAD DVR Source"); if (result == null) { throw new Exception("The LEADTOOLS DVR Source filter is not registered"); } IFileSourceFilter fileSource = (IFileSourceFilter)result; String[] sourceNameParts = sourceConfig.SourceName.Split('-'); DVRSettings dvrSettings = DVRSettings.LoadFromFile(); int hr = fileSource.Load(dvrSettings.RootFolder + sourceNameParts[0] + @"/Stream.LBL", null); DsError.ThrowExceptionForHR(hr); ILMDVRSource sourceControl = (ILMDVRSource)result; sourceControl.ResetToDefaultsEx(LMDVRSource_APILEVEL.LMDVRSource_APILEVEL_1); return(result); }