2017-03-21 1 views
0

J'ai un pipeline GStreamer que les flux en utilisant:Enregistrer flux codé H264 sans réencodage

v4l2src ! x264enc ! rtph264pay pt=96 ! udpsink host=ip port=8554 

Et ce pipeline qui reçoit ce flux:

               / queue !  avdec_h264 ! appsink 
udpsrc ! capsfilter ! rtpjitterbuffer ! rtph264depay ! tee ! 
                   \ queue ! h264parse ! mp4mux ! filesink 

pipeline récepteur simplifié sans le tee est la suivante:

gst-launch-1.0 udpsrc port=8080 caps="lots-of-caps" ! rtpjitterbuffer ! rtph264depay ! h264parse ! mp4mux ! filesink location=/home/rish/Desktop/recorded.264 -e 

question: Est-il possible de sauver la str codée H264 eam reçu de udpsrc sans avoir à le ré-encoder? Comment puis-je fermer correctement le fichier? Ce que j'ai essayé jusqu'ici: La discussion du fil this suggère le pipeline que j'ai essayé ci-dessus mais le fichier est toujours corrompu. (pas correctement fermé).

This question pose une question similaire. Cependant, je ne veux pas décoder et ré-encoder. Une autre réponse dans le thread suggère d'utiliser l'élément matroskamux au lieu de mp4mux. Cela fonctionne, mais je préfère utiliser mp4mux (pas de raison particulière, mais j'aimerais savoir pourquoi matroskamux fonctionne et mp4mux ne fonctionne pas).

+0

Je vous recommande de regarder 'élément splitmuxsink'. – RSATom

Répondre

0

Votre pipeline est déjà muxing sans recodage, il n'y a pas d'encodeur sur votre pipeline. h264parse est juste un analyseur.

vous avez déjà une réponse sur la façon de fermer le flux ici: Sending EoS to filesink while removing branch from tee

+0

Oui, mais les pipelines que j'ai mentionnés ne fonctionnent pas. Une fois que j'ai démarré le flux en utilisant le premier pipeline (udpsink), et que je reçois en utilisant le second pipeline, le fichier enregistré est corrompu/injouable. En remplaçant l'élément muxer (mp4mux) par matroskamux, le fichier enregistré est correct/jouable. De même, de suivre l'envoi de l'EoS dans ce pipeline un peu plus complexe, vers quel élément enverrais-je l'EoS? Il n'y a pas de codeurs/décodeurs dans le pipeline de dérivation d'enregistrement du récepteur. –

+0

J'ai compris! Envoyer l'EoS au muxer dans ce cas a fonctionné. Pour tous ceux qui veulent jeter un oeil à la source, trouvez-le [ici] (https://gist.github.com/CreaRo/bb2103d296fd2c5c3b39d4b82250b68a). (Toutes les suggestions pour le code sont appréciées.) @thiagoss, merci beaucoup pour l'aide! Je ne suis toujours pas sûr de savoir pourquoi matroskamux fonctionne et mp4mux ne fonctionne pas. –

+0

Les deux devraient fonctionner lorsque vous envoyez EOS correctement à la branche muxer. Si ce matroska ne fonctionne pas, c'est peut-être parce que la façon dont les fichiers non finis sont écrits par lui est plus récupérable que ne le fait mp4mux, principalement à cause du fonctionnement de ces formats. Comment mp4mux échoue? Le fichier n'est pas jouable? – thiagoss