para se programar um player

Iniciado por wendellxp, 05 de Maio de 2011, 01:27

tópico anterior - próximo tópico

wendellxp

Olá pessoal,

preciso programar um player em c/c++ para linux que leia pela menos os tipos de arquivos mais comuns.
pesquisando um pouco eu cheiguei ao ffmpeg (http://ffmpeg.org/download.html) + SDL (http://ffmpeg.org/download.html).

Estou com um certo problema na instalação do ffmpeg: gera os libs e as includes na pasta /usr/local, mas quando utilizo as funções diz que elas não foram declaradas, mesmo com as libs setadas certinho.

Para que eu fuja dessa dor de cabeça, alguem já trabalhou com isso antes e pode me recomendar uma biblioteca mais fácil para configuração e utilização ou quem sabe me dar uma  mao no ffmpeg?


wendellxp


fpissarra

#2
Citação de: wendellxp online 05 de Maio de 2011, 01:27
Olá pessoal,

preciso programar um player em c/c++ para linux que leia pela menos os tipos de arquivos mais comuns.
pesquisando um pouco eu cheiguei ao ffmpeg (http://ffmpeg.org/download.html) + SDL (http://ffmpeg.org/download.html).

Estou com um certo problema na instalação do ffmpeg: gera os libs e as includes na pasta /usr/local, mas quando utilizo as funções diz que elas não foram declaradas, mesmo com as libs setadas certinho.

Para que eu fuja dessa dor de cabeça, alguem já trabalhou com isso antes e pode me recomendar uma biblioteca mais fácil para configuração e utilização ou quem sabe me dar uma  mao no ffmpeg?

Se a idéia é tocar uma música através de código C/C++ SDL pode ser uma solução simples. Dê uma olhada no fragmento de código abaixo:

#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>

#define SAMPLE_RATE 44100
#define CHANNELS 2
#define BUFFER_SIZE 4096

MiX_Music *pmm = NULL;

void UnloadAndStopMusic(void);

int LoadAndPlay(const char *musicfilename)
{
 if (Mix_OpenAudio(SAMPLE_RATE, AUDIO_S16SYS, CHANNELS, BUFFER_SIZE))
 {
   return 0; /* 0 = erro */
 }

 if ((pmm = Mix_LoadMUS(musicfilename)) == NULL)
 {
   return 0; /* 0 = erro */
 }

 atexit(UnloadAndStopMusic);

  /* -1 significa repetição infinita.
      Qualquer valor acima de 0 é o nº de vezes que
      a música será tocada. */
 Mix_PlayMusic(pmm, -1);

 return 1; /* 1 = ok */
}

void UnloadAndStopMusic(void);
{
 if (pmm)
 {
   Mix_HaltMusic();
   Mix_FreeMusic(pmm);
   pmm = NULL;
 }
}


É simples assim. Mas você deve instalar as libs correspondentes para suportar MP3 e OGG. Para fins de desenvolvimento instalar libsdl-mixer1.2-dev resolve, mas se for distribuir, é necessário instalar libogg, libvorbis (para OGG) e libsmpeg e libmikmod (para MP3).

Não esqueça de adicionar as libs no gcc: -lSDL -lSDL_mixer

Quanto à seleção do tipo de arquivo, SDL_mixer vai descobrir a partir da extensão do arquivo.

Dê uma olhada na documentação de SDL_mixer: http://www.libsdl.org/projects/SDL_mixer/

fpissarra

#3
Se quiser, eis um pequeno teste que fiz (já tem algum tempo) com OpenGL, SDL e SDL_mixer.

http://www.4shared.com/file/OfIahvmj/teste_gltar.html

Leia o readme.txt e compile com o Makefile.x11 (Linux) ou Makefile.mingw (Windows). As DLLs que precisam ser distribuídas, para Windows, estão no pacote. As libs (para Windows) não estão lá pq uso o mingw32 do próprio Linux para gerar o executável para Windows (raramente faço isso!).