La lecture de l'audio et de la vidéo avec un Pipeline Gstreamer (Python)
Est-il un moyen de faire un pipeline qui permettra de jouer n'importe quel fichier vidéo (qui contiennent de l'audio aussi)? J'ai essayé de relier les éléments comme:
filesrc -> decodebin
avec
queue -> audioconvert -> autoaudiosink
et
queue -> autovideoconvert -> autovideosink
Cela pose deux problèmes:
- Un
queue
ne peut pas être lié à unautovideoconvert
. - Je n'ai aucune idée de comment mettre en œuvre un pad avec
"pad-added"
cas, en particulier lorsque le pipeline prend en charge l'audio et la vidéo.
Je voudrais savoir comment faire cela sans la nécessité pour gst.parse_launch
. Aussi, je veux la pieline de travailler avec n'importe quel format je jeter à elle (comme playbin), mais ne peut pas utiliser un playbin que j'ai besoin d'associer d'autres éléments (level
et volume
).
Sinon, est-il un moyen de connecter des éléments (tels que des level
) à un playbin?
OriginalL'auteur D K | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
J'ai construit un exemple lecteur vidéo qui permet d'utiliser les éléments que vous avez décrit.
Il devrait vous montrer comment connecter les plaquettes à l'eachother dynamiquement.
new-decoded-pad
est obsolète. Comment puis-je utiliserpad-added
?Merci pour le heads-up, j'ai mis à jour le code mais je n'ai pas eu le temps de tester encore, il devrait être très semblable, mais - juste une autre méthode.
Il fonctionne, mais vous devez mettre
if not sink_pad.is_linked():
avant de lier les plaquettes. Aussi, j'ai testé avec juste de l'audio, et il ne joue jamais. Savez-vous pourquoi?Il se pourrait que la partie vidéo de la canalisation est suspendue. Vous pouvez passer le lien des vidéos et des éléments audio en fonction de si le fichier source contient de l'audio ou de la vidéo.
J'ai décidé d'utiliser
Discoverer
pour déterminer si oui ou non les médias contient la vidéo, et de créer une vidéo ou de l'audio pipeline en fonction du résultat. Je vais marquer cette question comme résolue, mais si il ya une meilleure façon de créer une dynamique de pipeline comme cela, s'il vous plaît laissez-moi savoir. Merci à tous pour votre aide!OriginalL'auteur joar
queue
n'est pas un élément source, vous devez êtreuridecodebin
oudecodebin
ou quelque chose) des nouvelles que l'élément source.Ceci est un exemple de pipeline dans le
gst-launch
format.cela signifie que dans le pipeline, il est
uridecodebin
- Un décodage bin, capable de décoder ce que le fichier source est compatible avec GStreamer, avec lauri
propriété définie àfile:///home/joar/Dropbox/Music/04 - Deadmau5 - Clockwork (Jonas Steur Remix).mp3
.audioconvert
- Convertit les données audio entre différents formatsautoaudiosink
Si nécessaire, vous pouvez ajouter un
queue
élément entre leuridecodebin
et laaudioconvert
.Mise à jour
Je peux faire ce que vous décrivez à l'aide de la tps-commande de lancement du
Je vois, j'ai une idée sur comment résoudre ce problème, malheureusement je n'ai pas le temps pour l'instant. Merci d'ajouter un commentaire après ce que je reçois une notification, puis je vais répondre dès que je suis devant mon PC.
Tout droit, ajout d'une nouvelle section, si vous n'utilisez pas le tps de lancement du format, dites-moi et je vais vous aider à effectuer avec
gst.element_factory_make()
.Pouvez-vous m'aider à faire cela avec
gst.element_factory_make()
s'il vous plaît? Aussi, quelle est exactement ladmux.
faire? Est-il relier le puits de la decodebin?OriginalL'auteur joar
Je suis sûr que vous avez mises en œuvre. Mais pour les autres qui regarde votre question, ma réponse peut vous aider . Le code est comme suit
OriginalL'auteur Thothadri Rajesh
Sinon vous pouvez utiliser GStreamer 1.0 maintenant.
Vous y trouverez les nouvelles propriétés
audio-filtre
etvidéo-filtre
, qui peut être utilisé pour connecter des éléments (tels que deslevel)
à un playbin.Avec Python GObject Introspection cela pourrait se faire aussi simple que:
OriginalL'auteur tynn