From 1fce55f6fe15991106202c8054b51fa2c0b53195 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Fri, 19 Dec 2014 12:12:04 +0000 Subject: [PATCH] HLS: Consider all programs. I'm not sure exactly what the implications of this change are, but I'd really hope that only one program in each stream is carrying audio/video. For GoPro cameras, they expose the video stream in the second program, for some reason. Issue: #116 --- .../android/exoplayer/hls/TsExtractor.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/hls/TsExtractor.java b/library/src/main/java/com/google/android/exoplayer/hls/TsExtractor.java index 3429ec337b..e8a8f81fc0 100644 --- a/library/src/main/java/com/google/android/exoplayer/hls/TsExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/hls/TsExtractor.java @@ -320,21 +320,17 @@ public final class TsExtractor { tsBuffer.skipBytes(pointerField); } - // Skip PAT header. - tsBuffer.skipBits(64); // 8+1+1+2+12+16+2+5+1+8+8 + tsBuffer.skipBits(12); // 8+1+1+2 + int sectionLength = tsBuffer.readBits(12); + tsBuffer.skipBits(40); // 16+2+5+1+8+8 - // Only read the first program and take it. - - // Skip program_number. - tsBuffer.skipBits(16 + 3); - int pid = tsBuffer.readBits(13); - - // Pick the first program. - if (tsPayloadReaders.get(pid) == null) { + int programCount = (sectionLength - 9) / 4; + for (int i = 0; i < programCount; i++) { + tsBuffer.skipBits(19); + int pid = tsBuffer.readBits(13); tsPayloadReaders.put(pid, new PmtReader()); } - // Skip other programs if exist. // Skip CRC_32. }