Pour vous connecter à Gstreamer avec Qt afin de jouer un gstreamer vidéo dans le Widget Qt
J'ai essayé d'utiliser phonon pour lire la vidéo, mais ne pouvait pas réussir. Hors fin venu à connaître à travers l'intervalle Qt forums que même la dernière version de Qt ne prend pas en charge phonon. C'est quand j'ai commencé à utiliser Gstreamer.Des suggestions quant à la façon de connecter le Gstreamer fenêtre avec le widget Qt?Mon but est de jouer une vidéo en utilisant Gstreamer sur le widget Qt.Alors, comment puis-je relier le gstreamer fenêtre et le widget Qt?
Je réussis à obtenir l'Id du widget par winid().
En outre, avec l'aide de Gregory Pakosz, j'ai ajouté les dessous de 2 lignes de code dans mon application
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());
Toutefois ne suis pas en mesure de relier le widget Qt avec le gstreamer de la fenêtre vidéo.
C'est ce que mon exemple de code devrait ressembler à :-
int main(int argc, char *argv[])
{
printf("winid=%d\n", w.winId());
gst_init (NULL,NULL);
/* create a new bin to hold the elements */
bin = gst_pipeline_new ("pipeline");
/* create a disk reader */
filesrc = gst_element_factory_make ("filesrc", "disk_source");
g_assert (filesrc);
g_object_set (G_OBJECT (filesrc), "location", "PATH_TO_THE_EXECUTABLE", NULL);
demux = gst_element_factory_make ("mpegtsdemux", "demuxer");
if (!demux) {
g_print ("could not find plugin \"mpegtsmux\"");
return -1;
}
vdecoder = gst_element_factory_make ("mpeg2dec", "decode");
if (!vdecoder) {
g_print ("could not find plugin \"mpeg2dec\"");
return -1;
}
videosink = gst_element_factory_make ("xvimagesink", "play_video");
g_assert (videosink);
/* add objects to the main pipeline */
gst_bin_add_many (GST_BIN (bin), filesrc, demux, vdecoder, videosink, NULL);
/* link the elements */
gst_element_link_many (filesrc, demux, vdecoder, videosink, NULL);
gst_element_set_state(videosink, GST_STATE_READY);
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(videosink), w.winId());
/* start playing */
gst_element_set_state (bin, GST_STATE_PLAYING);
}
Pourriez-vous expliquer plus en détail sur l'utilisation de gst_x_overlay_set_xwindow_id() wrt mon contexte?
Je pouvais obtenir aucune idée comment je peux intégrer gstreamer sous Qt?
Merci de m'aider à résoudre ce problème
J'ai essayé d'utiliser phonon pour lire la vidéo, mais ne pouvait pas réussir. Oflate venu à connaître à travers l'intervalle Qt forums que même la dernière version de Qt ne prend pas en charge phonon. C'est quand j'ai commencé à utiliser Gstreamer.Des suggestions quant à la façon de connecter le Gstreamer fenêtre avec le widget Qt?
OriginalL'auteur raggio | 2010-02-12
Vous devez vous connecter pour publier un commentaire.
http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/tests/examples/overlay
a un minimum de Qt exemple.
Dans votre code, vous devriez probablement mettre l'ID de fenêtre avant de faire le changement d'état prêt (je ne suis pas sûr à 100% c'est le problème).
Pour la lecture, vous devez idally utiliser le playbin2 élément, quelque chose comme ça (non testé):
.. vérifier les messages comme erreur/statechanges/tags/eos sur le pipeline/playbin bus
OriginalL'auteur Tim
Je viens de faire la même chose à l'aide de python. Ce que j'avais à faire était de se connecter à "sync-message de::l'élément' sur le bus et écouter un message appelé "préparez-x-window-id" (ignorez le nom qu'il fonctionne sur toutes les plates-formes, et pas seulement X11), envoyé après la vidéo de l'évier de l'installation. Il vous envoie le lavabo à l'intérieur de ce message, et c'est là que vous transmettez à l'id de fenêtre.
OriginalL'auteur bparker
L'exemple de code donné ci-dessus lien GStreamer fenêtre de vidéo QtWidget fourni les éléments sont reliés correctement.
OriginalL'auteur Midhat
Un projet d'emballage gstreamer utilisable en C++/Qt les classes, y compris un exemple de code:
http://code.google.com/p/qbtgstreamer/
Je ne sais pas à propos de l'approche directe, comme je ne suis pas familier avec gstreamer.
OriginalL'auteur drahnr