58

Is it possible to dump a raw RTSP stream to file and then later decode the file to something playable?

Currently I'm using FFmpeg to receive and decode the stream, saving it to an mp4 file. This works perfectly, but is CPU intensive, and will severely limit the number of RTSP streams I can receive simultaneously on my server.

I would like to save the stream to file without decoding it, and delay the decoding part to when the file needs to be opened.

Is this possible?

I have tried VLC, which is even more CPU intensive than FFmpeg. I've also looked at this question where the answer says dumping RTSP to file is not useful, and this question, where the comment below the question says "Raw RTSP content is not well suited for save and replay...", which seems to indicate that there is way.

Thanks in advance!


EDIT Here is the command I'm using for FFmpeg:

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

Community
  • 1
  • 1
Felix
  • 2,817
  • 5
  • 29
  • 45

3 Answers3

73

If you are reencoding in your ffmpeg command line, that may be the reason why it is CPU intensive. You need to simply copy the streams to the single container. Since I do not have your command line I cannot suggest a specific improvement here. Your acodec and vcodec should be set to copy is all I can say.

EDIT: On seeing your command line and given you have already tried it, this is for the benefit of others who come across the same question. The command:

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

will not do transcoding and dump the file for you in an mp4. Of course this is assuming the streamed contents are compatible with an mp4 (which in all probability they are).

Jonathan Leffler
  • 666,971
  • 126
  • 813
  • 1,185
av501
  • 6,339
  • 2
  • 18
  • 32
  • I see, so adding copy should reduce CPU usage? I'll give that a go. (Added my FFmpeg command to the question). I'll also add the disclaimer that I'm a complete FFmpeg beginner :) – Felix Apr 30 '13 at 05:22
  • You are welcome. I am guessing you added -acodec copy -vcodec copy and that should give you your original recieved content. – av501 Apr 30 '13 at 07:09
  • hii can you please mention here what is ffmpeg? ffmpeg I had used the file but i am not able to use that their is static package name for android is mention that can not be changed ? so my application package name is different. How can i do the same i need to convert rtsp to mp4 – Deepak Mar 10 '15 at 06:50
  • how to stop the recording? last time I tried to record a live streaming..could not play the recorded file .. I think it missed the "headers" – yeahman Feb 24 '17 at 08:05
  • The problem with this one if if a UDP packet is lost - the mp4 file will be corrupted (looks like ffmpeg will not replace the lost packet with anything meaningful). You could use -rtsp_transport tcp - but this only works in theory because many cheap devices do not have enough buffer. – Sergey Kandaurov Dec 18 '18 at 08:48
11

With this command I had poor image quality

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

With this, almost without delay, I got good image quality.

ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -b 900k -vcodec copy -r 60 -y MyVdeoFFmpeg.avi
Aboutblank
  • 687
  • 2
  • 14
  • 31
Ricardo
  • 119
  • 1
  • 2
8

You can use mplayer.

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

The "copy" codec is just a dumb copy of the stream. Mencoder adds a header and stuff you probably want.

In the mplayer source file "stream/stream_rtsp.c" is a prebuffer_size setting of 640k and no option to change the size other then recompile. The result is that writing the stream is always delayed, which can be annoying for things like cameras, but besides this, you get an output file, and can play it back most places without a problem.

Tel
  • 111
  • 1
  • 2