2015-09-16 1 views
0

je croix compilé Qt pour la pi framboise avec le soutien QtMultimedia et Gstreamer1.0 avec la plate-forme XCB et eglfsComportement étrange d'application Qt sur Raspberry Pi

Maintenant, si je lance une application pour jouer une plate-forme en utilisant la vidéo eglfs il fonctionne et joue de la vidéo et si j'utilise plate-forme xcb pour l'application, il donne une erreur que videosink ne fonctionne pas

Alors, comment puis-je lire la vidéo en utilisant des plugins xcb?

Les erreurs que je reçois sont

xvimagesink xvimagesink.c:1443:gst_xvimagesink_get_xv_support:<xvimagesink1> error: Could not initialise Xv output 

xvimagesink xvimagesink.c:1443:gst_xvimagesink_get_xv_support:<xvimagesink1> error: No port available 

Je travaille sur Raspbian Wheezy ARMv7

+0

ces paquets peuvent être nécessaires - libx11-xcb1 et libx11-XCB-dev, vérifier également qtbase/src/plugins/plates-formes/XCB/README – nayana

+0

J'ai installé tous les paquets requis – haresh

+0

Avez-vous essayé d'exécuter une application exemple Qt pour xcb gstreamer? pouvez-vous poster les messages d'erreur que vous obtenez après avoir exécuté votre application? vous pouvez essayer d'exécuter votre application avec une variable exportée: 'GST_DEBUG = 3./your_app' cela activera le débogage de gstreamer. Je ne sais pas si c'est possible mais vous pouvez aussi tester gstreamer en lançant 'gst-launch-1.0 videotestsrc! autovideosink' – nayana

Répondre

0

Ok je composerai une réponse au lieu de faire des tonnes de commentaires.

Vous pouvez essayer de changer le code source pour le QGstreamerVideoWidget here Dans cette fonction, vous voyez xvimagesink.

Intéressant est qu'il existe déjà à fallback ximagesink si xvimagesink ne fonctionne pas .. Je voudrais essayer autovideosink qui devrait toujours travailler ..

void QGstreamerVideoWidgetControl::createVideoWidget() 
{ 
    if (m_widget) 
     return; 

    m_widget = new QGstreamerVideoWidget; 

    m_widget->installEventFilter(this); 
    m_windowId = m_widget->winId(); 

    /// --- CHANGED HERE (xvimagesink -> autovideosink) ----- 
    m_videoSink = gst_element_factory_make ("autovideosink", NULL); 
    if (m_videoSink) { /// --- maybe this if is not needed anymore --- 
     // Check if the xv sink is usable 
     if (gst_element_set_state(m_videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) { 
      gst_object_unref(GST_OBJECT(m_videoSink)); 
      m_videoSink = 0; 
     } else { 
      gst_element_set_state(m_videoSink, GST_STATE_NULL); 

      g_object_set(G_OBJECT(m_videoSink), "force-aspect-ratio", 1, (const char*)NULL); 
     } 
    } 

    if (!m_videoSink) 
     m_videoSink = gst_element_factory_make ("ximagesink", NULL); 

    qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership 
} 

Ou peut-être son nouveau QGstreamerVideoWindow here remplacer xvimagesink avec autovideosink, peut-être aidera.

Je ne sais pas ce qui est utilisé exactement par votre code ..

+0

merci pour l'aide.J'ai regardé dans les deux fichiers et il utilise xvimagesink donc je pense que je dois le changer en autovideosink mais alors je dois construire à nouveau Qt à partir de la source.So je vais vérifier et signaler – haresh

+0

@haresh je voudrais d'abord essayez d'exécuter gstreamer pipeline avec l'outil gst-launch pour vérifier si cela fonctionne avec autovideosink .. vérifiez si vous avez quelque part le binaire gst-launch-1.0 et exécutez 'gst-launch-1.0 videotestsrc! autovideosink' aussi vous pouvez vérifier avec GST_DEBUG mettre à une valeur plus élevée quel type d'élément a été choisi pour autovideosink (l'autovideosink essaye plusieurs puits et choisit ce qui fonctionne). Dans le pire des cas, vous pouvez coder un exemple d'application en C avec l'utilisation de bibliothèques gstreamer pour créer le pipeline mentionné. – nayana

+0

: J'ai essayé ximagesink et autovideosink mais ça n'a pas marché et j'ai essayé glimagesink et ça a marché.Enfin, il est en train de lire les vidéos mais je reçois quelques avertissements liés à jack.so Je sélectionne cela comme une réponse à la question, mais il n'est pas capable de gérer les vidéos HD si vous pouvez aider dans ce problème.Toujours merci pour votre aide. – haresh