mirror of
https://github.com/samsonjs/media.git
synced 2026-04-06 11:25:46 +00:00
Ignore negative payload size in TS PesReader
Issue: #8005 PiperOrigin-RevId: 335625992
This commit is contained in:
parent
1cca9ffd01
commit
bddaaf022c
2 changed files with 15 additions and 9 deletions
|
|
@ -29,6 +29,8 @@
|
|||
* Add TS extractor parameter to configure the number of bytes in which
|
||||
to search for a timestamp to determine the duration and to seek.
|
||||
([#7988](https://github.com/google/ExoPlayer/issues/7988)).
|
||||
* Ignore negative payload size in PES packets
|
||||
([#8005](https://github.com/google/ExoPlayer/issues/8005)).
|
||||
* UI
|
||||
* Do not require subtitleButton in custom layouts of StyledPlayerView
|
||||
([#7962](https://github.com/google/ExoPlayer/issues/7962)).
|
||||
|
|
|
|||
|
|
@ -97,11 +97,11 @@ public final class PesReader implements TsPayloadReader {
|
|||
Log.w(TAG, "Unexpected start indicator reading extended header");
|
||||
break;
|
||||
case STATE_READING_BODY:
|
||||
// If payloadSize == -1 then the length of the previous packet was unspecified, and so
|
||||
// we only know that it's finished now that we've seen the start of the next one. This
|
||||
// is expected. If payloadSize != -1, then the length of the previous packet was known,
|
||||
// but we didn't receive that amount of data. This is not expected.
|
||||
if (payloadSize != -1) {
|
||||
// If payloadSize is unset then the length of the previous packet was unspecified, and so
|
||||
// we only know that it's finished now that we've seen the start of the next one. This is
|
||||
// expected. If payloadSize is set, then the length of the previous packet was known, but
|
||||
// we didn't receive that amount of data. This is not expected.
|
||||
if (payloadSize != C.LENGTH_UNSET) {
|
||||
Log.w(TAG, "Unexpected start indicator: expected " + payloadSize + " more bytes");
|
||||
}
|
||||
// Either way, notify the reader that it has now finished.
|
||||
|
|
@ -136,13 +136,13 @@ public final class PesReader implements TsPayloadReader {
|
|||
break;
|
||||
case STATE_READING_BODY:
|
||||
readLength = data.bytesLeft();
|
||||
int padding = payloadSize == -1 ? 0 : readLength - payloadSize;
|
||||
int padding = payloadSize == C.LENGTH_UNSET ? 0 : readLength - payloadSize;
|
||||
if (padding > 0) {
|
||||
readLength -= padding;
|
||||
data.setLimit(data.getPosition() + readLength);
|
||||
}
|
||||
reader.consume(data);
|
||||
if (payloadSize != -1) {
|
||||
if (payloadSize != C.LENGTH_UNSET) {
|
||||
payloadSize -= readLength;
|
||||
if (payloadSize == 0) {
|
||||
reader.packetFinished();
|
||||
|
|
@ -191,7 +191,7 @@ public final class PesReader implements TsPayloadReader {
|
|||
int startCodePrefix = pesScratch.readBits(24);
|
||||
if (startCodePrefix != 0x000001) {
|
||||
Log.w(TAG, "Unexpected start code prefix: " + startCodePrefix);
|
||||
payloadSize = -1;
|
||||
payloadSize = C.LENGTH_UNSET;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -208,10 +208,14 @@ public final class PesReader implements TsPayloadReader {
|
|||
extendedHeaderLength = pesScratch.readBits(8);
|
||||
|
||||
if (packetLength == 0) {
|
||||
payloadSize = -1;
|
||||
payloadSize = C.LENGTH_UNSET;
|
||||
} else {
|
||||
payloadSize = packetLength + 6 /* packetLength does not include the first 6 bytes */
|
||||
- HEADER_SIZE - extendedHeaderLength;
|
||||
if (payloadSize < 0) {
|
||||
Log.w(TAG, "Found negative packet payload size: " + payloadSize);
|
||||
payloadSize = C.LENGTH_UNSET;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue