From b553d2c3f9dc6fabf49db7d292c392402b7e4719 Mon Sep 17 00:00:00 2001 From: Daniele Sparano Date: Wed, 14 Jun 2023 17:07:53 +0100 Subject: [PATCH] Add end of TS input fix to HLS mode --- .../androidx/media3/extractor/ts/H263Reader.java | 1 + .../androidx/media3/extractor/ts/H264Reader.java | 1 + .../androidx/media3/extractor/ts/H265Reader.java | 1 + .../androidx/media3/extractor/ts/TsExtractor.java | 12 +++++------- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H263Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H263Reader.java index d5b8f7e38f..31321037a4 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H263Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H263Reader.java @@ -220,6 +220,7 @@ public final class H263Reader implements ElementaryStreamReader { public void packetFinished(boolean isEndOfInput) { if (isEndOfInput) { sampleReader.onDataEnd(totalBytesWritten, 0, hasOutputFormat); + sampleReader.reset(); } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java index d6c0973598..885726fb32 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java @@ -506,6 +506,7 @@ public final class H264Reader implements ElementaryStreamReader { // Output a final sample with the nal units currently held nalUnitStartPosition = position; outputSample(0); + readingSample = false; } private static final class SliceHeaderData { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java index 8580beafab..25262f314d 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java @@ -382,6 +382,7 @@ public final class H265Reader implements ElementaryStreamReader { // Output a final sample with the nal units currently held nalUnitPosition = position; outputSample(0); + readingSample = false; } /** Returns whether a NAL unit type is one that occurs before any VCL NAL units in a sample. */ diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java index 7819c7fa16..2d35af946e 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java @@ -323,13 +323,11 @@ public final class TsExtractor implements Extractor { } if (!fillBufferWithAtLeastOnePacket(input)) { - if (mode != MODE_HLS) { - // Send a dummy pusi to allow for packetFinished to be triggered on the last unit - for (int i = 0; i < tsPayloadReaders.size(); i++) { - TsPayloadReader payloadReader = tsPayloadReaders.valueAt(i); - if (payloadReader instanceof PesReader) { - payloadReader.consume(new ParsableByteArray(), FLAG_PAYLOAD_UNIT_START_INDICATOR); - } + // Send a dummy pusi to allow for packetFinished to be triggered on the last unit + for (int i = 0; i < tsPayloadReaders.size(); i++) { + TsPayloadReader payloadReader = tsPayloadReaders.valueAt(i); + if (payloadReader instanceof PesReader) { + payloadReader.consume(new ParsableByteArray(), FLAG_PAYLOAD_UNIT_START_INDICATOR); } } return RESULT_END_OF_INPUT;