コード例 #1
0
 public static void AdjustMeta2(
     VideoContainer2 form,
     MetadataConfiguration conf)
 {
     if (conf != null)
     {
         bool Done = false;
         if ((conf.Multicast != null) && (conf.Multicast.Address != null))
         {
             if ((conf.Multicast.Address.Type == IPType.IPv4) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv4Address))
             {
                 form.ConfigureMeta(conf.Multicast.Address.IPv4Address, conf.Multicast.Port, conf.Multicast.TTL);
                 Done = true;
             }
             if ((conf.Multicast.Address.Type == IPType.IPv6) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv6Address))
             {
                 form.ConfigureMeta(conf.Multicast.Address.IPv6Address, conf.Multicast.Port, conf.Multicast.TTL);
                 Done = true;
             }
         }
         if (!Done)
         {
             form.ConfigureMeta();
         }
     }
 }
コード例 #2
0
        static void Main(string[] args)
        {
            VideoContainer2.VerifyFilterRegistration();

            System.Threading.Thread.CurrentThread.CurrentUICulture =
                System.Globalization.CultureInfo.InvariantCulture;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (args.Length == 0 || args.Contains("-v"))
            {
                Application.Run(new MainForm());
            }
            else
            {
                CompactProcessingForm emptyForm = new CompactProcessingForm();
                emptyForm.ShowInTaskbar = false;
                System.Threading.Thread thread =
                    new Thread(new ThreadStart(new Action(() =>
                {
                    new SilentProcessingController(emptyForm).Run(args);
                    if (emptyForm.Created)
                    {
                        emptyForm.Invoke(new Action(emptyForm.Close));
                    }
                })));
                emptyForm.Shown +=
                    (s, e) => { thread.Start(); };

                Application.Run(emptyForm);
            }
        }
