none
Ayuda,para reproducir un video en asp.net c# RRS feed

  • Pregunta

  • Hola...

    Estoy desarrollando en manera de práctica, mediante un panel administrador subir videos y que en la base de datos me capture la ruta y me muestre los datos en un gridview,hasta ahí todo bien cuento con 2 maneras que se me guarda....

    1.- String link = "video/" + Path.GetFileName(FileUpload1.FileName) se me guarda de esta manera en la base de datos video/2113.mp4

    2.- link = "<Video width=400 Controls><Source src=" + link + " type=video/mp4></video>"; se guarda de esta manera en la base de datos <Video width=400 Controls><Source src=video/2113.mp4 type=video/mp4></video> pero esta manera no me deja editar en el gridview porque lo reconoce como script malicioso,pero si me muestra en la columna correspondiente un reproductor,donde se puede reproducir directamente en el gridview.

    Mi consulta es la siguiente....puedo utilizar alguna de las 2 maneras que se guarda en mi bd? cómo puedo hacer para que en otra página me muestre en un reproductor con playlist o sin playlist, puede ser cualquier manera ,pero que al terminar un video se reproduzca el siguiente sin dar clic a ningún lado???

    Espero puedan entenderme....sino le doy un ejemplo.....cuando usamos el Windows media player y agregamos varios videos a la lista de reproducción, al usar pantalla completa, se reproduce solo cada uno de los videos, de esa manera me gustaría puedan explicarme o darme algún ejemplo de lo que estoy queriendo hacer como práctica.

    De antemano gracias por la ayuda...

               string constring = "Data Source = .; Initial Catalog = prueba_videos; Integrated Security = True";

                SqlConnection sqlcon = new SqlConnection(constring);
                FileUpload1.SaveAs(Server.MapPath("~/video/") + Path.GetFileName(FileUpload1.FileName));
                String link = "video/" + Path.GetFileName(FileUpload1.FileName);
                //link = "<Video width=400 Controls><Source src=" + link + " type=video/mp4></video>";
                String query = "Insert into videodetails(videoname,authorname,videolink) values('" +
                txtNombre.Text + "','" + txtEncargado.Text + "','" + link + "')";
                SqlCommand cmd = new SqlCommand(query, sqlcon);
                sqlcon.Open(); ;
                cmd.ExecuteNonQuery();
                sqlcon.Close();
                Label3.Text = "Los datos de video se han subido y guardado correctamente";
                txtNombre.Text = "";
                txtEncargado.Text = "";
                GridView1.DataBind();



    sábado, 10 de marzo de 2018 16:03

Respuestas

  • Correcto.  Guardar el link con las etiquetas HTML está mal.  La forma más robusta de hacer un repositorio de archivos es crear un ASP Handler que reciba el ID del archivo, y que devuelva el contenido del archivo.

    Imagine un aspx así:

    <video width="400" controls>
        <source src="/video.ashx?id=<%# Eval(VideoId) %>" type="video/mp4" />
    </video>


    Donde VideoId sería una propiedad en el code behind de la página cuyo get sabe dónde encontrar dicha información (query string, form data, el Text de un textbox, etc.).

    public string VideoId
    {
        get { return ...; //Devolver el ID desde el querystring o de donde sea que esté }
    }


    Lo que ocupa entonces es el handler.

    public void ProcessRequest(HttpContext context)
    {
        string id = context.Request.QueryString["id"];
        string videoFileName = <obtener el nombre de archivo desde base de datos>;
        context.Response.ContentType = "video/mp4";
        //Abrir y leer el archivo.  Agregar using System.IO;
        using (FileStream fs = new FileStream(videoFileName, FileMode.Open))
        {
            byte[] buffer = new byte[16384];
            int bytesRead;
            do
            {
                bytesRead = fs.Read(buffer, 0, buffer.Length);
                context.Response.Content.OutputStream.Write(buffer, 0, bytesRead);
            }
            while (bytesRead == buffer.Length);
        }
        context.Response.Flush();
    }

    NOTA IMPORTANTE:  Para agregar el handler al proyecto, use la plantilla llamada "Generic Handler".  No sé cómo sería en un Visual Studio en español. :-(

    Entonces de esta manera, lo único que debe guardar en base de datos es la ruta completa al archivo de vídeo, y por lo tanto en el GridView no debería tener más el problema.

    Debo hacerle notar, sin embargo, que no tiene mucho sentido dejar que un usuario vea la ruta completa del archivo pues es una ruta en el servidor la cual muy probablemente no puede o no debe manipular. Solamente algo para que lo tome en cuenta.


    Jose R. MCP
    Code Samples


    domingo, 11 de marzo de 2018 23:05
    Moderador