[FFmpeg-trac] #5977(avformat:open): Impossible to play incomplete mkv videos

FFmpeg trac at avcodec.org
Wed Jan 4 00:47:27 EET 2017

#5977: Impossible to play incomplete mkv videos
             Reporter:  thagoodboy   |                    Owner:  softworkz
                 Type:  defect       |                   Status:  open
             Priority:  important    |                Component:  avformat
              Version:  git-master   |               Resolution:
             Keywords:  mkv          |               Blocked By:
  regression                         |  Reproduced by developer:  1
             Blocking:               |
Analyzed by developer:  0            |

Comment (by softworkz):

 Patch details:

 The following three commits created a regression by writing initially
 invalid mkv headers:

 650e17d88b63b5aca6e0a43483e89e64b0f7d2dd avformat/matroskaenc: write a
 CRC32 element on Tags
 3bcadf822711720ff0f8d14db71ae47cdf97e652 avformat/matroskaenc: write a
 CRC32 element on Info
 ee888cfbe777cd2916a3548c750e433ab8f8e6a5 avformat/matroskaenc: postpone
 writing the Tracks master


 - You can no longer playback a file that is still processed by ffmpeg,
 e.g. VLC fails playback
 - You can no longer stream a file to a client while if is still being
 - Various diagnosing tools show header errors or incomplete headers (e.g.
 ffprobe, mediainfo, mkvalidator)

 Note: The symptoms do not apply to completed files or ffmpeg runs that
 were interrupted with 'q'


 The mentioned commits made changes in a way that some header elements are
 only partially written in
 mkv_write_header, leaving the header in an invalid state. Only in
 mkv_write_trailer, these elements
 are finished correctly, but that does only occur at the end of the


 Before these commits were applied, mkv headers have always been valid,
 even before completion of ffmpeg.
 This has worked reliably over many versions of ffmpeg, to it was an
 obvious regression.


 This issue has been recorded as #5977 which is resolved by this patch


 The patch adds a new function 'end_ebml_master_crc32_preliminary' that
 preliminarily finishes the ebl
 element without destroying the buffer. The buffer can be used to update
 the ebml element later during
 mkv_write_trailer. But most important: mkv_write_header finishes with a
 valid mkv header again.

Ticket URL: <https://trac.ffmpeg.org/ticket/5977#comment:7>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list