From d4d3e3f2085b7479423f7516d793ad4c2198d6b6 Mon Sep 17 00:00:00 2001 From: xyb Date: Thu, 8 Jun 2023 07:59:20 -0700 Subject: [PATCH] Fix a bug that if the webvtt file is very short, e.g. only contains one block: WEBVTT 00:00:00.500 --> 00:00:02.000 The Web is always changing shaka packager will report error: "Packaging Error: 6 (END_OF_STREAM)". Fix: In Demuxer::InitializeParser(), if eof is reaching, invoke parser_->Flush() to flash the parser. --- packager/media/demuxer/demuxer.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packager/media/demuxer/demuxer.cc b/packager/media/demuxer/demuxer.cc index 10e69a01555..20fae4ac7e7 100644 --- a/packager/media/demuxer/demuxer.cc +++ b/packager/media/demuxer/demuxer.cc @@ -162,13 +162,16 @@ Status Demuxer::InitializeParser() { // Read enough bytes before detecting the container. int64_t bytes_read = 0; + bool eof = false; while (static_cast(bytes_read) < kInitBufSize) { int64_t read_result = media_file_->Read(buffer_.get() + bytes_read, kInitBufSize); if (read_result < 0) return Status(error::FILE_FAILURE, "Cannot read file " + file_name_); - if (read_result == 0) + if (read_result == 0) { + eof = true; break; + } bytes_read += read_result; } container_name_ = DetermineContainer(buffer_.get(), bytes_read); @@ -224,7 +227,7 @@ Status Demuxer::InitializeParser() { // descriptor |media_file_| instead of opening the same file again. static_cast(parser_.get())->LoadMoov(file_name_); } - if (!parser_->Parse(buffer_.get(), bytes_read)) { + if (!parser_->Parse(buffer_.get(), bytes_read) || (eof && !parser_->Flush())) { return Status(error::PARSER_FAILURE, "Cannot parse media file " + file_name_); }