Sección de controles Ocx para Visual basic , Dll , Activex

219 - Reproducir películas y videos en cuadro de diálogo de windows

<Volver> - Anterior - Siguiente



 

 

Este es un módulo de clase para vb6 que muestra una forma de crear un cuadro de diálogo de windows para abrir archivos, y poder visualizar películas y videos dentro de la ventana como una vista previa.

El código fuente para reproducir los archivos es de un ejemplo creado por Jason Hensley, que contiene varias funciones para poder ejecutar comandos y manipular los videos con la función de windows MciSendString

 

 

 

Descargar

>> Descargar código fuente

Créditos


Captura de pantalla

Esta es la ventana para reproducir la película. Solo contiene las opciones principales: para reproducir, hacer pausa y reiniciar.

Y una opción para ver información básica del video:

 

 

Descripción.

El módulo de clase se puede utilizar , tanto para ver la película en el cuadro de diálogo, como también usar otra instancia y utilizarla para acceder a los comandos del MCI y reproducir los archivos desde el formulario, por ejemplo en un picbox, control Frame o en una ventana.

Para usarlo con el cuadro de diálogo

Para el CommonDialog contiene un método o función ( ShowDialog ) con dos parámetros principales

sPath = ShowDialog( hWndOwner as Form , lFilters as EnumFilter)

Nota. Si se quiere pasar un filtro personalizado, primero hay que establecer el valor en customFilter

        .CustomFilter = "Archivos x" & Chr(0) & "*.extension del archivo"
        .Width = 100
        Text1 = .ShowDialog(Me, eCustom) 

o varias extensiones, por ejemplo esto solo muestra los tipos FLV y AVI

        .CustomFilter = "Archivos de video Flash y Avi" & Chr(0) & "*.flv;*.avi"
        Text1 = .ShowDialog(Me, eCustom)  

También contiene un evento para recuperar algunos datos del archivo seleccionado, por ejemplo el tipo, la duración, y el ícono asociado al archivo

Private Sub cDlgMoviePreview_GetMoviePropertys( _
    ByVal sFileName As String, _
    ByVal sFileType As String, _
    ByVal sFrameRate As String, _
    ByVal sLenghtMilisec As String, _
    ByVal sTotalLenght As String, _
    smallIcon As stdole.Picture, _
    NormalIcon As stdole.Picture, _
    hIcon As Long)



End Sub
  

 


Algunas funciones del ejemplo de Jason Hensley para reproducir:

CloseMovie, STopMovie, PlayMovie, PauseMovie

Cierra el dispositivo MCI, y los demás para detener, comenzar y pausar la reproducción


FileName

Ruta del archivo a reproducir


openMovieWindow

Método para poder abrir el video e indicar donde reproducirlo, por ejemplo en el form o en un control picture, etc ..

cm.openMovieWindow unPicture.hwnd, "child"

También se puede usar para reproducir en una ventana nueva. Se debe pasar en el segundo parámetro el valor "popup" u "overlapped".


sizeLocateMovie

Para poder indicar las dimensiones y posición de la película (los valores deben ser en pixeles).

Por ejemplo si se quiere ajustar la película al tamaño de un control picBox, es decir el ancho y alto pero no escalar:

    Set cm = New cDLGMov
    With cm
        .FileName = "c:\video.flv"
        Call .openMovieWindow(Picture1.hwnd, "child")
        Call .sizeLocateMovie(0, 0, _
            Picture1.ScaleX(Picture1.ScaleWidth, Picture1.ScaleMode, vbPixels), _
            Picture1.ScaleY(Picture1.ScaleHeight, Picture1.ScaleMode, vbPixels))
        Call .playMovie
    End With 

Este función permite ajustar la película, es decir escalar y redimensionar al tamaño de la ventana.

Private Sub PicBox_Resize()
    
    ' Ancho y alto del video
    Dim lWidthMov As Long
    Dim lHeightMov As Long
    Dim HScale As Double
    Dim VScale As Double
    Dim MyScale As Double
    Dim lWidth As Long
    Dim lHeight As Long
    Dim x As Long
    Dim y As Long
    
    'Enviar las variables para obtener la dimensión
    Call extractDefaultMovieSize(lWidthMov, lHeightMov)
    ' verificar que los valores no sean 0 por si hubo error
    If lWidthMov > 0 And lHeightMov > 0 Then
        With PicBox
            ' Calcular escala
            HScale = ((.Width / Screen.TwipsPerPixelX) / lWidthMov)
            VScale = ((.Height / Screen.TwipsPerPixelY) / lHeightMov)
                            
            MyScale = IIf(VScale >= HScale, HScale, VScale)
            ' ancho y alto final
            lWidth = lWidthMov * MyScale
            lHeight = lHeightMov * MyScale
            ' Calcular la posición izquierda y Top
            x = ((.Width / Screen.TwipsPerPixelX) - lWidth) / 2
            y = ((.Height / Screen.TwipsPerPixelY) - lHeight) / 2
            ' redimensionar y escalar la pelicula
            Call sizeLocateMovie(x, y, lWidth, lHeight)
        End With
    End If
