Пример #1
0
        public bool createSourceFromCaptureProcessor(
            object aPtrCaptureProcessor,
            out object aPtrPtrMediaSource)
        {
            bool lresult = false;

            aPtrPtrMediaSource = null;

            do
            {
                if (mSourceControl == null)
                {
                    break;
                }

                try
                {
                    ICaptureProcessor lICaptureProcessor = aPtrCaptureProcessor as ICaptureProcessor;

                    if (lICaptureProcessor != null)
                    {
                        CaptureProcessor lCaptureProcessor = new CaptureProcessor(lICaptureProcessor);

                        mSourceControl.createSourceFromCaptureProcessor(
                            lCaptureProcessor,
                            out aPtrPtrMediaSource);
                    }
                    else
                    {
                        var lNativeCaptureProcessor = aPtrCaptureProcessor as CaptureManagerLibrary.ICaptureProcessor;

                        if (lNativeCaptureProcessor == null)
                        {
                            break;
                        }

                        mSourceControl.createSourceFromCaptureProcessor(
                            lNativeCaptureProcessor,
                            out aPtrPtrMediaSource);
                    }

                    lresult = true;
                }
                catch (Exception exc)
                {
                    LogManager.getInstance().write(exc.Message);
                }
            } while (false);

            return(lresult);
        }
        private void lButton_Click(object sender, RoutedEventArgs e)
        {
            var lButton = (Button)sender;

            do
            {
                if (mSourceControl == null)
                {
                    return;
                }

                if (mISessions == null)
                {
                    break;
                }

                if (lButton.Tag == null)
                {
                    break;
                }

                int lIndex = (int)lButton.Tag;

                if (lButton.Content == "Stop")
                {
                    if (mISessions.ContainsKey(lIndex))
                    {
                        mISessions[lIndex].closeSession();

                        mISessions.Remove(lIndex);

                        lButton.Content = "Start";
                    }

                    break;
                }

                ICaptureProcessor lICaptureProcessor = null;

                try
                {
                    lICaptureProcessor = IPCameraMJPEGCaptureProcessor.createCaptureProcessor(URLs[lIndex % 2]);
                }
                catch (System.Exception exc)
                {
                    MessageBox.Show(exc.Message);

                    return;
                }

                if (lICaptureProcessor == null)
                {
                    return;
                }

                object lMediaSource = null;

                mSourceControl.createSourceFromCaptureProcessor(
                    lICaptureProcessor,
                    out lMediaSource);

                if (lMediaSource == null)
                {
                    return;
                }



                object lPtrSourceNode;

                var lSourceControl = mCaptureManager.createSourceControl();

                if (lSourceControl == null)
                {
                    return;
                }

                lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnection(
                    lMediaSource,
                    0,
                    0,
                    mEVROutputNodes[lIndex],
                    out lPtrSourceNode);


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

                lSourceMediaNodeList.Add(lPtrSourceNode);

                var lSessionControl = mCaptureManager.createSessionControl();

                if (lSessionControl == null)
                {
                    return;
                }

                var lISession = lSessionControl.createSession(
                    lSourceMediaNodeList.ToArray());

                if (lISession == null)
                {
                    return;
                }


                lISession.registerUpdateStateDelegate(UpdateStateDelegate);

                lISession.startSession(0, Guid.Empty);

                mISessions[lIndex] = lISession;

                lButton.Content = "Stop";
            } while (false);
        }
Пример #3
0
 public CaptureProcessor(ICaptureProcessor aICaptureProcessor)
 {
     mICaptureProcessor = aICaptureProcessor;
 }
