Sucedió que necesité mucho mucho un ocx para reproducir video, pero no cualquier ocx: no debía depender de componentes instalados con anterioridad, lo que yo quería era un ocx que trabajara directamente con las Apis del windows.
Las Apis son funciones del
propio Windows, guardadas dentro de los millones de Dlls en la carpeta de
instalación (especialmente en la System32). Las Apis son casi un millar y lo
hacen todo: obtienen información de los discos y las particiones, las
características del escritorio, la pantalla, los colores, el hardware, los
archivos, manejan multimedia, los periféricos, etc etc.
Rebuscando en internet,
hallé muchos códigos fuentes que llamaban a las Apis que manejan multimedia:
MciExecute, MciSendCommand y MciSendString.
De todas, la mejor es la
MciSendString. La primera tiene opciones un tanto limitadas, la segunda requiere
que se le pasen parámetros en hexadecimal, mientras que la última permite
cadenas fácilmente entendibles.
Cómo funciona
MciSendString:
Esta Api devuelve un valor
tipo Long que es un código por si ocurre un error. Para saber qué error ha
sido se llama a otra Api: mciGetErrorString, la cual no usé para este ocx.
Y fue gracias a estos
ejemplos que aprendí a usar la MciSendString:
Lo primero que se debe hacer
con esta Api es enviarle la ruta del archivo multimedia que se quiere
reproducir:
"vid" es una
variable tipo Long, "rutavideo" es una variable tipo String y contiene
la ruta del archivo, algo así como:
C:\carpeta\ese_archivo.mpg
Lo que primero se hace
es ponerle las comillas al principio y al final.
rutavideo = Chr$(34) & rutavideo & Chr$(34) 'para agregarle las comillas vid = mciSendString("open " & rutavideo & " type mpegvideo alias movie parent " & Picture1.hWnd & " style " & "child ", 0, 0, 0) vid = mciSendString("put movie window at 0 0 336 240", 0&, 0, 0) |
La segunda y tercera líneas le dice que abra el archivo de esa ruta como un video del tipo mpeg (todos los videos que quería reproducir son mpegs) y que lo reconozca como "movie" porque así es más fácil de escribir (¡observad el espacio después de "open"! aquí hay que respetar los espacios!!).
En esta segunda línea también se puede poner simplemente:
vid = mciSendString("open "& rutavideo & type mpegvideo alias movie", 0&, 0, 0)
Pero esto hará que cuando se reproduzca el video lo haga en una ventana Popup, y yo quería reproducirlo dentro de mi control ocx, así que por ello le incluí un Picturebox. La propiedad "Picture1.hWnd" devuelve un número tipo Long que es el identificador del control donde se desea reproducir el video (puede ser un form también), así se evita que aparezca esa ventana Popup.
El resto de las instrucciones es más simple (basta recordar que ya la Api reconoce a nuestro archivo y su ruta como "movie"):
vid = mciSendString("play movie", 0, 0, 0)
vid = mciSendString("pause movie", 0, 0, 0)
vid = mciSendString("resume movie", 0, 0, 0)
vid = mciSendString("stop movie", 0, 0, 0)
Para reproducir desde un tiempo determinado ("tiempo" es una variable tipo Long):
vid = mciSendString("play movie from " & tiempo, 0, 0, 0)
Una muy importante es:
vid = mciSendString("close movie", 0, 0, 0)
Si no se "cierra" nuestro archivo, a la siguiente que se quiera reproducir no aparecerá. Esta instrucción debe estar en el evento Unload del form y cada vez que se quiere reproducir otro video.
Hasta aquí lo básico para hacer un reproductor con MciSendString. Ahora falta meterlo todo en un ocx, al cual llamé "video_rep".
Cómo crear un ocx está en esta web:
http://www.elguruprogramador.com.ar/articulos/creando-un-control-activex-ocx.htm
Lo que hice fué combinar ambas cosas: los comandos del MciSendString dentro de sus respectivas funciones en el ocx para luego "jalarlas" desde una aplicación.
El código fuente de video_rep y unejemplo de cómo usarlo está akí.
Este ocx aún puede mejorarse y adaptarse. Quise hacerlo de modo que pudiera usarse con o sin Slider, bueno, yo sólo lo he probado con Slider.
Y ahora, una excelente web con recopilación de trillones de Apis:
Recomiendo mucho bajar el
ApiViewer y el Api-Guide
No hay comentarios:
Publicar un comentario