Autor Tema: reproducir dvd dentro de formulario en c#2008  (Leído 2556 veces)

0 Usuarios y 1 Visitante están viendo este tema.

wrecinos

  • Visitante
reproducir dvd dentro de formulario en c#2008
« : diciembre 22, 2010, 10:29:03 am »
Hola colegas!

Quiero preguntarles si alguno de Uds. ha podido reproducir un dvd dentro de un formulario de c#2008. Aclaro en modo WindowsApplication

He intentado hacer esto con el ActiveMovie Control (QuartzTypeLib) sin éxito, solo he podido reproducir archivos multimedia.

Alguien sabe de algún componente extra similar al ActiveMovie que se pueda referenciar para lograr reproducir un dvd?

O si alguen sabe que componente del ActiveMovie se utiliza para lograr reconocer los dvds como origen del video?

Disculpen que sea muy generalizado.. si alguien le interesa el fuente de la reproducción de archivos de video.. me avisan y lo subo

Saludos


Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #1 : diciembre 22, 2010, 10:33:24 am »
y para que un dvd? no te sale mejor ripear el archivo de video?

wrecinos

  • Visitante
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #2 : diciembre 22, 2010, 01:48:50 pm »
g00mba:

No.. lo que sucede es que estoy haciendo una aplicación que simule un reproductor de video. entonces debo de tener la opción para reproducir dvds

Lo de reproducir el video desde un archivo como el que tu planteas, eso ya lo tengo.


saludos!

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #3 : diciembre 22, 2010, 02:02:28 pm »
g00mba:

No.. lo que sucede es que estoy haciendo una aplicación que simule un reproductor de video. entonces debo de tener la opción para reproducir dvds

Lo de reproducir el video desde un archivo como el que tu planteas, eso ya lo tengo.


saludos!
eh... que "simule"? pero si eso no tiene nada de simulado, efectivamente, lo que queres ES un reproductor de DVD... mi sugerencia es que te bajes el codigo del VLC player para ver si se adecua a tu proyecto.

o algo mas sencillo como directshow.net, pero ahi si necesitarias instalar codecs de reproduccion de video
http://www.codeproject.com/KB/directx/directshownet.aspx

wrecinos

  • Visitante
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #4 : diciembre 22, 2010, 06:16:10 pm »
Si.. efectivamente estoy ocupando Directshow.net

pero el ejemplo que está ahi.. solo te funciona para reproducir archivos. Lo que necesito es reproducir un dvd.

Voy a ver que invento con el fuente del VLC.. a ver si se puede pegar al .net

voy a postear el código de lo que ya tengo para que tengas una idea por donde ando

saludos

wrecinos

  • Visitante
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #5 : diciembre 22, 2010, 06:22:28 pm »
aqui les subo el fuente de este formulario.. obviamente tiene referencias y otras clases instanciadas.. por lo que no funcionaría solo dandole copiar y pegar... pero al menos es una idea de lo que tengo

en este ya hace la reproduccion de archivos.. para el ejemplo utilizo un wmv.. pero podía ser un avi o un mpg o cualquiera con los codecs necesarios instalados para reproducir en el windows media player

espero que sea útil para alguien que ande buscando algo similar

saludos



Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuartzTypeLib;

namespace sistema
{
    public partial class frm_tv : Form
    {
        private const int WS_CHILD = 0x40000000;
        private const int WS_CLIPCHILDREN = 0x2000000;

        private OpenFileDialog obj_ofd = new OpenFileDialog();
        private FilgraphManager obj_fgm = null;
        private IVideoWindow obj_ivw = null;
        private IMediaControl obj_imc = null;

        private int x_mensaje_id = 0;
        private string x_mensaje = "";
        private bool x_bandera_mensaje = false;

        public frm_tv()
        {
            InitializeComponent();
        }

        frm_turno frm_turno = new frm_turno();

        DataTable obj_dt = new DataTable();

