Skip to content

Gstreamer – Conhecendo mais ainda – Parte 1

13 janeiro 2011

Vamos por a mão na massa, já falei como fazer um simples player usando Gstreamer, usando shell e pipes, agora vamos fazer o mesmo, mas usando uma linguagem de programação séria. Brincadeira, eu adoro bash, mas alguém imagina fazer isso (Clique para ampliar) com pipes em shell?

O Objetivo a partir de agora é entrar cada vez mais no Framework Gstreamer, e não em particularidades de linguagens específicas.

Bindings

O Gstreamer tem ports para várias linguagens: Python, Perl, .Net, C++, Java, Ruby, etc. Eu vou usar Perl nos exemplos.

Resumo

Entender o básico do Framework agora se torna necessário para fazermos uma aplicação, portanto vou passar por alguns conceitos do Gstreamer.

Eu recomendo fortemente para quem está interessado em Gstreamer, que leia esse manual, nele é criada uma aplicação em C usando Gstreamer, porém, mesmo que você não conheça a fundo C, dá pra se ter uma idéia de como funciona cada parte do Framework.

Primeiramente o Gstreamer usa uma estrutura de desenvolvimento muito semelhante ao GTK+. No tutorial citado acima você encontrará mais da relação do Gstreamer com a Glib e o Gobject.

A grande vantagem de se usar esse Framework é que ele já vem com certas funcionalidades:

  • Plugins com acesso direto a memória
  • Uso de threads gerenciadas pelo Kernel
  • Acesso a recursos de aceleração de Hardware de forma transparente
  • Estrutura core/plugins, o core do Framework é separado de seus plugins, permitindo carregar somente o que for necessário para a aplicação.

Conceitos básicos

Elements

Um element (elementos) é a estrutura mais importante do Framework, é a unidade básica do Framework, é através de uma grupo de elementos linkados que o fluxo de dados irá percorrer sua aplicação Gstreamer. Cada Element funciona com uma ou mais entrada de dados (sources), os dados são processados e enviados a uma ou várias saídas (sinks). Ao grupo de elementos linkados se dá o nome de Pipeline.

Exemplo de um element:

Pads

Pads são os objetos de Entrada (source) e saída (sink) dos elements. São através dos Pads que ligamos um element ao outro. Uma analogia aos Pads, é que eles são os “plugs” ou “ports” dos elements. O link criado entre Pads de elements diferentes tem que ser compatíveis entre si, senão a ligação não poderá ser feita. A negociação dessa ligação é chamada de caps negociation.

Bins

Um Bin é um conjunto de Elements, portanto, podemos dizer que um conjuntos de Elements, linkados por seus Pads, pode ser agrupado num único Bin. Dessa forma, você pode controlar um Bin como se fosse um único grande Element, inclusive adicionando Pads ao seu Bin. Esse recurso será bem útil para grandes estruturas de pipelines, fazendo com que seu programa tenha um nível menor de complexidade.

Os Bins também irão repassar todas as mensagens (Erro, Status, etc) de cada um de seus Elements inclusos.

Pipelines

Um Pipeline é um grande Bin. Ele é o resultado dos links criados pelos vários Elements ou Bins do seu programa, agindo como uma estrutura única. Ele tem um estado (PLAYING ou PAUSED) que faz o controle do fluxo de dados que irá passar pelos Elements ou Bins criados. Uma vez iniciados, uma thread será gerada e só será parada por sua intervenção direta ou quando terminar o fluxo de dados.

Exemplo de um Pipeline:

 

Continua…

PS: Realmente esse post tomou dimensões que eu não esperava, portanto acho melhor dividi-lo em partes, aguardem cenas do próximo capítulo.😀

From → Uncategorized

2 Comentários
  1. Joao Paulo permalink

    Nossa voce nao faz ideia de como me ajudo essa sua postagem. Eu tava completamente perdido sobre tudo. Obrigado mesmo.

    • Que bom cara, ainda tenho que arrumar tempo de continuar a escrever minha saga pelo gstreamer ;D

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: