Computer Science is no more about computers than astronomy is about telescopes. Edsger W. Dijkstra

Reproductor de video MPEG-1 en C

2007-09-01 19:29:27-05

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 < stdio.h >    // Libreria standar de entrada/salida en C
#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)

$ gcc -o video video.c `sdl-config --cflags` -lsmpeg `sdl-config --libs`

Para compilar esto, utilizamos las opciones de compilación de la librería SDL además de agregar a la smpeg (-lsmpeg).

Ejecutamos:

$ ./video archivo.mpg 50

Nota: En caso de tener un error como este:

ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave

Este problema solo me sucede con gnome, al probarlo con otros manejadores de ventanas funciona sin problemas.

Posiblemente se deba a esto:

$ fuser -v /dev/dsp
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


Comments Comentblogs:
1.- saidjose saidjose wrote:

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
2.- Thot Thot wrote:

@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
3.- Jorge Jorge wrote:

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
4.- thot thot wrote:

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

New Comentblog

Captcha



Login



Remember me:
thot
Amante de la libertad y por lo mismo un ferviente partidario del software libre.
linux politica programming software libre hacking
Powered by:
Despabilando la MonoNeurona.org
Livechat

<-Nombre
jairo wrote:
cual es el otro blog de thot
on 9/8/08

souf wrote:
está vivo... ¡VIVO!
on 10/6/08

souf wrote:
¡funciona!
on 10/6/08

souf wrote:
yes
on 10/6/08

thot wrote:
simón, s1mo yo creo que sí. Hay que ponerse de acuerdo.
on 6/5/08

s1m0 wrote:
que onda thot ps el aarkerio que tiene ganas de un curado de melon jaja ps ahora que vayamos a teotihuacan jaja como vez??
on 2/5/08

teosho wrote:
que tal alocardio_tut
on 26/4/08

aarkerio wrote:
Viendo si el livechat sirve
on 5/4/08

gmarin38 wrote:
q onda ponte chingon ya falta poco tiempo para tu taller :P
on 10/10/07

norcorp wrote:
guayabin que paso como has estado?
on 25/8/07

¿Qué estuve haciendo?
Ni pedo, metí mejor imágenes del código.
2 weeks, 5 days ago
no puedo publicar la segunda parte de la intro a JSF's
2 weeks, 5 days ago
Por el modo "paranoico" del filtrado en el editor de la mononeurona...
2 weeks, 5 days ago
Estaría chido que Centauro tuviera GeSHi
3 weeks, 5 days ago
Preparando introducción a JSF's para la mononeurona
on 10/8/08
Muy buen libro por cierto. Da asco ver las porquerías que hacen algunos curas.
on 5/8/08
Ah caray! apenas lo presentan? y yo la lo leí :|
on 5/8/08
Algún otro mononeurón recibe errores de postgres cuando entra a la mononeruona?.
on 5/8/08
Es como si dijeras. La mayoría de personas se comportan como primates enjaulados..
on 4/8/08
Es como si dijeras. La mayoría de personas se comportan como primates enjaulados..
on 4/8/08
Galerias
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2008.