From ad8e58f6f792fed1aa3e1ad64ca05dde2c93a3c6 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Fri, 1 Apr 2016 18:04:22 -0700 Subject: [PATCH] Fix offline playback using widevine sample player Previously the sample player relied on implementation details of FileDescriptor.toString() to get the low level int file descriptor, which changed in N release. This updates the sample player to use a more reliable method. bug: 26422357 Change-Id: I73cc759542994a352eae646a3872ee1125445739 --- proprietary/samplePlayer/Android.mk | 2 ++ .../src/com/widevine/demo/WidevineDrm.java | 27 +++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/proprietary/samplePlayer/Android.mk b/proprietary/samplePlayer/Android.mk index 42a53485..3c7de0dc 100644 --- a/proprietary/samplePlayer/Android.mk +++ b/proprietary/samplePlayer/Android.mk @@ -5,6 +5,8 @@ LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_DEX_PREOPT := false + LOCAL_PACKAGE_NAME := WidevineSamplePlayer LOCAL_JAVA_LIBRARIES := org.apache.http.legacy diff --git a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java index 88ff674e..7efbdc29 100644 --- a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java +++ b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java @@ -4,15 +4,12 @@ package com.widevine.demo; -import java.io.FileDescriptor; -import java.io.FileInputStream; +import java.io.File; import java.util.EventListener; import java.util.Set; -import android.util.Log; import android.content.ContentValues; import android.content.Context; - import android.drm.DrmErrorEvent; import android.drm.DrmEvent; import android.drm.DrmInfo; @@ -20,6 +17,8 @@ import android.drm.DrmInfoEvent; import android.drm.DrmInfoRequest; import android.drm.DrmManagerClient; import android.drm.DrmStore; +import android.os.ParcelFileDescriptor; +import android.util.Log; public class WidevineDrm { @@ -133,12 +132,12 @@ public class WidevineDrm { return rightsAcquisitionInfo; } - public DrmInfoRequest getDrmInfoRequest(String assetUri, FileDescriptor fd) { + public DrmInfoRequest getDrmInfoRequest(String assetUri, ParcelFileDescriptor pfd) { DrmInfoRequest rightsAcquisitionInfo = getDrmInfoRequest(assetUri); - if (fd.valid()) { - rightsAcquisitionInfo.put("FileDescriptorKey", fd.toString()); + if (pfd.getFileDescriptor().valid()) { + rightsAcquisitionInfo.put("FileDescriptorKey", Integer.toString(pfd.getFd())); } return rightsAcquisitionInfo; @@ -147,11 +146,11 @@ public class WidevineDrm { public boolean isProvisionedDevice() { if (mWVDrmInfoRequestStatusKey == DEVICE_IS_PROVISIONED) - logMessage("Device is provisioined\n"); + logMessage("Device is provisioned\n"); else if (mWVDrmInfoRequestStatusKey == DEVICE_IS_PROVISIONED_SD_ONLY) - logMessage("Device is provisioined SD only\n"); + logMessage("Device is provisioned SD only\n"); else if (mWVDrmInfoRequestStatusKey == DEVICE_IS_NOT_PROVISIONED) - logMessage("Device is not provisioined\n"); + logMessage("Device is not provisioned\n"); else logMessage("Invalid provisioned status=" + mWVDrmInfoRequestStatusKey +"\n"); @@ -183,10 +182,10 @@ public class WidevineDrm { int rights = 0; if (assetUri.startsWith("/sdcard")) { try { - FileInputStream fis = new FileInputStream(assetUri); - FileDescriptor fd = fis.getFD(); - rights = mDrmManager.acquireRights(getDrmInfoRequest(assetUri, fd)); - fis.close(); + int mode = ParcelFileDescriptor.parseMode("r"); + ParcelFileDescriptor pfd = ParcelFileDescriptor.open(new File(assetUri), mode); + rights = mDrmManager.acquireRights(getDrmInfoRequest(assetUri, pfd)); + pfd.close(); } catch (java.io.IOException e) { logMessage("Unable to acquire rights for '" + assetUri + ": File I/O error'\n");