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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user