2013-04-08 3 views
4

J'essaye de développer un programme pour jouer et enregistrer des strtmes de RTMP. Le programme est développé en Qt. J'utilise rtmpdump et mplayer. Puisque les deux fonctionnent en mode séparé, j'utilise un fifo pour passer le flux de rtmpdump à mplayer. J'ai besoin d'un processus séparé car mplayer doit être contrôlé par l'utilisateur. donc mplayer fonctionne en mode esclave.Commande té Linux avec plusieurs fifo. fifo blocks tee

Cela fonctionne très bien pour la lecture du flux.

maintenant je veux enregistrer le flux dans un autre fichier. Je sais que je peux utiliser le mplayer pour le faire. mais en utilisant un seul mplayer, ce n'est pas possible car il ne supporte que la lecture ou l'enregistrement. donc pensé à utiliser la commande tee pour diviser le flux et utiliser 2 processus mplayer, un pour l'enregistrement et un pour jouer.

maintenant le ruisseau coule comme celui-ci

rtmpdump | tee fifo_for_playing fifo_for recording 

un MPlayer lit la fifo_for_playing et une autre est en train de lire fifo_for_recording.

maintenant le problème est, puisque mplayer qui supposé enregistrer ne commencera que lorsque l'utilisateur appuie sur le bouton d'enregistrement, fifo_for_recording bloquera le tee car il n'est pas ouvert. donc jouer ne commencera pas non plus.

quelqu'un peut-il suggérer une solution ou un meilleur moyen d'y parvenir? ce que j'essaye de faire est té avec fifo non bloquant. donc même si un fifo n'est pas ouvert pour la lecture, il ne bloquera pas le tee ..

Répondre

0

Les fifos n'ont pas de tampon (ou s'ils en ont un il est très petit). Si vous lui écrivez et que personne ne lit, vous bloquez, comme vous le découvrez.

Vous pouvez écrire un petit programme pour lire le fifo et le mettre en mémoire tampon ou sur le disque. Peut-être que le programme dd peut le faire?

Ou vous pouvez appeler avec rtmpdump avec l'option -stop dans une boucle, et lui demander d'écrire sa sortie dans un fichier. Puis traiter les fichiers à l'ancienne sans le fifo.