        private void frm_tv_Load(object sender, EventArgs e)
        {
            lbl_fecha.Text = "";
            lbl_hora.Text = "";
            lbl_ticket_1.Text = "";
            lbl_ticket_2.Text = "";
            lbl_ticket_3.Text = "";
            lbl_ticket_4.Text = "";
            lbl_ticket_5.Text = "";
            lbl_mensajes.Text = "";

            tmr_fecha.Enabled = true;

            tmr_mensajes.Enabled = true;

            pan_tv.Width = this.Width - pan_tv.Left - 30;
            pan_tv.Height = this.Height - pan_tv.Top - 140;

            pan_mensajes.Top = pan_tv.Height + 30;
            pan_mensajes.Width = this.Width - pan_mensajes.Left - 30;

            pan_tickets.Height = this.Height - pan_mensajes.Height - pan_tickets.Top - 40;

            fx_distribuir_tickets();

            fx_obtener_tickets();

            tmr_tickets.Enabled = true;

            lbl_mensajes.Width = pan_mensajes.Width - 20;
           
            obj_ofd.FileName = "c:\\sistema\\video.wmv";

            obj_fgm = new FilgraphManager();

            obj_fgm.RenderFile(obj_ofd.FileName);

            try
            {
                obj_ivw = obj_fgm as IVideoWindow;

                obj_ivw.Owner = (int)pan_tv.Handle;

                obj_ivw.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;

                obj_ivw.SetWindowPosition(pan_tv.ClientRectangle.Left,
                    pan_tv.ClientRectangle.Top,
                    pan_tv.ClientRectangle.Width,
                    pan_tv.ClientRectangle.Height);
            }
            catch (Exception)
            {
                obj_ivw = null;
            }

            obj_imc = obj_fgm as IMediaControl;
           
            obj_imc.Run();

            tmr_turno.Enabled = true;
        }

        private void tmr_fecha_Tick(object sender, EventArgs e)
        {
            lbl_fecha.Text = DateTime.Now.ToString("dd-MM-yyyy");
            lbl_hora.Text = DateTime.Now.ToString("hh:mm:ss tt").ToUpper();
        }

        private void tmr_mensajes_Tick(object sender, EventArgs e)
        {
            if (x_bandera_mensaje == false)
            {
                lbl_mensajes.Left = pan_mensajes.Width;

                tmr_mensajes.Enabled = false;

                bool x_resultado = fx_obtener_mensajes(x_mensaje_id);

                if (x_resultado == false)
                {
                    if (x_mensaje_id == 0)
                    {
                        tmr_pausa.Enabled = true;
                    }
                    else
                    {
                        x_mensaje_id = 0;

                        tmr_mensajes.Enabled = true;
                    }
                }
                else
                {
                    lbl_mensajes.Text = x_mensaje;

                    x_bandera_mensaje = true;

                    tmr_mensajes.Enabled = true;
                }
            }

            if (x_bandera_mensaje == true)
            {
                lbl_mensajes.Left -= 1;

                if (lbl_mensajes.Left <= lbl_mensajes.Width * -1)
                {
                    x_bandera_mensaje = false;
                }
            }
        }

        private void tmr_pausa_Tick(object sender, EventArgs e)
        {
            x_mensaje_id = 0;

            tmr_mensajes.Enabled = true;

            tmr_pausa.Enabled = false;
        }

        private bool fx_obtener_mensajes(int p_mensaje_id)
        {
            string x_sql = "EXECUTE sp_obtener_mensajes " +
                p_mensaje_id.ToString();

            obj_dt = conexion.fx_sql(x_sql);

            if (obj_dt == null)
            {
                return false;
            }

            if (obj_dt.Rows.Count == 0)
            {
                obj_dt.Dispose();

                return false;
            }
            else
            {
                DataRow obj_dr = obj_dt.Rows[0];

                x_mensaje_id = int.Parse(obj_dr["mensaje_id"].ToString());
                x_mensaje = obj_dr["mensaje"].ToString();

                obj_dr = null;

                obj_dt.Dispose();

                return true;
            }
        }

        private void fx_distribuir_tickets()
        {
            int l_cantidad = 5;
            int l_tamanio = lbl_ticket_1.Height;
            int l_total = pan_tickets.Height;

            int l_tickets = l_cantidad * l_tamanio;
            int l_espacios = l_total - l_tickets;
            int l_espacio = Convert.ToInt32(l_espacios / (l_cantidad + 1));

            lbl_ticket_1.Top = l_espacio;
            lbl_ticket_2.Top = (l_espacio * 2) + l_tamanio;
            lbl_ticket_3.Top = (l_espacio * 3) + (l_tamanio * 2);
            lbl_ticket_4.Top = (l_espacio * 4) + (l_tamanio * 3);
            lbl_ticket_5.Top = (l_espacio * 5) + (l_tamanio * 4);
        }