Пример #4
0
        private object getCompressedMediaType(
            ICaptureProcessor a_ICaptureProcessor,
            int a_StreamIndex,
            int a_MediaTypeIndex,
            XmlNode aEncoderNode,
            XmlNode aEncoderModeNode,
            int aCompressedMediaTypeIndex)
        {
            object lresult = null;

            do
            {
                if (aCompressedMediaTypeIndex < 0)
                {
                    break;
                }

                object lMediaSource = null;

                mSourceControl.createSourceFromCaptureProcessor(
                    a_ICaptureProcessor,
                    out lMediaSource);

                if (lMediaSource == null)
                {
                    break;
                }

                if (a_StreamIndex < 0)
                {
                    break;
                }

                if (a_MediaTypeIndex < 0)
                {
                    break;
                }

                if (aEncoderNode == null)
                {
                    break;
                }


                if (aEncoderModeNode == null)
                {
                    break;
                }

                var lEncoderGuidAttr = aEncoderNode.Attributes["CLSID"];

                if (lEncoderGuidAttr == null)
                {
                    break;
                }

                Guid lCLSIDEncoder;

                if (!Guid.TryParse(lEncoderGuidAttr.Value, out lCLSIDEncoder))
                {
                    break;
                }

                var lEncoderModeGuidAttr = aEncoderModeNode.Attributes["GUID"];

                if (lEncoderModeGuidAttr == null)
                {
                    break;
                }

                Guid lCLSIDEncoderMode;

                if (!Guid.TryParse(lEncoderModeGuidAttr.Value, out lCLSIDEncoderMode))
                {
                    break;
                }

                uint lStreamIndex = (uint)a_StreamIndex;

                uint lMediaTypeIndex = (uint)a_MediaTypeIndex;

                object lSourceMediaType = null;

                if (!mSourceControl.getSourceOutputMediaTypeFromMediaSource(
                        lMediaSource,
                        lStreamIndex,
                        lMediaTypeIndex,
                        out lSourceMediaType))
                {
                    break;
                }

                if (lSourceMediaType == null)
                {
                    break;
                }

                IEncoderNodeFactory lEncoderNodeFactory;

                if (!mEncoderControl.createEncoderNodeFactory(
                        lCLSIDEncoder,
                        out lEncoderNodeFactory))
                {
                    break;
                }

                if (lEncoderNodeFactory == null)
                {
                    break;
                }

                object lCompressedMediaType;

                if (!lEncoderNodeFactory.createCompressedMediaType(
                        lSourceMediaType,
                        lCLSIDEncoderMode,
                        50,
                        (uint)aCompressedMediaTypeIndex,
                        out lCompressedMediaType))
                {
                    break;
                }

                lresult = lCompressedMediaType;
            } while (false);

            return(lresult);
        }
        private async void mLaunchButton_Click(object sender, RoutedEventArgs e)
        {
            if (mLaunchButton.Content == "Stop")
            {
                if (mISession != null)
                {
                    mISession.closeSession();

                    mLaunchButton.Content = "Launch";
                }

                mISession = null;

                return;
            }

            if (mISourceControl == null)
            {
                return;
            }

            ICaptureProcessor lICaptureProcessor = null;

            try
            {
                lICaptureProcessor = await RTSPCaptureProcessor.createCaptureProcessor(mRTSPSourceComboBox.Text);
            }
            catch (System.Exception exc)
            {
                MessageBox.Show(exc.Message);

                return;
            }

            if (lICaptureProcessor == null)
            {
                return;
            }

            object lMediaSource = null;

            mISourceControl.createSourceFromCaptureProcessor(
                lICaptureProcessor,
                out lMediaSource);

            if (lMediaSource == null)
            {
                return;
            }


            string lxmldoc = "";

            mCaptureManager.getCollectionOfSinks(ref lxmldoc);

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(lxmldoc);

            var lSinkNode = doc.SelectSingleNode("SinkFactories/SinkFactory[@GUID='{2F34AF87-D349-45AA-A5F1-E4104D5C458E}']");

            if (lSinkNode == null)
            {
                return;
            }

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

            if (lContainerNode == null)
            {
                return;
            }

            IEVRSinkFactory lSinkFactory;

            var lSinkControl = mCaptureManager.createSinkControl();

            lSinkControl.createSinkFactory(
                Guid.Empty,
                out lSinkFactory);

            object lEVROutputNode;

            lSinkFactory.createOutputNode(
                mVideoPanel.Handle,
                out lEVROutputNode);

            if (lEVROutputNode == null)
            {
                return;
            }

            object lPtrSourceNode;

            var lSourceControl = mCaptureManager.createSourceControl();

            if (lSourceControl == null)
            {
                return;
            }



            lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnection(
                lMediaSource,
                0,
                0,
                lEVROutputNode,
                out lPtrSourceNode);


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

            lSourceMediaNodeList.Add(lPtrSourceNode);

            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";
        }
        private async void mLaunchButton_Click(object sender, RoutedEventArgs e)
        {
            mLaunchButton.IsEnabled = false;

            do
            {

                if (mLaunchButton.Content == "Stop")
                {
                    if (mISession != null)
                    {
                        await mISession.closeSessionAsync();

                        mLaunchButton.Content = "Launch";
                    }

                    mISession = null;

                    break;
                }

                if (mISourceControl == null)
                    break;

                ICaptureProcessor lICaptureProcessor = null;

                try
                {
                    lICaptureProcessor = IPCameraMJPEGCaptureProcessor.createCaptureProcessor();
                }
                catch (System.Exception exc)
                {
                    MessageBox.Show(exc.Message);

                    break;
                }

                if (lICaptureProcessor == null)
                    break;

                object lMediaSource = await mISourceControl.createSourceFromCaptureProcessorAsync(
                    lICaptureProcessor);

                if (lMediaSource == null)
                    break;


                string lxmldoc = await mCaptureManager.getCollectionOfSinksAsync();

                XmlDocument doc = new XmlDocument();

                doc.LoadXml(lxmldoc);

                var lSinkNode = doc.SelectSingleNode("SinkFactories/SinkFactory[@GUID='{2F34AF87-D349-45AA-A5F1-E4104D5C458E}']");

                if (lSinkNode == null)
                    break;

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

                if (lContainerNode == null)
                    break;

                var lSinkControl = await mCaptureManager.createSinkControlAsync();

                var lSinkFactory = await lSinkControl.createEVRSinkFactoryAsync(
                Guid.Empty);

                object lEVROutputNode = await lSinkFactory.createOutputNodeAsync(
                    mVideoPanel.Handle);

                if (lEVROutputNode == null)
                    break;

                var lSourceControl = await mCaptureManager.createSourceControlAsync();

                if (lSourceControl == null)
                    break;

                object lPtrSourceNode = await lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnectionAsync(
                    lMediaSource,
                    0,
                    0,
                    lEVROutputNode);


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

                lSourceMediaNodeList.Add(lPtrSourceNode);

                var lSessionControl = await mCaptureManager.createSessionControlAsync();

                if (lSessionControl == null)
                    break;

                mISession = await lSessionControl.createSessionAsync(
                    lSourceMediaNodeList.ToArray());

                if (mISession == null)
                    break;


                await mISession.registerUpdateStateDelegateAsync(UpdateStateDelegate);

                await mISession.startSessionAsync(0, Guid.Empty);

                mLaunchButton.Content = "Stop";

            } while (false);

            mLaunchButton.IsEnabled = true;

        }