#5977 closed defect (fixed)
Impossible to play incomplete mkv videos
Reported by: | thagoodboy | Owned by: | softworkz |
---|---|---|---|
Priority: | important | Component: | avformat |
Version: | git-master | Keywords: | mkv regression |
Cc: | nbowler@draconx.ca, softworkz@hotmail.com | Blocked By: | |
Blocking: | Reproduced by developer: | yes | |
Analyzed by developer: | yes |
Description
Summary of the bug:
While encoding H.264 videos with ffmpeg in the past, i was able to play the output video in the middle of the encoding, with the condition of using the "mkv" or "ts" containers for that output, but with the last ffmpeg versions this is not possible, so i have to wait until finishing the encoding (this may take hours or days in my case) to play the resulting video.
How to reproduce:
ffmpeg -i anyvideo -c:v libx264 -c:a copy output.mkv
Note:
Please try to play the output video with Potplayer or VLC.
ffmpeg version N-82597-gd316b21
built on 2016/11/22
Thanks
Change History (9)
comment:1 by , 8 years ago
Component: | undetermined → avformat |
---|---|
Keywords: | mkv regression added |
Priority: | normal → important |
Reproduced by developer: | set |
Status: | new → open |
Summary: | Impossible to play incomplete H.264 "mkv" or "ts" videos → Impossible to play incomplete mkv videos |
Version: | unspecified → git-master |
comment:2 by , 8 years ago
You are right, i'm sorry "ts" seems to be working fine unlike "mkv"
By the way, the last ffmpeg version which doesn't show this issue is: N-81894-g54220ce built on 2016-10-05
comment:3 by , 8 years ago
Cc: | added |
---|
comment:4 by , 8 years ago
Analyzed by developer: | set |
---|---|
Cc: | added |
Owner: | set to |
comment:5 by , 8 years ago
Analyzed by developer: | unset |
---|
comment:7 by , 8 years ago
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
Symptoms:
- 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 processed
- 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'
Cause:
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 process.
Regression:
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.
Bugtracker:
This issue has been recorded as #5977 which is resolved by this patch
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.
comment:8 by , 8 years ago
Analyzed by developer: | set |
---|
comment:9 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | open → closed |
Fixed in 20e8be0c20c7b51964fa4d317073bd36b983eb55 by softworkz.
For future tickets: Please remember to always provide a minimal command line that allows to reproduce the issue together with the complete, uncut console output.
Regression since ee888cfbe777cd2916a3548c750e433ab8f8e6a5
It is unlikely that such an issue is reproducible with mpegts output.