End Sub

Si se quiere reproducirlo a la mitad del tamaño del picBox y en forma centrada

    Dim lWidth As Long
    Dim lHeight As Long
    Dim x As Long
    Dim y As Long
    
    With Picture1
        ' Ancho y alto
        lWidth = (.ScaleX(.ScaleWidth, .ScaleMode, vbPixels))
        lHeight = (.ScaleY(.ScaleHeight, .ScaleMode, vbPixels))
        ' x e y para centrar
        x = (lWidth - (lWidth / 2)) / 2
        y = (lHeight - (lHeight / 2)) / 2
    End With
    
    Set cMov = New cDLGMov
    With cMov
        ' indicar ruta del video
        .FileName = "c:\video.flv"
        ' indicar donde reproducir y el modo
        Call .openMovieWindow(Picture1.hwnd, "child")
        ' Establecer posición y dimensión
        Call .sizeLocateMovie(x, y, lWidth / 2, lHeight / 2)
        ' play
        Call .playMovie
    End With
  

extractCurrentSizeMovie

Obtener dimensiones del video ( no es el valor real de la película, si no el establecido en la ventana de reproducción). Se puede pasar por referencia los valores (nWidth y nHeight para obtener el ancho y alto), por ejemplo

    With cm
         Dim lWidth As Long, lHeight As Long
        .FileName = "c:\video.flv"
        Call .openMovieWindow(Me.hwnd, "child")
        .playMovie
        ' pasar variables
        Call .extractCurrentMovieSize(0, 0, lWidth, lHeight)
        MsgBox lHeight
        MsgBox lWidth
    End With  

extractDefaultMovieSize

Esta función sirve para devolver el ancho y alto real del video. Si se cambia las dimensiones, la función igual devuelve el tamaño del video real, por mas que se cambie desde el código. Se deben pasar dos variables por referencia para obtener las dimensiones. Ejemplo

        Dim lWidth As Long, lHeight As Long
        .FileName = "c:\video.flv"
        Call .openMovieWindow(Me.hwnd, "child")
        ' cambiar dimensiones
        .sizeLocateMovie 0, 0, 400, 300
        ' reproducir
        .playMovie
        ' Pasar variables para obtener las dimensiones
        Call .extractDefaultMovieSize(lWidth, lHeight)
        ' Muestra el ancho y alto original por mas que se haya cambiado en 'sizeLocateMovie'
        MsgBox lHeight
        MsgBox lWidth  

forwardByFrames , forwardByMS, forwardBySeconds, rewindByFrames, rewindByMs, rewindBySeconds

Para adelantar o rebobinar el video de tres modos: por milisegundos, por segundos o por el número de cuadros que se quiera .

Nota, con la función forwardByMS y FordwardBySeconds, si se quiere adelantar la película pasando como valor 1000 milisegundos o 1 segundo , no se porque motivo la función falla y no adelanta dicho valor. Si se pasa un valor igual o superior a 2000, parece funcionar correctamente. ( Igual para las de rebobinar )

Por ejemplo esto adelanta los cuadros cada 2000 milisegundos y lo coloca en pausa para visualizar cuadro por cuadro

    With cm
        ' avanzar dos segundos
        .forwardByMS 2000
        .pauseMovie
    End With 

Esto adelanta cada 5 segundos

    With cm
        ' avanzar
        Call .forwardBySeconds(5)
        Call .pauseMovie ' detener para visualizar cuadro por cuadro
        Me.Caption = "Posición actual :" & CStr(.getPositionInSec)
    End With

 


getFormatLenght, getFormatPosition

getFormatLenght Devuelve un string con el tiempo total de duración del video (Nota. el valor ya lo devuelve formateado, por ejemplo 00:53 ) Se pueden usar estas funciones para mostrar el valor en un control label o barra de estado dentro de un timer por ejemplo

getFormatPosition: devuelve un string con el valor en la posición actual ( También el valor ya lo devuelve formateado)

Nota. Si se quieren obtener los valores no formateados, es decir retornar el total de segundos, milisegundos o frames de la película, o los valores de la posición actual , usar las funciones :

 


getStatus

Devuelve un string con el estado actual de reproducción para averiguar si se está en Pausa, en Play o detenido: (Paussed, Playing o Stopped.)

 


hideMovie y showMovie

Funciones para ocultar y mostrar la película

 


isMoviePlaying

Devuelve True o False si se está en play

 


checkDeviceReady

Si se encuentra abierto y en reproducción un video, la función devuelve True. Si no la variale Error devuelve el número y luego se puede utilizar checkError, para devolver una descripción del error, por ejemplo "El dispositivo MCI no está disponible". Si no hay error, CheckError devuelve el mensaje "Se ha ejecutado el comando especificado"

 


Otras

 

 


Buscar en Recursos vb con Google