web-dev-qa-db-fra.com

Comment vider un flux RTSP brut dans un fichier?

Est-il possible de vider un flux RTSP brut dans un fichier, puis de le décoder ultérieurement en un fichier pouvant être lu?

Actuellement, j'utilise FFmpeg pour recevoir et décoder le flux en l'enregistrant dans un fichier mp4. Cela fonctionne parfaitement, mais requiert beaucoup de ressources en termes de ressources processeur et limite considérablement le nombre de flux RTSP que je peux recevoir simultanément sur mon serveur.

Je voudrais enregistrer le flux dans un fichier sans le décoder, et retarder la partie de décodage au moment où le fichier doit être ouvert.

Est-ce possible?

J'ai essayé VLC, qui nécessite encore plus de ressources processeur que FFmpeg. J'ai également examiné cette question où la réponse indique que le dumping du fichier RTSP n'est pas utile, et cette question , où le commentaire situé sous la question indique "Le contenu brut du fichier RTSP est pas bien adapté pour sauvegarder et rejouer ... ", ce qui semble indiquer qu'il existe un chemin.

Merci d'avance!


[~ # ~] edit [~ # ~] Voici la commande que j'utilise pour FFmpeg:

ffmpeg -i rtsp://@192.168.241.1:62159 -r 15 C:/DB_Videos/2013-04-30 17_18_34.703.mp4

41
Felix

Si vous réencodez dans votre ligne de commande ffmpeg, c'est peut-être la raison pour laquelle elle nécessite beaucoup de ressources processeur. Vous devez simplement copier les flux dans le même conteneur. Puisque je n'ai pas votre ligne de commande, je ne peux pas suggérer d'amélioration ici. Votre acodec et vcodec devraient être configurés pour copier est tout ce que je peux dire.

EDIT: Lorsque vous voyez votre ligne de commande et que vous l’avez déjà essayée, c’est pour le bénéfice de ceux qui rencontrent la même question. La commande:

ffmpeg -i rtsp://@192.168.241.1:62156 -acodec copy -vcodec copy c:/abc.mp4

ne fera pas de transcodage et videra le fichier pour vous dans un MP4. Bien sûr, cela suppose que les contenus diffusés soient compatibles avec un MP4 (qui, selon toute probabilité, le sont).

55
av501

Avec cette commande j'avais une mauvaise qualité d'image

ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -vcodec copy -acodec copy -f mp4 -y MyVideoFFmpeg.mp4

Avec cela, presque immédiatement, j'ai une bonne qualité d'image.

ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -b 900k -vcodec copy -r 60 -y MyVdeoFFmpeg.avi
9
Ricardo

Vous pouvez utiliser mplayer.

mencoder -nocache -rtsp-stream-over-tcp rtsp://192.168.XXX.XXX/test.sdp -oac copy -ovc copy -o test.avi

Le codec "copie" est juste une copie muette du flux. Mencoder ajoute un en-tête et des éléments que vous souhaitez probablement.

Dans le fichier source mplayer "stream/stream_rtsp.c" correspond à un paramètre prebuffer_size de 640k et ne permet pas de modifier la taille, à l'exception de la recompilation. Le résultat est que l'écriture du flux est toujours retardée, ce qui peut être gênant pour des choses comme les appareils photo, mais en plus, vous obtenez un fichier de sortie et pouvez le lire dans la plupart des endroits sans problème.

6
Tel