Dependências do Elemento GStreamer: Como conectar o playbin ao hlssink?

1

Sou novo no GStreamer e tenho tentado construir alguns pipelines simples usando o gst-launch-1.0. Estou com dificuldade em descobrir quais elementos precisam estar juntos. Por exemplo, desejo transmitir um vídeo webm para uma tag de vídeo HTML5 em um navegador. Para abrir e ler o arquivo, acho que preciso usar o playbin:

gst-launch-1.0 playbin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm ...

Em seguida, para disponibilizar o arquivo, uso o hlssink:

! hlssink max-files=5  playlist-root=http://10.12.9.3/ location=/var/www/html/hlssink.webm

Em seguida, no meu navegador, uso a tag de vídeo:

<video src="http://10.12.9.3/hlssink.webm" controls>

Portanto, este pipeline não inicia e recebo o seguinte erro:

WARNING: erroneous pipeline: could not link playbin0 to hlssink0

Isso me diz que não posso vincular esses dois elementos. Tudo bem, mas onde procurar os outros elementos que preciso incluir em meu pipeline para fazer isso funcionar?

Obrigado antecipadamente.

    
por Przemek Lach 03.08.2014 / 03:25

1 resposta

0

Eu acho que você deveria parar e ler um pouco a documentação do gstreamer para entender como ela funciona. O GStreamer é uma estrutura para construir um gráfico para processamento de dados. Você pode encontrar o manual aqui: link

O Playbin é um elemento especial (um bin) e irá montar um pipeline interno para você. O Playbin não expõe nenhum bloco de links, pois ele é projetado para criar um pipeline completo de reprodução, e é por isso que você não pode vinculá-lo ao hlssink.

Você pode usar outros elementos para criar um pipeline para transcodificar sua entrada do webm no hlssink, por exemplo, você pode usar uridecodebin que é outro bin que criará automaticamente um pipeline de decodificação para qualquer mídia usada (desde que você tenha o direito plugins para isso). Algo como:

gst-launch-1.0 uridecodebin uri=<youruri> name=decbin ! queue ! videoconvert ! x264enc ! tsmux name=muxer ! hlssink decbin. ! queue ! audioconvert ! faac ! muxer.

Eu não testei, mas algo assim deve funcionar para converter sua entrada para mpegts usando H264 e AAC, por exemplo, e passar os dados para o hlssink.

Para verificar quais elementos você possui em seu sistema, use a ferramenta gst-inspecionar-1.0. Ele irá listar todos os elementos se você não der um argumento ou dar detalhes sobre um elemento em particular se você der um, como:

gst-inspect-1.0 hlsssink

EDIT: consertar o pipeline que você propôs nos comentários

gst-launch-1.0 uridecodebin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm name=decbin ! queue ! videoconvert ! x264enc ! mpegtsmux name=muxer ! hlssink max-files=5 playlist-root=10.12.9.3 location=/var/www/html/hlssink decbin. ! queue ! audioconvert ! avenc_aac ! muxer.
    
por 03.08.2014 / 19:10