Skip to content

Commit

Permalink
fix: Fix failure on very short WebVTT files (shaka-project#1216)
Browse files Browse the repository at this point in the history
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 shaka-project#1217
  • Loading branch information
xieyubo authored Jul 12, 2023
1 parent d9d3c7f commit dab165d
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions packager/media/demuxer/demuxer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<size_t>(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);
Expand Down Expand Up @@ -224,7 +227,7 @@ Status Demuxer::InitializeParser() {
// descriptor |media_file_| instead of opening the same file again.
static_cast<mp4::MP4MediaParser*>(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_);
}
Expand Down

0 comments on commit dab165d

Please sign in to comment.