8
votes

I am currently recording video with blackmagic's prorecorder. I transcode video on-the-fly to mp4 video container with ffmpeg. Duration is unknown as I'm transcoding .ts that prorecorder is outputting to named pipe.

My goal is to try to play this file with browser, while stream is still being recorded - Playback is great, but problem is that when I open file, duration is defined to current recording time.

So, question is - I would like to generate a "fake" moov atom for duration of fe. 8 hours with ffmpeg, and then start recording mp4 file as I'm already doing. How could I do this?

Documentation that I checked and I think it's relevant - https://ffmpeg.org/ffmpeg-formats.html#MOV_002fMP4_002fISMV I also saw this on stack: Is it possible to fake a (mp4) moov atom?

1
in your scenario a fragmented mp4 solution will be more "standard" or more easy an RTMP stream have you look trac.ffmpeg.org/wiki/StreamingGuidealexbuisson
Does RTMP streaming with ffmpeg has an option to go back in time of stream, meaning that you can replay event that happened 2 hours ago, for example?mmx
No effectively you can't do something like that. I thought you are trying to live stream, but it's different.alexbuisson

1 Answers

7
votes

I had a similar problem and only discovered it after encoding nearly 2000 videos. Instead of starting over, I used this command to insert the moov atom:

/usr/bin/ffmpeg -i ./input.mp4 -c:v copy -movflags faststart -strict -2 ./output.mp4