OSDN Git Service

Fix MediaExtractor.getDrmInitData implementation for webm
authorRobert Shih <robertshih@google.com>
Fri, 1 Apr 2016 22:00:01 +0000 (15:00 -0700)
committerRobert Shih <robertshih@google.com>
Fri, 1 Apr 2016 23:25:53 +0000 (16:25 -0700)
Should lookup "crypto-key" in individual track formats instead of file format.

Bug: 26070802
Change-Id: I1a0f59e7bca1d311631e7ad90b9a403ac20d319b

media/java/android/media/MediaExtractor.java

index 177344a..24a400e 100644 (file)
@@ -275,16 +275,23 @@ final public class MediaExtractor {
                     return initDataMap.get(schemeUuid);
                 }
             };
-        } else if (formatMap.containsKey("crypto-key")) {
-            ByteBuffer buf = (ByteBuffer) formatMap.get("crypto-key");
-            buf.rewind();
-            final byte[] data = new byte[buf.remaining()];
-            buf.get(data);
-            return new DrmInitData() {
-                public SchemeInitData get(UUID schemeUuid) {
-                    return new DrmInitData.SchemeInitData("webm", data);
+        } else {
+            int numTracks = getTrackCount();
+            for (int i = 0; i < numTracks; ++i) {
+                Map<String, Object> trackFormatMap = getTrackFormatNative(i);
+                if (!trackFormatMap.containsKey("crypto-key")) {
+                    continue;
                 }
-            };
+                ByteBuffer buf = (ByteBuffer) trackFormatMap.get("crypto-key");
+                buf.rewind();
+                final byte[] data = new byte[buf.remaining()];
+                buf.get(data);
+                return new DrmInitData() {
+                    public SchemeInitData get(UUID schemeUuid) {
+                        return new DrmInitData.SchemeInitData("webm", data);
+                    }
+                };
+            }
         }
         return null;
     }