private void UserControl_Loaded(object sender, RoutedEventArgs e) { MainWindow.mISourceItems.Add(this); mEncoderControl = MainWindow.mCaptureManager.createEncoderControl(); if (mEncoderControl == null) { return; } mSourceControl = MainWindow.mCaptureManager.createSourceControl(); if (mSourceControl == null) { return; } mStreamControl = MainWindow.mCaptureManager.createStreamControl(); if (mStreamControl == null) { return; } mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } mSinkControl = MainWindow.mCaptureManager.createSinkControl(); if (mSinkControl == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory); if (mEVRMultiSinkFactory == null) { return; } }
internal async Task Cleanup(bool cleanupProducers, bool cleanupConsumers) { var promises = new List <Task>(); List <StreamId> streamIds = GetUsedStreamIds(); foreach (StreamId s in streamIds) { IStreamControl streamControl = GetStreamControl(s); if (streamControl != null) { promises.Add(streamControl.Cleanup(cleanupProducers, cleanupConsumers)); } } await Task.WhenAll(promises); }
public async Task Cleanup() { var promises = new List <Task>(); List <StreamId> streamIds = GetUsedStreamIds(); foreach (StreamId s in streamIds) { IStreamControl streamControl = GetStreamControl(s); if (streamControl != null) { promises.Add(streamControl.Cleanup()); } } await Task.WhenAll(promises); }
public IStreamControl createStreamControl() { IStreamControl lresult = null; do { try { if (checkICaptureManagerControl()) { break; } object lUnknown; mICaptureManagerControl.createControl( typeof(CaptureManagerLibrary.IStreamControl).GUID, out lUnknown); if (lUnknown == null) { break; } var lSessionControl = lUnknown as CaptureManagerLibrary.IStreamControl; if (lSessionControl == null) { break; } lresult = new StreamControl(lSessionControl); } catch (Exception exc) { LogManager.getInstance().write(exc.Message); } } while (false); return(lresult); }
internal async Task Cleanup(bool cleanupProducers, bool cleanupConsumers) { if (StreamResourceTestControl.TestOnlySuppressStreamCleanupOnDeactivate) { return; } var promises = new List <Task>(); List <InternalStreamId> streamIds = GetUsedStreamIds(); foreach (InternalStreamId s in streamIds) { IStreamControl streamControl = GetStreamControl(s); if (streamControl != null) { promises.Add(streamControl.Cleanup(cleanupProducers, cleanupConsumers)); } } await Task.WhenAll(promises); }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { mCaptureManager = new CaptureManager("CaptureManager.dll"); } catch (System.Exception) { try { mCaptureManager = new CaptureManager(); } catch (System.Exception) { } } m_Thumbnail.mChangeState += m_Thumbnail_mChangeState; LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent; if (mCaptureManager == null) { return; } mSourceControl = mCaptureManager.createSourceControl(); if (mSourceControl == null) { return; } mSinkControl = mCaptureManager.createSinkControl(); if (mSinkControl == null) { return; } mISessionControl = mCaptureManager.createSessionControl(); if (mISessionControl == null) { return; } mStreamControl = mCaptureManager.createStreamControl(); if (mStreamControl == null) { return; } mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory); if (mEVRMultiSinkFactory == null) { return; } mSwitcherControl = mCaptureManager.createSwitcherControl(); if (mSwitcherControl == null) { return; } XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"]; if (lXmlDataProvider == null) { return; } XmlDocument doc = new XmlDocument(); string lxmldoc = ""; mCaptureManager.getCollectionOfSources(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); mCaptureManager.getCollectionOfEncoders(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { mCaptureManager = new CaptureManager("CaptureManager.dll"); } catch (System.Exception) { try { mCaptureManager = new CaptureManager(); } catch (System.Exception) { } } LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent; if (mCaptureManager == null) { return; } mSourceControl = mCaptureManager.createSourceControl(); if (mSourceControl == null) { return; } mEncoderControl = mCaptureManager.createEncoderControl(); if (mEncoderControl == null) { return; } mSinkControl = mCaptureManager.createSinkControl(); if (mSinkControl == null) { return; } mISessionControl = mCaptureManager.createSessionControl(); if (mISessionControl == null) { return; } mStreamControl = mCaptureManager.createStreamControl(); if (mStreamControl == null) { return; } mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory); if (mEVRMultiSinkFactory == null) { return; } XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"]; if (lXmlDataProvider == null) { return; } XmlDocument doc = new XmlDocument(); string lxmldoc = ""; mCaptureManager.getCollectionOfSources(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); mCaptureManager.getCollectionOfEncoders(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; mCaptureManager.getCollectionOfSinks(ref lxmldoc); lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; ProcessPriorityClass lpriority = Process.GetCurrentProcess().PriorityClass; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; }
public MainWindow() { InitializeComponent(); try { mCaptureManager = new CaptureManager("CaptureManager.dll"); } catch (System.Exception) { try { mCaptureManager = new CaptureManager(); } catch (System.Exception) { } } LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent; mSourceControl = mCaptureManager.createSourceControl(); mEncoderControl = mCaptureManager.createEncoderControl(); mSinkControl = mCaptureManager.createSinkControl(); mStreamControl = mCaptureManager.createStreamControl(); mISessionControl = mCaptureManager.createSessionControl(); mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"]; if (lXmlDataProvider == null) { return; } XmlDocument doc = new XmlDocument(); string lxmldoc = ""; mCaptureManager.getCollectionOfSources(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; XmlDataProvider lXmlContainerTypeProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); lxmldoc = ""; mCaptureManager.getCollectionOfSinks(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlContainerTypeProvider.Document = doc; }
private Tuple <object, string, int> createVideoStream(ISampleGrabberCallbackSinkFactory aISampleGrabberCallbackSinkFactory, int aIndexCount) { object result = null; int index = 0; string lMediaType = ""; do { var lSourceNode = mSourcesComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } var lNode = lSourceNode.SelectSingleNode("Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK']/SingleValue/@Value"); if (lNode == null) { break; } string lSymbolicLink = lNode.Value; lSourceNode = mStreamsComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } lNode = lSourceNode.SelectSingleNode("@Index"); if (lNode == null) { break; } uint lStreamIndex = 0; if (!uint.TryParse(lNode.Value, out lStreamIndex)) { break; } lSourceNode = mMediaTypesComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } lNode = lSourceNode.SelectSingleNode("@Index"); if (lNode == null) { break; } uint lMediaTypeIndex = 0; if (!uint.TryParse(lNode.Value, out lMediaTypeIndex)) { break; } IEVRSinkFactory lSinkFactory; var lSinkControl = mCaptureManager.createSinkControl(); lSinkControl.createSinkFactory( Guid.Empty, out lSinkFactory); object lEVROutputNode = null; lSinkFactory.createOutputNode( mVideoPanel.Handle, out lEVROutputNode); if (lEVROutputNode == null) { break; } ISampleGrabberCallback lH264SampleGrabberCallback; aISampleGrabberCallbackSinkFactory.createOutputNode( MFMediaType_Video, MFVideoFormat_H264, out lH264SampleGrabberCallback); object lOutputNode = lEVROutputNode; if (lH264SampleGrabberCallback != null) { lH264SampleGrabberCallback.mUpdateNativeFullEvent += delegate (uint aSampleFlags, long aSampleTime, long aSampleDuration, IntPtr aData, uint aSize) { if (s != null) { lock (s) { currentmillisecond += 1; s.sendVideoData(currentmillisecond, aData, (int)aSize, aIndexCount); currentmillisecond += (int)(aSampleDuration / (long)10000); } } }; var lSampleGrabberCallNode = lH264SampleGrabberCallback.getTopologyNode(); if (lSampleGrabberCallNode != null) { IStreamControl streamControl = mCaptureManager.createStreamControl(); ISpreaderNodeFactory spreaderNodeFactory = null; object spreaderNode = null; List <object> outputNodeList = new List <object>(); var mEncoderControl = mCaptureManager.createEncoderControl(); string lxmldoc = ""; XmlDocument doc = new XmlDocument(); mCaptureManager.getCollectionOfEncoders(ref lxmldoc); doc.LoadXml(lxmldoc); var l_VideoEncoderNode = doc.SelectSingleNode("EncoderFactories/Group[@GUID='{73646976-0000-0010-8000-00AA00389B71}']/EncoderFactory[1]/@CLSID"); if (l_VideoEncoderNode == null) { break; } Guid lCLSIDVideoEncoder; if (!Guid.TryParse(l_VideoEncoderNode.Value, out lCLSIDVideoEncoder)) { break; } IEncoderNodeFactory lIEncoderNodeFactory; mEncoderControl.createEncoderNodeFactory(lCLSIDVideoEncoder, out lIEncoderNodeFactory); if (lIEncoderNodeFactory != null) { object lVideoSourceOutputMediaType; if (mSourceControl == null) { break; } mSourceControl.getSourceOutputMediaType( lSymbolicLink, lStreamIndex, lMediaTypeIndex, out lVideoSourceOutputMediaType); object lVideoEncoderNode; lIEncoderNodeFactory.createEncoderNode( lVideoSourceOutputMediaType, StreamingCBR, 25, 0, lSampleGrabberCallNode, out lVideoEncoderNode); object lCompressedMediaType; lIEncoderNodeFactory.createCompressedMediaType( lVideoSourceOutputMediaType, StreamingCBR, 25, 0, out lCompressedMediaType); streamControl.createStreamControlNodeFactory(ref spreaderNodeFactory); outputNodeList.Add(lEVROutputNode); outputNodeList.Add(lVideoEncoderNode); spreaderNodeFactory.createSpreaderNode(outputNodeList, out spreaderNode); if (spreaderNode != null) { lOutputNode = spreaderNode; } mCaptureManager.parseMediaType(lCompressedMediaType, out lMediaType); } } } string lextendSymbolicLink = lSymbolicLink + " --options=" + "<?xml version='1.0' encoding='UTF-8'?>" + "<Options>" + "<Option Type='Cursor' Visiblity='True'>" + "<Option.Extensions>" + "<Extension Type='BackImage' Height='100' Width='100' Fill='0x7055ff55' />" + "</Option.Extensions>" + "</Option>" + "</Options>"; lextendSymbolicLink += " --normalize=Landscape"; mSourceControl.createSourceNode( lextendSymbolicLink, lStreamIndex, lMediaTypeIndex, lOutputNode, out result); if (result != null) { index = aIndexCount; } }while (false); return(Tuple.Create <object, string, int>(result, lMediaType, index)); }
private void Window_Loaded(object sender, RoutedEventArgs e) { var t = new Thread( delegate() { try { mCaptureManager = Program.mCaptureManager; LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent; if (mCaptureManager == null) { return; } mSourceControl = mCaptureManager.createSourceControl(); if (mSourceControl == null) { return; } mEncoderControl = mCaptureManager.createEncoderControl(); if (mEncoderControl == null) { return; } mSinkControl = mCaptureManager.createSinkControl(); if (mSinkControl == null) { return; } mISessionControl = mCaptureManager.createSessionControl(); if (mISessionControl == null) { return; } mStreamControl = mCaptureManager.createStreamControl(); if (mStreamControl == null) { return; } mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory); if (mEVRMultiSinkFactory == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRSinkFactory); if (mEVRSinkFactory == null) { return; } XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"]; if (lXmlDataProvider == null) { return; } XmlDocument doc = new XmlDocument(); string lxmldoc = ""; mCaptureManager.getCollectionOfSources(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); mCaptureManager.getCollectionOfEncoders(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; mCaptureManager.getCollectionOfSinks(ref lxmldoc); lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; } catch (Exception ex) { } finally { } }); t.SetApartmentState(ApartmentState.MTA); t.Start(); }
private Tuple <object, RtspServer.StreamType, int, string> createVideoStream(ISampleGrabberCallbackSinkFactory aISampleGrabberCallbackSinkFactory, int aIndexCount) { object result = null; RtspServer.StreamType type = RtspServer.StreamType.Video; int index = 0; string format = ""; do { var lSourceNode = mSourcesComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } var lNode = lSourceNode.SelectSingleNode("Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK']/SingleValue/@Value"); if (lNode == null) { break; } string lSymbolicLink = lNode.Value; lSourceNode = mStreamsComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } lNode = lSourceNode.SelectSingleNode("@Index"); if (lNode == null) { break; } uint lStreamIndex = 0; if (!uint.TryParse(lNode.Value, out lStreamIndex)) { break; } lSourceNode = mMediaTypesComboBox.SelectedItem as XmlNode; if (lSourceNode == null) { break; } lNode = lSourceNode.SelectSingleNode("@Index"); if (lNode == null) { break; } uint lMediaTypeIndex = 0; if (!uint.TryParse(lNode.Value, out lMediaTypeIndex)) { break; } IEVRSinkFactory lSinkFactory; var lSinkControl = mCaptureManager.createSinkControl(); lSinkControl.createSinkFactory( Guid.Empty, out lSinkFactory); object lEVROutputNode = null; lSinkFactory.createOutputNode( mVideoPanel.Handle, out lEVROutputNode); if (lEVROutputNode == null) { break; } Guid lVideoFormat = Guid.Empty; var lVideoCompressedNode = mVideoMediaTypeComboBox.SelectedItem as XmlNode; if (lVideoCompressedNode != null) { var lGUID = lVideoCompressedNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@GUID"); if (lGUID != null) { Guid.TryParse(lGUID.Value, out lVideoFormat); } var lvalue = lVideoCompressedNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value"); if (lvalue != null && lvalue.Value != null) { var lsplit = lvalue.Value.Split(new char[] { '_' }); if (lsplit != null && lsplit.Length == 2) { format = lsplit[1]; } if (format == "HEVC") { format = "H265"; } } } ISampleGrabberCallback lSampleGrabberCallback = null; aISampleGrabberCallbackSinkFactory.createOutputNode( MFMediaType_Video, lVideoFormat, out lSampleGrabberCallback); object lOutputNode = lEVROutputNode; if (lSampleGrabberCallback != null) { lSampleGrabberCallback.mUpdateFullEvent += delegate (uint aSampleFlags, long aSampleTime, long aSampleDuration, byte[] aData, uint aLength) { if (s != null) { lock (s) { currentmillisecond += 1; s.sendData(aIndexCount, (int)type, currentmillisecond * 90, aData); currentmillisecond += 20; } } }; var lSampleGrabberCallNode = lSampleGrabberCallback.getTopologyNode(); if (lSampleGrabberCallNode != null) { IStreamControl streamControl = mCaptureManager.createStreamControl(); ISpreaderNodeFactory spreaderNodeFactory = null; object spreaderNode = null; List <object> outputNodeList = new List <object>(); var mEncoderControl = mCaptureManager.createEncoderControl(); var lEncoderNode = mVideoEncoderComboBox.SelectedItem as XmlNode; if (lEncoderNode == null) { break; } lNode = lEncoderNode.SelectSingleNode("@CLSID"); if (lNode == null) { break; } Guid lCLSIDEncoder; if (!Guid.TryParse(lNode.Value, out lCLSIDEncoder)) { break; } var lBitRate = (uint)mBitRateComboBox.SelectedItem; IEncoderNodeFactory lIEncoderNodeFactory; mEncoderControl.createEncoderNodeFactory(lCLSIDEncoder, out lIEncoderNodeFactory); if (lIEncoderNodeFactory != null) { object lVideoSourceOutputMediaType; if (mSourceControl == null) { break; } mSourceControl.getSourceOutputMediaType( lSymbolicLink, lStreamIndex, lMediaTypeIndex, out lVideoSourceOutputMediaType); object lVideoEncoderNode; lIEncoderNodeFactory.createEncoderNode(lVideoSourceOutputMediaType, StreamingCBR, lBitRate, 0, lSampleGrabberCallNode, out lVideoEncoderNode); streamControl.createStreamControlNodeFactory(ref spreaderNodeFactory); outputNodeList.Add(lEVROutputNode); outputNodeList.Add(lVideoEncoderNode); spreaderNodeFactory.createSpreaderNode(outputNodeList, out spreaderNode); if (spreaderNode != null) { lOutputNode = spreaderNode; } } } } string lextendSymbolicLink = lSymbolicLink + " --options=" + "<?xml version='1.0' encoding='UTF-8'?>" + "<Options>" + "<Option Type='Cursor' Visiblity='True'>" + "<Option.Extensions>" + "<Extension Type='BackImage' Height='100' Width='100' Fill='0x7055ff55' />" + "</Option.Extensions>" + "</Option>" + "</Options>"; lextendSymbolicLink += " --normalize=Landscape"; mSourceControl.createSourceNode( lextendSymbolicLink, lStreamIndex, lMediaTypeIndex, lOutputNode, out result); if (result != null) { index = aIndexCount; } }while (false); return(Tuple.Create <object, RtspServer.StreamType, int, string>(result, type, index, format)); }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { mCaptureManager = Program.mCaptureManager; App.mHotKeyHost = new HotKeyHost((HwndSource)HwndSource.FromVisual(App.Current.MainWindow)); App.mHotKeyHost.AddHotKey(new CustomHotKey("Record", new Action(() => { App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, (ThreadStart) delegate() { mStartStop_Click(null, null); }); } ), Key.P, ModifierKeys.Control | ModifierKeys.Shift, true)); } catch (System.Exception) { try { mCaptureManager = new CaptureManager(); } catch (System.Exception) { } } LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent; if (mCaptureManager == null) { return; } var t = new Thread( delegate() { try { mSourceControl = mCaptureManager.createSourceControl(); if (mSourceControl == null) { return; } mEncoderControl = mCaptureManager.createEncoderControl(); if (mEncoderControl == null) { return; } mSinkControl = mCaptureManager.createSinkControl(); if (mSinkControl == null) { return; } mISessionControl = mCaptureManager.createSessionControl(); if (mISessionControl == null) { return; } mStreamControl = mCaptureManager.createStreamControl(); if (mStreamControl == null) { return; } mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory); if (mSpreaderNodeFactory == null) { return; } mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory); if (mEVRMultiSinkFactory == null) { return; } XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"]; if (lXmlDataProvider == null) { return; } XmlDocument doc = new XmlDocument(); string lxmldoc = ""; mCaptureManager.getCollectionOfSources(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); mCaptureManager.getCollectionOfEncoders(ref lxmldoc); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; mCaptureManager.getCollectionOfSinks(ref lxmldoc); lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"]; if (lXmlDataProvider == null) { return; } doc = new XmlDocument(); doc.LoadXml(lxmldoc); lXmlDataProvider.Document = doc; } catch (Exception) { } finally { } }); t.SetApartmentState(ApartmentState.MTA); t.Start(); }