[FFmpeg-devel] [PATCH] avformat/matroskaenc: Write duration early during mkv_write_header (Rev #3)

Soft Works softworkz at hotmail.com
Wed Jul 27 06:51:44 EEST 2016

> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> on behalf of Soft Works <softworkz at hotmail.com>
> Sent: Tuesday, July 19, 2016 3:33 AM
> To: FFmpeg development discussions and patches
> Subject: [FFmpeg-devel] [PATCH] avformat/matroskaenc: Write duration early during mkv_write_header (Rev #3)
> From 7d6d6a7775fef707ea1e8e705acc3362f20b6b89 Mon Sep 17 00:00:00 2001
>  From: softworkz <softworkz at hotmail.com>
>  Date: Sun, 17 Jul 2016 04:19:41 +0200
>  Subject: [PATCH] avformat/matroskaenc: Write duration early during mkv_write_header (Rev #3)
>  Rev #2: Fixes doubled header writing, checked FATE running without errors
>  Rev #3: Fixed coding style
>  This commit addresses the following scenario:
>  we are using ffmpeg to transcode or remux mkv (or something else) to mkv. The result is being streamed on-the-fly to an HTML5 clie> nt (> streaming starts while ffmpeg is still running). The problem here is that the client is unable to detect the duration because the > duration is only written to the mkv at the end of > the transcoding/remoxing process. In matroskaenc.c, the duration is only written>  during > mkv_write_trailer but not during mkv_write_header.> 
>  The approach:
>  FFMPEG is currently putting quite some effort to estimate the durations of source streams, but in many cases the source stream durati> ons > are still left at 0 and these durations are nowhere mapped to or used for output streams. As much as I would have liked to deduct o> r > estimate output durations based on input stream durations - I realized that this is a hard task (as Nicolas already mentioned in a > previous conversation). It would involve changes to the duration ca> lculation/estimation/deduction for input streams and propagating>  these > durations to output streams or the output context in a correct way.> 
>  So I looked for a simple and small solution with better chances to > get accepted. In webmdashenc.c I found that > a duration is writte> n > during write_header and this duration is taken from the streams' me> tadata, so I decided for a similar approach.> 
>  And here's what it does:
>  At first it is checking the duration of the AVFormatContext. In typical cases th> is value is not set, but: It is set in cases where the > user has specified a recording_time or an end_time via the -t or -to parameters.> 
>  Then it is looking for a DURATION metadata field in the metadata of the output c> ontext (AV> FormatContext::metadata). This would only exi> st > in case the user has explicitly specified a metadata DURATION value from the com> mand line.> 
>  Then it is iterating all streams > looking for a "DURATION" metadata (this works u> nless the > option "-map_metadata -1" has been specified) > and determines the maximum value.> 
>  The precendence is as follows: 1.>  Use durat> ion of AVFormatContext - 2. Use explicitly specified metadata duration value - 3. Use maximum (> mapped) metadata duration over al> l streams.> 


I wanted to kindly ask if there are any objections regarding this patch and if I could/should do anything else to get this merged?

Thank you very much,


More information about the ffmpeg-devel mailing list