2017-07-18 4 views
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がファイルを再生できないのですか?

答えて

0

私はキーミスマッチがあったため、エラーが発生していると考えました。正しいキーで再生されたときに再生されたファイル。

関連する問題