Biblioteca — VLC

Execução de mídias (sons e vídeos)

Willian Pessoa
Reflexão Computacional
4 min readMay 27, 2019

--

VLC, libvlc e python-vlc

O VLC é um reprodutor e transmissor multimídia de código aberto. A libvlc é uma biblioteca — conjunto de funcionalidades disponíveis para uso — escrita em C++. O pacote python-vlc é um binding (tradutor) da biblioteca libvlc para o Python pelo módulo vlc.

Instalação do python-vlc

O python-vlc não faz parte dos módulos padrões do Python. Ele precisa ser instalado através do Python Installer Packages (PIP). O PIP normalmente é instalado junto com o Python.

Para verificar se você tem o pip instalado, abra um terminal (bash no Linux ou cmd no Windows) e digite:

Se o PIP estiver instalado, o comando gerará uma saída semelhante a seguinte:

Preste atenção na versão do Python no final da mensagem — estamos utilizando o Python 3.

Para instalar o python-vlc, execute o seguinte comando:

Você receberá uma mensagem exibindo o download do pacote e no final terá a confirmação de que o pacote foi instalado.

Caso apareça alguma mensagem envolvendo “permissão negada”, faça o seguinte:

  • Se Windows: abra o cmd como administrador — clique com o botão direito e selecione “executar como administrador” — e execute o comando novamente.]

Nota: Também é necessário instalar o reprodutor de vídeo VLC.

  • Se Linux: execute o comando como super usuário

Importando o módulo vlc

Para utilizar um módulo no Python, utilizamos o comando import (importar) seguido do nome do módulo que queremos importar. Após a importação, já podemos utilizar todos os objetos e funções que o módulo disponibiliza.

O módulo vlc é importado da seguinte maneira:

MediaPlayer e MediaListPlayer

Os principais objetos do módulo vlc que podemos utilizar é o MediaPlayer e o MediaPlayerList, ambos são utilizados para a reprodução de músicas e vídeos.

O primeiro é criado para reproduzir uma única mídia. O outro, é para reprodução de uma lista de mídias.

MediaPlayer

Para criarmos um objeto MediaPlayer, precisamos passar o nome (absoluto ou relativo) como argumento do construtor.

Veja o exemplo a seguir em que criamos um objeto MediaPlayer com um arquivo mp3 e o reproduzimos.

Código importando módulo vlc e reproduzindo o arquivo “kda.mp3”
Execução do código acima.

Tente reproduzir o código acima no seu computador com algum outro arquivo mp3 localizado na sua máquina. Para tocar somente colocando o nome do arquivo como fizemos acima, é preciso que o arquivo esteja na mesma pasta do código.

Perceberemos que o comandoprint("A música ainda está tocando") foi executado antes da música terminar de tocar. Isso acontece porque o VLC reproduz as mídias de forma assíncrona (fora de sincronia).

A característica acima nos permite uma interação com a mídia em exibição, podendo obtermos informações e aplicarmos novos comandos durante a reprodução da mídia.

“Mas eu queria que a música toda tocasse”

Nesse caso, devemos criar nosso próprio mecanismo de sincronia de forma a “segurar o código” durante a execução da mídia. Uma forma de fazer isso é utilizando o comando while:

“Segurando o código” pelo while com a condição “enquanto ainda estiver tocando”.
Execução do código acima.

“ E para tocar vídeos?”

Não muda nada. Basta utilizar o nome de uma mídia que seja um vídeo.

Por exemplo, trocarei o nome da mídia para o um vídeo.

Exemplo anterior, mas com o vídeo “kda.mp4”.
Execução do código anterior.

Nota: a música e vídeo utilizamos foi o K/DA — POP/STARS — vídeo promocional do evento K/DA do League of Legends.

“E o que mais podemos fazer?”

O MediaPlayer possui diversos métodos, os quais podem ser encontrados diretamente na documentação do PythonVLC sobre o MediaPlayer.

Descreveremos alguns métodos que consideramos importantes:

  • play() — inicia reprodução da mídia;
  • is_playing() — retorna True se a mídia está tocando e False se não;
  • pause() — pausa a reprodução da mídia e mantém a posição/tempo atual;
  • stop() — interrompe a execução da mídia e retorna para posição/tempo inicial;
  • get_lenght() — retorna o tempo total da mídia atual em milissegundos (ms);
  • get_time() — retorna o tempo atual da mídia em milissegundos (ms);
  • set_time(tempo) — altera o tempo atual da mídia para o tempo passado como argumento (em milissegundos);
  • get_position() — retorna a posição da mídia em porcentagem — entre 0.0 e 1.0;
  • set_position(posição) — altera a posição da mídia conforme posição passada como argumento — entre 0.0 e 1.0.

--

--