Comment mettre en œuvre une vidéo widget Qt qui s'appuie sur GStreamer?
Je veux utiliser Qt pour créer une interface utilisateur graphique simple application qui permet de lire un fichier vidéo local. Je pourrais utiliser Phonon qui fait tout le travail en coulisses, mais j'ai besoin d'avoir un peu plus de contrôle. J'ai déjà réussi à mettre en œuvre un pipeline GStreamer à l'aide de la decodebin et autovideosink éléments. Maintenant, je veux utiliser un widget Qt pour le canal de sortie.
Quelqu'un a déjà réussi en faisant cela? (Je suppose qu'il sont basé sur Qt, lecteurs vidéo, qui s'appuient sur GStreamer.) Quelqu'un peut me pointer dans la bonne direction sur la façon de le faire?
Remarque: Cette question est similaire à ma précédente question posée sur la façon de connecter Qt avec l'arrivée d'un flux RTP. Cela semblait être assez difficile. Cette question sera plus facile de répondre, je pense.
Mise à jour de 1
Patrice de la proposition de recourir à la libVLC est très utile déjà. Voici un peu plus propre version du code trouvé sur VLC site web:
Exemple pour Qt + libVLC.
Cependant, ma question demeure: Comment puis-je connecter GStreamer pour un widget Qt?
Mise à jour 2
Après quelques essais j'ai fini avec cet échantillon de travail. Il dépend GstWidget.h et GstWidget.cpp de mon propre petit GstSupport de la bibliothèque. Toutefois, prenez note que l'est est actuellement testé sur la version Mac de l'intervalle Qt.
Update 2
sont cassés. Si possible, pouvez-vous corriger s'il vous plaît?Fixe.
Merci. BTW, pouvez-vous m'aider la résolution d'un problème similaire ici?
OriginalL'auteur StackedCrooked | 2009-12-09
Vous devez vous connecter pour publier un commentaire.
Connecter Gstreamer avec votre QWidget, vous avez besoin pour obtenir le handle de la fenêtre à l'aide de
QWidget::winId()
et de vous passer àgst_x_overlay_set_xwindow_id();
Rugueux exemple de code:
Aussi, vous voulez que votre widget d'être soutenu par une fenêtre native qui est atteint par la création de la
Qt::AA_NativeWindows
attribut au niveau de l'application ou de l'Qt::WA_NativeWindow
attribut sur le widget.OriginalL'auteur Gregory Pakosz
Depuis Phonon est basé sur gstreamer, l'endroit à regarder pour les détails, c'est l'Phonon arborescence source (disponible ici: http://gitorious.org/phonon/import/trees/master). Pour un lecteur vidéo, vous êtes plus susceptible d'avoir besoin d'un affichage vidéo widget, comme le gstreamer/videowidget.h (rpc) qui, à son tour utilisé le X11 moteur de rendu (gstreamer/x11renderer.h, rpc). L'évier utilisé est le xvimagesink, pour retomber sur le ximagesink si le premier ne peut pas être créé.
Le truc de base, c'est de superposer la VideoWidget avec la vidéo de sortie. Le X11 poignée nécessaires pour ce faire sont extraites à l'aide de la QWidget::winId méthode, qui est une plate-forme spécifique (comme les éviers, donc pas trop grave).
Aussi, si la superposition est pas disponible, un QWidgetVideoSink est utilisé, qui convertit les images de la vidéo en images individuelles pour la WidgetRenderer classe. Cette classe, à son tour, rend l'image actuelle disponible comme une QImage objet, prêt pour n'importe quel type de traitement.
Donc, pour répondre à votre question - utiliser des superpositions (comme X11Renderer) ou extraire des QImages à partir du flux vidéo (comme QWidgetVideoSink).
OriginalL'auteur e8johan
VLC version est basé sur QT, lecteur vidéo (depuis la version 0.99). Il permet aussi de diffuser ou de lire un flux de données: Vous pouvez trouver toutes les informations dont vous avez besoin ici: http://wiki.videolan.org/Developers_Corner. Vous devez seulement créer une instance du joueur et de l'associer à un widget. Ensuite, vous avez le plein contrôle sur le joueur.
J'ai déjà testé (sur Linux et Windows) jouer de la musique locale et des fichiers vidéo et il fonctionne très bien.
Essayer et voir par vous-même.
Espère que ça aide.
Edit:
Il semble que si vous souhaitez utiliser VLC, vous avez besoin de l'écrire ou de le trouver (je ne sais pas si il en existe un) une GStreamer codec, comme expliquer sur le videolan wiki. Je pense que je le ferais.
Je parle de la libVLC. Vous avez un exemple ici: wiki.videolan.org/LibVLC_SampleCode_Qt
merci, voir mon edit.
OriginalL'auteur Patrice Bernassola