none
webcam de nuevo RRS feed

  • Pregunta

  • hola amigos, a ver si me pueden ayudar esta vez...

    tengo dos formularios Form1 y Form2 en el 1 conecto una webcam que cargo en un combobox con el siguiente método

    public void BuscarDispositivos()
            {
                DispositivosDeVideo = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                if (DispositivosDeVideo.Count == 0)
                {
                    ExistenDispositivos = false;
                    MessageBox.Show("No hay dispositivos de video conectados");
                }

                else
                {
                    LlenarCombox.Llenar_cmb_Videos(DispositivosDeVideo, cmb_Video1, cmb_Video2, cmb_Video3, cmb_Video4, cmb_Video5);
                    ExistenDispositivos = true;
                }
            }

    Llenar_cmb_Videos es un metodo que hice que me carga en los combobox los dispositivos de videos k hay conectados a la pc... eso funciona bien..

    una vez que seleccione una webcam del combobox la carga en un videosourceplayer que es un control de la Lib Aforge y todo esto se hace en el Form1 en el cual tengo tambien 2 botones para conectar o desconectar la webcam seleccionada con el siguiente codigo..

    para Conectar....

    private void btn_vc1_Click(object sender, EventArgs e)
            {
                try
                {
                    string monike = DispositivosDeVideo[cmb_Video1.SelectedIndex].MonikerString;
                    monike1 = monike;
                    VideoCaptureDevice FuenteDeVideo = null;
                    for (int i = 0; i < DispositivosDeVideo.Count; i++)
                    {
                        if (DispositivosDeVideo[i].MonikerString == monike)
                        {
                            FuenteDeVideo = new VideoCaptureDevice(DispositivosDeVideo[i].MonikerString);
                        }
                    }
                    FuenteDeVideo.NewFrame += new NewFrameEventHandler(VideoSource_NewFrame1);
                    videoSourcePlayer1.VideoSource = FuenteDeVideo;
                    //Inicializar el control
                    videoSourcePlayer1.Start();                
                    led1.Value = true;
                    btn_vc1.Enabled = false;
                    btn_vd1.Enabled = true;
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }

    y para desconectar

    private void btn_vd1_Click(object sender, EventArgs e)
            {
                videoSourcePlayer1.SignalToStop();
                videoSourcePlayer1.BackgroundImage = null;
                led1.Value = false;
                btn_vd1.Enabled = false;
                btn_vc1.Enabled = true;
            }

    Hasta aki toda funciona ok..

    Ahora lo k kiero es que cuando le de dobleclick a un videsourceplayer me salga en grande el Form2 con el video de la webcam que se esta mostrando en el videosourceplayer del form1 para eso hago esto..

      private void videoSourcePlayer1_DoubleClick(object sender, EventArgs e)
            {
                //videoSourcePlayer1.
                if (monike1!=null)
                {                
                    videoSourcePlayer1.SignalToStop();
                    videoSourcePlayer1.BackgroundImage = null;                
                    btn_vc1.Enabled = true;
                    btn_vd1.Enabled = false;
                    Control_Estufa estufa = new Control_Estufa(monike1,estufa1);
                    estufa.ShowDialog();
                }
                else
                {
                    MessageBox.Show("No hay dispositivo de video conectado para la Estufa1");
                }
                
            }

    Control_Estufa se refiere al Form2 que al construnctor del Form2 le pase 2 parametros

    monike 1 que me va a contener un string correspondoente al dispositivo de video que kiero y estufa1 es otro string k comparo mas adelante

    En pocas palabras lo k hago es parar el video del Form1 y mostrarlo en el Form2 esto me funciona bien hasta aki.....

    Ahora el problema es cuando kiero virar para atras me refiero que cuando cierre el Form2 tengo k volver a cargar el mismo video al Form1... para eso hago lo siguiente ...

     private void Control_Estufa_FormClosed(object sender, FormClosedEventArgs e)
            {          
                if (estufa == "estufa1")
                {
                    Sistema_de_Camaras ca = new Sistema_de_Camaras();
                    vcplayer.SignalToStop();                
                    vcplayer.VideoSource.WaitForStop();
                    vcplayer.Refresh();
                    ca.Reconect1(monike);
                    
                }
            }

    Sistema_de_Camaras se refiere al Form1 y Reconect1 se lo pongo a continuacion...

     public void Reconect1(string monike1)
            {
                try
                {
                    BuscarDispositivos();                                
                    VideoCaptureDevice FuenteDeVideo = null;
                    for (int i = 0; i < DispositivosDeVideo.Count; i++)
                    {
                        if (DispositivosDeVideo[i].MonikerString == monike1)
                        {
                            FuenteDeVideo = new VideoCaptureDevice(DispositivosDeVideo[i].MonikerString);
                        }
                    }
                    FuenteDeVideo.NewFrame += new NewFrameEventHandler(VideoSource_NewFrame1);
                    videoSourcePlayer1.VideoSource = FuenteDeVideo;
                    //Inicializar el control
                    videoSourcePlayer1.Start();
                    videoSourcePlayer1.Refresh();
                    //vsource1.Show();
                    //vsource1.Start();
                    led1.Value = true;
                    btn_vc1.Enabled = false;
                    btn_vd1.Enabled = true;
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }

    Ahora en la practica lo k me pasa es que nunca se llega a cargar la webcam de nuevo en el form 1 y no tengo idea k pasa... disculpen k este un poco largo pero asi es como mejor me c explicar para que entiendan

    miércoles, 2 de mayo de 2018 18:16

Todas las respuestas

  • hola

    lo primero que puedo marcar es porque defines un try..catch si despues lanzas la exception usando throw ex;

    si vas hacer esto simplemente quita el try..catch

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 2 de mayo de 2018 20:53
  • hola

    a simple vista no veo nada incorrecto, pero si pones un breakpoint en el codigo puede validar que ingresa en el

    if (estufa == "estufa1")

    me parece raro que solo invoques al Reconect1 si pasa ese if, porque sino pasa no se reconecta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 2 de mayo de 2018 20:57
  • la verdad es que ese if hasta ahora siempre va a ser true solo estoy provando el codigo para ver si funciona bien el Reconect1. La verdad es que no tengo idea de que esta pasando ya que la logica es la misma de los botones connect y disconnect pero entre dos formularios
    jueves, 3 de mayo de 2018 12:51
  • la verdad es que ese if hasta ahora siempre va a ser true solo estoy provando el codigo para ver si funciona bien el Reconect1. La verdad es que no tengo idea de que esta pasando ya que la logica es la misma de los botones connect y disconnect pero entre dos formularios

    Leandro estuve viendo y kiero hacerte una pregunta ...

    Cuando llamo al metodo reconect instanciando el Form1 no existe una manera de hacerlo utilizando el control videosourceplayer directamente del form1 desde el form2 sin instanciarlo ? es decir acceder a el directo desde el form2 ??

    jueves, 3 de mayo de 2018 13:18
  • la verdad es que ese if hasta ahora siempre va a ser true solo estoy provando el codigo para ver si funciona bien el Reconect1. La verdad es que no tengo idea de que esta pasando ya que la logica es la misma de los botones connect y disconnect pero entre dos formularios

    Leandro estuve viendo y kiero hacerte una pregunta ...

    Cuando llamo al metodo reconect instanciando el Form1 no existe una manera de hacerlo utilizando el control videosourceplayer directamente del form1 desde el form2 sin instanciarlo ? es decir acceder a el directo desde el form2 ??

    k va no es eso tampoco lo unico k me keda es una forma de refrezcar el control no se ... ya no c k hacer
    jueves, 3 de mayo de 2018 15:15
  • Ya resolvi tuve que utilizar otra variante... el problema es que cuado cargaba el video de la webcam en el form1 este se creaba en un proceso y cuando intentaba llamar al metodo reconnect1 desde el form2 lo k hacia era una instancia del form1 y eso creaba otro proceso y no me referia al mismo proceso donde se habia creado anteriormente por lo k no me mostraba el video.. lo k hice fue crear un panel en hide dentro del form1 y lo mostraba a la accion dobleclick para mostrar mas grande cualkier webcam seleccionado ya que no supe como referirme al proceso k creo el form1 desde un principio para llamarlo desde el form2. Estuve investigando un poco y tiene algo que ver con coger el handle del form o algo asi cosa que no entendi muy bien pero bueno ahora como estoy trabajando sobre el mismo form no necesito esto
    viernes, 4 de mayo de 2018 13:27