コード例 #3
0
        public static void AdjustAudio2(
            VideoContainer2 form,
            AudioEncoderConfiguration conf)
        {
            if (conf != null)
            {
                string Encoding = null;
                switch (conf.Encoding)
                {
                case AudioEncoding.G711: Encoding = "PCMA"; break;

                case AudioEncoding.G726: Encoding = "G726"; break;

                case AudioEncoding.AAC: Encoding = "MPEG4-GENERIC"; break;
                }
                bool Done = false;
                if ((conf.Multicast != null) && (conf.Multicast.Address != null))
                {
                    if ((conf.Multicast.Address.Type == IPType.IPv4) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv4Address))
                    {
                        form.ConfigureAudio(Encoding, 1, conf.SampleRate, conf.Multicast.Address.IPv4Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                    if ((conf.Multicast.Address.Type == IPType.IPv6) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv6Address))
                    {
                        form.ConfigureAudio(Encoding, 1, conf.SampleRate, conf.Multicast.Address.IPv6Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                }
                if (!Done)
                {
                    form.ConfigureAudio(Encoding, 1, conf.SampleRate);
                }
            }
        }
コード例 #4
0
        public static void AdjustVideo2(
            VideoContainer2 form,
            VideoEncoderConfiguration conf)
        {
            if ((conf != null) && (conf.Resolution != null))
            {
                string Encoding = null;
                switch (conf.Encoding)
                {
                case VideoEncoding.JPEG: Encoding = "JPEG"; break;

                case VideoEncoding.MPEG4: Encoding = "MP4V-ES"; break;

                case VideoEncoding.H264: Encoding = "H264"; break;
                }
                int FPS = 5;
                if (conf.RateControl != null)
                {
                    if (conf.RateControl.EncodingInterval > 0)
                    {
                        FPS = conf.RateControl.FrameRateLimit / conf.RateControl.EncodingInterval;
                    }
                    else
                    {
                        FPS = conf.RateControl.FrameRateLimit;
                    }
                    if (FPS < 1)
                    {
                        FPS = 1;
                    }
                    if (FPS > 120)
                    {
                        FPS = 120;
                    }
                }
                bool Done = false;
                if ((conf.Multicast != null) && (conf.Multicast.Address != null))
                {
                    if ((conf.Multicast.Address.Type == IPType.IPv4) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv4Address))
                    {
                        form.ConfigureVideo(Encoding, conf.Resolution.Width, conf.Resolution.Height, FPS, conf.Multicast.Address.IPv4Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                    if ((conf.Multicast.Address.Type == IPType.IPv6) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv6Address))
                    {
                        form.ConfigureVideo(Encoding, conf.Resolution.Width, conf.Resolution.Height, FPS, conf.Multicast.Address.IPv6Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                }
                if (!Done)
                {
                    form.ConfigureVideo(Encoding, conf.Resolution.Width, conf.Resolution.Height, FPS);
                }
            }
        }
コード例 #5
0
 private void DoSequence(string codec, string filename, MediaUri Uri, StreamType streamType, TransportProtocol protocol)
 {
     if (NewGenVideo == null)
     {
         NewGenVideo = new VideoContainer2();
     }
     VideoUtils.AdjustGeneral2(NewGenVideo, _username, _password, MessageTimeout, protocol, streamType, Uri);
     VideoUtils.AdjustBackchannel2(NewGenVideo, codec, filename);
     NewGenVideo.EventSink = this;
     NewGenVideo.SetSequence(4);
     NewGenVideo.SilentRun();
     NewGenVideo.EventSink = null;
 }
コード例 #6
0
        private void DoSequence(VideoEncoderConfiguration config, MediaUri Uri)
        {
            if (NewGenVideo == null)
            {
                NewGenVideo = new VideoContainer2();
            }
            VideoUtils.AdjustGeneral2(NewGenVideo, _username, _password, MessageTimeout, TransportProtocol.UDP, StreamType.RTPUnicast, Uri);
            VideoUtils.AdjustVideo2(NewGenVideo, config);
            //ValidateStreamSequence22();
            NewGenVideo.EventSink = this;
            NewGenVideo.SetSequence(2, OperationDelay, false, true);
            NewGenVideo.Connect();
            NewGenVideo.SetupWindow();
            VideoIsOpened = true;

            NewGenVideo.Run();
            NewGenVideo.CloseWindow();
            VideoIsOpened         = false;
            NewGenVideo.EventSink = null;
        }
コード例 #7
0
            public static void VW(object param)
            {
                VideoStreamForm vsf = (VideoStreamForm)param;

                try
                {
                    lock (vsf.eventConsumer)
                    {
                        vsf.streamUri = vsf.getStreamUri(vsf.streamSetup, vsf.profile.token);
                    }
                }
                catch (Exception ex)
                {
                    vsf.exception = ex;
                }

                if (vsf.exception == null)
                {
                    VideoContainer2 videoForm = new VideoContainer2();
                    //videoForm.NICIndex = vsf.NICIndex;
                    VideoUtils.AdjustGeneral2(
                        videoForm, vsf.username, vsf.password, vsf.messageTimeout, vsf.streamSetup.Transport.Protocol,
                        vsf.streamSetup.Stream, vsf.streamUri);
                    VideoUtils.AdjustVideo2(
                        videoForm, vsf.profile.VideoEncoderConfiguration);
                    //videoForm.SetSequence(1);

                    bool VideoIsOpened = false;
                    try
                    {
                        VideoIsOpened       = true;
                        videoForm.EventSink = vsf;
#if false
                        videoForm.SilentStart();
                        ((AutoResetEvent)vsf.eventOpened).Set();
                        vsf.signalCloseWindow.WaitOne();
                        videoForm.SilentStop();
#else
                        videoForm.OpenWindow(false);

                        ((AutoResetEvent)vsf.eventOpened).Set();
                        vsf.signalCloseWindow.WaitOne();

                        videoForm.CloseWindow();
#endif
                        VideoIsOpened = false;
                    }
                    catch (Exception ex)
                    {
                        vsf.exception = ex;
                    }
                    finally
                    {
                        if (VideoIsOpened)
                        {
                            videoForm.CloseWindow();
                        }
                        videoForm = null;
                    }
                }
                ((ManualResetEvent)vsf.eventWorkEnded).Set();
                ((AutoResetEvent)vsf.signalCloseWindow).Set();
            }
コード例 #8
0
 public static void AdjustBackchannel2(VideoContainer2 form, string codec, string filename)
 {
     form.ConfigureBackchannel(codec, filename);
 }
コード例 #9
0
        public static void AdjustGeneral2(
            VideoContainer2 form,
            string username,
            string password,
            int messageTimeout,
            TransportProtocol protocol,
            StreamType streamType,
            MediaUri streamUri)
        {
            VideoContainer2.RegisterCallbacks();

            int    Port      = 0;
            int    Transport = 0;
            string uri       = (streamUri != null) ? streamUri.Uri : "";

            try
            {
                int pos = uri.IndexOf(']', 8);
                if (pos > 0) // IPv6
                {
                    pos++;
                }
                else
                {
                    pos = uri.IndexOf(':', 8);
                }
                if (uri.Substring(pos, 1) == ":") // port specified
                {
                    pos++;
                    int pos2 = uri.IndexOf('/', pos);
                    pos = int.Parse(uri.Substring(pos, pos2 - pos));
                    if (pos > 0)
                    {
                        Port = pos;
                    }
                }
            }
            catch (System.Exception) { };

            switch (protocol)
            {
            case TransportProtocol.UDP:
                Transport = 0;
                if (Port == 0)
                {
                    Port = 554;
                }
                break;

            case TransportProtocol.TCP:
                Transport = 0;
                if (Port == 0)
                {
                    Port = 554;
                }
                break;

            case TransportProtocol.RTSP:
                Transport = 1;
                if (Port == 0)
                {
                    Port = 554;
                }
                break;

            case TransportProtocol.HTTP:
                Transport = 2;
                if (Port == 0)
                {
                    Port = 80;
                }
                break;
            }
            ;
            if (streamType == StreamType.RTPMulticast)
            {
                Transport = 3;
            }

            form.ConfigureConnection(uri, username, password, Transport, Port, 0, messageTimeout);
        }