0
オフラインでDRM保護されたコンテンツを再生する必要があります。私は2つのファイルをローカルストレージに保存しました。同じディレクトリ内のmp4ファイルを指すダッシュファイル。DRM保護されたコンテンツをオフラインで再生する
ファイルのキーもデータベースに保存され、再生が開始されると取得されます。
はしかし、DRMのセッションを構築した後、次のエラーがスローされます。
playerFailed [1.04]
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:691)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:507)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:466)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
Caused by: android.media.MediaCodec$CryptoException: Error decrypting data: requested key has not been loaded
at android.media.MediaCodec.native_queueSecureInputBuffer(Native Method)
at android.media.MediaCodec.queueSecureInputBuffer(MediaCodec.java:2292)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:682)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:507)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:466)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
私は新しいものを要求する前に、与えられたトラックがキーを持っているかいないかどうかを確認するために、このブロックを使用しています。私はプレーしようとするすべてのオフラインファイルの場合
private DrmSessionManager<FrameworkMediaCrypto> buildDrmSessionManager(UUID uuid, String licenseURL,
Map<String, String> keyRequestProperties) throws UnsupportedDrmException {
HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseURL, buildHttpDataSourceFactory(false), keyRequestProperties);
defaultDrmSessionManager = new DefaultDrmSessionManager<>(uuid, FrameworkMediaDrm.newInstance(uuid), drmCallback, null, mainHandler, eventLogger);
if (track != null) {
DrmKey key = realm.where(DrmKey.class).equalTo("trackId", track.getId()).findFirst();
Log.e("TrackId", track.getId());
if (key != null) {
byte[] offlineKeySetId = Base64.decode(key.getRequestKey(), Base64.DEFAULT);
defaultDrmSessionManager.setMode(DefaultDrmSessionManager.MODE_QUERY, offlineKeySetId);
Log.e("Key", key.getRequestKey());
Log.e(MusicService.class.getSimpleName(), "OfflineKeySet already defined, using the existing one : " + key.getRequestKey());
} else {
defaultDrmSessionManager.setMode(DefaultDrmSessionManager.MODE_DOWNLOAD, null);
Log.e(MusicService.class.getSimpleName(), "Offline key not defined, retrieving a new licence");
}
}
return defaultDrmSessionManager;
}
、キーは常に利用可能です。なぜ、exoplayerがファイルを再生できないのですか?