Pergunta

Eu quero criar um Qt widget que pode jogar de entrada RTP córregos onde o vídeo é codificado como H264 e não contém áudio.

Meu plano básico para a implementação é a seguinte:

  • Criar um MediaSource objeto Phonon (tipo Stream).
  • Conectar-lo com um QIODevice subclasse que fornece os dados
  • Obter os dados de vídeo usando:
    • JRTPLIB biblioteca cliente
    • GStreamer gstrtpbin plugin. Este plugin cuida depayloading os pacotes e decodificação do vídeo. Talvez isso melhora as chances de que Phonon irá reconhecer os dados.

O meu ambiente:

  • Ubuntu 9.10
  • Qt 4.6

As minhas perguntas:

  • É a minha abordagem uma boa? Talvez eu estou com vista para uma solução mais óbvia ou simples?
  • Atualmente estou enfrentando esse problema: ao tentar reproduzir o vídeo transmitir o estado das voltas mediaobject para ErrorState com errorType FatalError. Alguém pode me dizer o que estou fazendo de errado?

Editar
Uma solução que eu encontrei está usando libvlc em combinação com Qt, o que eu aprendi sobre nesta fio . Aqui está um código de exemplo para os interessados. Eu ainda estou procurando uma solução baseada em Phonon.
Idealmente, eu só precisa fornecer um arquivo SDP e trabalho é feito.

Foi útil?

Solução

Eu era capaz de fazê-lo funcionar usando a solução libvlc. Eu não posso garantuee que este é o melhor solução mas como eu simplesmente parou de olhar depois disso.

Aqui está um link à amostra libvlc .

Outras dicas

A forma como eu entendo Phonon funciona, pelo menos no Windows é que QT fornece uma phonon backend plugin para DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) e GStreamer no seu caso. Então você teria que quer obter ou escrever seu próprio filtro DirectShow que pode aceitar fluxos RTP como uma fonte. DirectShow cuida da decodificação, e Phonon irá cuidar da renderização.

Então, se as obras de back-end, o código do aplicativo é tão simples como:

        Phonon::MediaObject *media = new Phonon::MediaObject();
        Phonon::VideoWidget *video = new Phonon::VideoWidget();
        Phonon::createPath(media, video);
        media->setCurrentSource(source);
        media->play();

Parece que as mentiras problema com o GStreamer backend aceitar RTP como uma fonte. você pode reproduzir essa fonte em standalone GStreamer sem problemas?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top