        private bool fx_obtener_tickets()
        {
            lbl_ticket_1.Text = "";
            lbl_ticket_2.Text = "";
            lbl_ticket_3.Text = "";
            lbl_ticket_4.Text = "";
            lbl_ticket_5.Text = "";

            string x_sql = "EXECUTE sp_obtener_tickets";

            obj_dt = conexion.fx_sql(x_sql);

            if (obj_dt == null)
            {
                return false;
            }

            if (obj_dt.Rows.Count == 0)
            {
                obj_dt.Dispose();

                return false;
            }
            else
            {
                for (int i = 0; i < obj_dt.Rows.Count; i++)
                {
                    DataRow obj_dr = obj_dt.Rows[i];

                    string x_ticket = obj_dr["ticket"].ToString();

                    switch (i)
                    {
                        case 0:
                            {
                                lbl_ticket_1.Text = x_ticket;

                                break;
                            }

                        case 1:
                            {
                                lbl_ticket_2.Text = x_ticket;

                                break;
                            }

                        case 2:
                            {
                                lbl_ticket_3.Text = x_ticket;

                                break;
                            }

                        case 3:
                            {
                                lbl_ticket_4.Text = x_ticket;

                                break;
                            }

                        case 4:
                            {
                                lbl_ticket_5.Text = x_ticket;

                                break;
                            }
                    }

                    obj_dr = null;

                    obj_dt.Dispose();
                }

                return true;
            }
        }

        private void tmr_tickets_Tick(object sender, EventArgs e)
        {
            fx_obtener_tickets();
        }

        private void fx_salir()
        {
            obj_imc.Stop();

            obj_imc = null;
            obj_ivw = null;
            obj_fgm = null;
            obj_ofd = null;

            tmr_fecha.Enabled = false;
            tmr_mensajes.Enabled = false;
            tmr_pausa.Enabled = false;
            tmr_tickets.Enabled = false;

            this.Close();
        }

        private void fx_anunciar()
        {
            tmr_turno.Enabled = false;

            string x_sql = "EXECUTE sp_anunciar_tickets";

            DataTable obj_dt_turno = new DataTable();

            obj_dt_turno = conexion.fx_sql(x_sql);

            if (obj_dt_turno == null)
            {
                tmr_turno.Enabled = true;

                return;
            }

            if (obj_dt_turno.Rows.Count == 0)
            {
                obj_dt_turno = null;

                tmr_turno.Enabled = true;

                return;
            }
            else
            {
                for (int i = 0; i < obj_dt_turno.Rows.Count; i++)
                {
                    DataRow obj_dr = obj_dt_turno.Rows[i];

                    string x_ticket = obj_dr["ticket"].ToString();
                    string x_ubicacion = obj_dr["ubicacion"].ToString();

                    frm_turno.lbl_ticket.Text = x_ticket;
                    frm_turno.lbl_nombre.Text = x_ubicacion;

                    frm_turno.ShowDialog();
                }

                tmr_turno.Enabled = true;
            }
        }

        private void tmr_turno_Tick(object sender, EventArgs e)
        {
            fx_anunciar();
        }

        private void pic_logo_Click(object sender, EventArgs e)
        {
            fx_salir();
        }
    }
}

wrecinos

  • Visitante
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #6 : diciembre 23, 2010, 11:46:29 am »
les comento que ya estoy haciendo pruebas con el VLC y por el momento ya puedo reproducir archivos.. espero dar con lo que necesito con este dll

para los interesados:
http://www.helyar.net/2009/libvlc-media-player-in-c/

saludos
« Última Modificación: diciembre 23, 2010, 12:01:36 pm por wrecinos »

wrecinos

  • Visitante
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #7 : diciembre 23, 2010, 01:51:14 pm »
Vaya señores.. al fin veo la luz con esto!

para los interesados.. bajen este zip.. descomprimanlo.. abranlo en visual studio 2008 y prueben.. no está 100% terminado a lo que necesito.. pero ya es un gran avance.

requisitos.. tener instalado el vlc 1.1.2 o superior. Yo lo probé con el 1.1.5

Saludos colegas!

https://sites.google.com/site/wrecinos/archivos/MyLibVLC_112.zip?attredirects=0&d=1



Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re: reproducir dvd dentro de formulario en c#2008
« Respuesta #8 : diciembre 23, 2010, 02:19:42 pm »
ah felicidades,  el vlc es bastante competente como librería  :thumbsup: