Jogar fluxo de vídeo RTP usando Qt?
-
13-09-2019 - |
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:
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.
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?