private void mLaunchButton_Click(object sender, RoutedEventArgs e)
        {
            if (!m_socketAccessable)
            {
                return;
            }

            if (mLaunchButton.Content == "Stop")
            {
                if (s != null)
                {
                    s.disconnect();
                }

                if (mISession != null)
                {
                    mISession.closeSession();

                    mLaunchButton.Content = "Launch";
                }

                mISession = null;

                return;
            }


            string lxmldoc = "";

            mCaptureManager.getCollectionOfSinks(ref lxmldoc);

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(lxmldoc);

            var lSinkNode = doc.SelectSingleNode("SinkFactories/SinkFactory[@GUID='{3D64C48E-EDA4-4EE1-8436-58B64DD7CF13}']");

            if (lSinkNode == null)
            {
                return;
            }

            var lContainerNode = lSinkNode.SelectSingleNode("Value.ValueParts/ValuePart[1]");

            if (lContainerNode == null)
            {
                return;
            }

            var lReadMode = setContainerFormat(lContainerNode);

            var lSinkControl = mCaptureManager.createSinkControl();

            ISampleGrabberCallbackSinkFactory lSampleGrabberCallbackSinkFactory = null;

            lSinkControl.createSinkFactory(
                lReadMode,
                out lSampleGrabberCallbackSinkFactory);

            int lIndexCount = 0;

            var lVideoStreamSourceNode = createVideoStream(lSampleGrabberCallbackSinkFactory, lIndexCount);

            var lAudioStreamSourceNode = createAudioStream(lSampleGrabberCallbackSinkFactory, lIndexCount);


            XmlDocument l_streamMediaTypesXml = new XmlDocument();

            XmlNode ldocNode = l_streamMediaTypesXml.CreateXmlDeclaration("1.0", "UTF-8", null);

            l_streamMediaTypesXml.AppendChild(ldocNode);

            XmlElement rootNode = l_streamMediaTypesXml.CreateElement("MediaTypes");

            l_streamMediaTypesXml.AppendChild(rootNode);


            var lAttr = l_streamMediaTypesXml.CreateAttribute("StreamName");

            lAttr.Value = "0";

            rootNode.Attributes.Append(lAttr);

            List <object> lSourceMediaNodeList = new List <object>();

            if (lVideoStreamSourceNode.Item1 != null)
            {
                doc = new XmlDocument();

                doc.LoadXml(lVideoStreamSourceNode.Item2);

                var lMediaType = doc.SelectSingleNode("MediaType");

                if (lMediaType != null)
                {
                    rootNode.AppendChild(l_streamMediaTypesXml.ImportNode(lMediaType, true));
                }

                lSourceMediaNodeList.Add(lVideoStreamSourceNode.Item1);
            }

            if (lAudioStreamSourceNode.Item1 != null)
            {
                doc = new XmlDocument();

                doc.LoadXml(lAudioStreamSourceNode.Item2);

                var lMediaType = doc.SelectSingleNode("MediaType");

                if (lMediaType != null)
                {
                    rootNode.AppendChild(l_streamMediaTypesXml.ImportNode(lMediaType, true));
                }

                lSourceMediaNodeList.Add(lAudioStreamSourceNode.Item1);
            }

            var lSessionControl = mCaptureManager.createSessionControl();

            if (lSessionControl == null)
            {
                return;
            }

            mISession = lSessionControl.createSession(
                lSourceMediaNodeList.ToArray());

            if (mISession == null)
            {
                return;
            }


            mISession.registerUpdateStateDelegate(UpdateStateDelegate);

            mISession.startSession(0, Guid.Empty);

            mLaunchButton.Content = "Stop";

            startServer(l_streamMediaTypesXml.InnerXml);
        }