Reproductor de video MPEG-1 en C
Programacion
Esto no es un deja vu, :P este post, es para reproducir un video MPEG-1 :).
Despues de realizar un reproductor MP3 en C, se puede utilizar la librería smpeg (SDL MPEG player library) para lograr reproducir un video MPEG-1. Esta librería fue desarrollada por el equipo Loki, pero desgraciadamente este proyecto fue abandonado por Loki.
Fue realizada para trabajar con la librería SDL (Simple DirectMedia Layer), la cual es una librería utilizada principalmente para el desarrollo de juegos. (En la zona de descargas hay algunos proyectos realizados con SDL). Y pues los requerimientos son los mismos que para el reproductor MP3.
- Compilador de C (personalmente uso el gcc)
- Librería SDL, para desarroladores (En debian: aptitude install libsdl-dev)
- Librería smpeg, para desarrolladores (En debian: aptitude install libsmpeg-dev)
Listo, ahora podemos comenzar, con el siguiente código:
#include < smpeg/smpeg.h > // Libreria SMPEG
#include < SDL/SDL.h > // Libreria SDL
int main (int narg, char *args[])
{
SMPEG *mpeg; // Aqui se guardara el MPEG
SMPEG_Info info; // Informacion del video
SDL_Surface *screen; // Pantalla donde se mostrara el video (SDL)
int vol=0; // Variable de volumen
SDL_Event event; // Evento para capturar la salida del programa
int salir = 0; // Bandera usada para salir del programa
// Se verifica que hayan puesto todos los parametros (archivo y volumen)
if (narg<3)
{
printf ("Usar:\n %s \n\n",args[0]);
exit(1);
}
mpeg = SMPEG_new (args[1], &info, 1); // Se crea el archivo de video
sscanf (args[2],"%d",&vol); // Se verifica el volumen
if (!vol) vol = 50;
SMPEG_setvolume (mpeg,vol); // Se activa el volumen
/* Inicializamos la SDL, con audio y video */
if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) == -1){
printf("No se pudo iniciar el video: %s\n", SDL_GetError());
exit(-1);
}
/* Activamos la ventana del tamanio del video */
screen = SDL_SetVideoMode(info.width,info.height,16, SDL_SWSURFACE);
if(!screen) // Si no se puede crear la ventana, lo mandamos a la mierda
{
printf("No se pudo iniciar el modo de pantalla: %s\n", SDL_GetError());
SDL_Quit();
exit(-1);
}
SMPEG_setdisplay(mpeg, screen,NULL,NULL); /* Mandamos a la ventana que creamos el video, los 2 ultimos NULL son funciones para controlar el video y la actualizacion, pero para este ejemplo no es necesario */
SMPEG_play (mpeg); // Empezamos la reproduccion
while (SMPEG_status(mpeg) == SMPEG_PLAYING && !salir) // Ciclo para el evento de cierre de la ventana
{
SDL_Event event; // Capturamos el evento de cierre de ventana, si sucede -> salimos
if ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_QUIT:
salir = 1;
}
}
}
SMPEG_delete(mpeg); // Borramos el MPEG
SDL_Quit(); // Salimos de la SDL
}
Ahora compilamos (el archivo lo llamé video.c)
Para compilar esto, utilizamos las opciones de compilación de la librería SDL además de agregar a la smpeg (-lsmpeg).
Ejecutamos:
Nota: En caso de tener un error como este:
Este problema solo me sucede con gnome, al probarlo con otros manejadores de ventanas funciona sin problemas.
Posiblemente se deba a esto:
USER PID ACCESS COMMAND
/dev/dsp: thot 4032 F.... esd
$
Nota importante: Para que no se pasen un tiempo a lo pendejo buscando porque no reproduce un video MPEG, verifiquen que la codificacion sea MPEG-1, ya que el MPEG-2 no es aceptado por la libreria ya se supone que esta protegido por ciertos derechos en el país gringo.
Permalink: http://www.mononeurona.org/users/entry/thot/756
Comentblogs:Felicidades Thot, para la comunidad de mononeurona que no sabe programar y que le interesaria aprender a programar en C no podrias subir un pequeño manual con el abc para apreder.
Gracias y sigue asÃ
2007-09-03 11:10:17-05
@saidjose:
Pues se supone que estoy poniendo un "cursito" de C en mi página http://mictlan.utm.mx/~thot el problema es tener un poco de tiempo para explicar de forma entendible temas muy básicos (El abc que tú mencionas), porque si te fijas estoy poniendo temas de "nivel medio". pero deja que me dé un tiempecito (ahora que :) tengo algo) y pues me pongo hacer un tutorial básico de C. Espero que haya buena aceptación de la comunidad (si es que muchos les interesa).
Gracias por el comentario :).
2007-09-04 12:58:08-05
Hola! buenas, la verdad necesisito un poco de ayuda con este tema, en q sistema operativo es preferible que lo realize y q version de C? donde puedo bajar los .dll q necesito? gracias!!!!
2008-04-24 23:49:52-05
Pues en primera lo recomendable es cualquier distribución Linux (como se ve que no tienes experiencia, recomendarÃa una distro basada en Debian como Ubuntu).
Versión de C, pues recomendarÃa alguna versión del gcc (gnu compiler collection) que puedes instalar fácilmente en alguna distribución linux.
Donde bajar dlls?, en linux no necesitarás esas chingaderas, nada más usa el manejador de paquetes de tu distribución gnu/linux (para que no te compliques la vida compilando) y listo.
2008-04-24 23:52:56-05










