From 4f8f87221ead66dab7610c5c2aa2796f33b3b336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=97=E5=8D=8E=E6=A0=8B=28Rabbit=29?= Date: Wed, 18 Oct 2017 23:03:26 +0800 Subject: [PATCH] Fix FLV AVCVIDEOPACKET -> compositionTimeMs Type from UI 24 to SI 24 --- .../exoplayer2/extractor/flv/VideoTagPayloadReader.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java index 8a4d314ee0..6bf91e4824 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java @@ -80,6 +80,9 @@ import com.google.android.exoplayer2.video.AvcConfig; protected void parsePayload(ParsableByteArray data, long timeUs) throws ParserException { int packetType = data.readUnsignedByte(); int compositionTimeMs = data.readUnsignedInt24(); + // compositionTimeMs is signed int 24, change unsigned int 24 to signed int 24 + compositionTimeMs = (compositionTimeMs & 0x800000) >> 23 == 1 ? (compositionTimeMs & 0xff000000) : compositionTimeMs; + timeUs += compositionTimeMs * 1000L; // Parse avc sequence header in case this was not done before. if (packetType == AVC_PACKET_TYPE_SEQUENCE_HEADER && !hasOutputFormat) {