]> git.sesse.net Git - ffmpeg/commitdiff
avformat/matroskaenc: Write SeekHead when livestreaming
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Sun, 26 Apr 2020 08:39:27 +0000 (10:39 +0200)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Sun, 3 May 2020 10:44:48 +0000 (12:44 +0200)
Commit 6fd300ac6c2c3871736ce0e6df95603255004dc6 added support for WebM
Chunk livestreaming; in this case, both the header as well as each
Cluster is written to a file of its own, so that even if the AVIOContext
seems seekable, the muxer has to behave as if it were not. Yet one of
the added checks makes no sense: It ensures that no SeekHead is written
preliminarily (and hence no SeekHead is written at all) if the option
for livestreaming is set, although one should write the SeekHead in this
case when writing the Header. E.g. the WebM-DASH specification [1]
never forbids writing a SeekHead and in some instances (that don't apply
here) even requires it (if Cues are written after the Clusters).

[1]: https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavformat/matroskaenc.c

index e1528a91629b13b0dab5f02b6dc693b78c35d3e6..f69b3c39da6ad5cf2c6a128d86610109514c8a40 100644 (file)
@@ -1896,7 +1896,7 @@ static int mkv_write_header(AVFormatContext *s)
     if (ret < 0)
         return ret;
 
-    if (!(s->pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live) {
+    if (!(s->pb->seekable & AVIO_SEEKABLE_NORMAL) || mkv->is_live) {
         ret = mkv_write_seekhead(pb, mkv, 0, avio_tell(pb));
         if (ret < 0)
             return ret;