From dab165d3e5d979e2e5ff783d91d948357b932078 Mon Sep 17 00:00:00 2001 From: xyb Date: Wed, 12 Jul 2023 09:07:07 -0700 Subject: [PATCH] fix: Fix failure on very short WebVTT files (#1216) 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)". Fixes #1217 --- 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 10e69a0155..20fae4ac7e 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_); }