J'ai lu la plupart de la documentation sur Gstreamer et comment l'utiliser, mais il y a très peu d'explications sur la combinaison de Gstreamer et d'autres threads liés à gstreamer non . Donc, j'essaie de créer une application simple où, sur un thread, j'ai un pipeline simple avec un élément source connecté directement à un élément de dissipation. J'utilise la bibliothèque "pthread" pour gérer les threads. Ensuite, je crée un autre pthread pour gérer les autres parties du programme. Pour ce faire, j'utilise cet exemple (http://www.thegeekstuff.com/2012/04/create-threads-in-linux/?utm_source=feedburner).Utilisation de Gstreamer avec pthreads
Voici le programme:
#include<gst/gst.h>
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
void* doSomeThing(void *arg)
{
GMainLoop *loop;
printf("\n Completed. \n");
GstElement *pipeline;
loop = g_main_loop_new (NULL, FALSE);
pipeline = gst_parse_launch ("gst-launch v4l2src ! xvimagesink", NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_main_loop_unref (loop);
return NULL;
}
int main(int argc, char *argv[])
{
gst_init (&argc, &argv);
pthread_create(&(tid[0]), NULL, &doSomeThing, NULL);
return 0;
}
Je Compile. Pas d'erreurs Quand je l'exécute, il n'ouvre aucune fenêtre et ne démarre pas le streaming ou quoi que ce soit. J'ai l'impression que c'est comme ça que je crée mon thread pipeline. Donc, en bout de ligne, je n'ai pas une bonne connaissance de Gstreamer et toute aide est très appréciée.
(Notez que dans le code précédent, j'omis la création du second fil puisque le problème est que le pipeline n'est pas en streaming.)
Je n'ai pas un seul iota d'expérience avec pthreads ou gstreamer, ou comment les threads fonctionnent sur les boîtes Unix, mais je ferai remarquer que votre application fonctionne directement à travers cette méthode principale et se termine. Je parierai que les pthreads sont des threads d'arrière-plan et sont détruits dès que le thread principal se termine. Vous devez bloquer cette méthode principale et attendre que tout soit terminé. – Will
Il n'y a pas non plus de raison d'avoir un thread supplémentaire pour votre pipeline GStreamer. GStreamer génère ses propres threads en interne et son API n'est pas bloquante pour la plupart. –
@Florian Zwoch .. Oui, j'ai essayé d'exécuter le pipeline sur le même thread, mais il ne continue pas à partir de là. Donc, autant que je sache, c'est bloquant. Je vois que je ne reçois aucune réponse alors soit ma question est vraiment stupide et pour la première fois personne ne connaît la réponse. Au moins quelqu'un peut-il me diriger vers une bonne documentation sur la combinaison de Gstreamer avec d'autres threads non-Gstreamer? – user3521388