首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脱机播放受DRM保护的内容

脱机播放受DRM保护的内容
EN

Stack Overflow用户
提问于 2017-07-18 20:27:31
回答 1查看 946关注 0票数 1

我需要脱机播放受DRM保护的内容。I两个文件存储在本地存储中;一个dash文件指向同一目录中的一个mp4文件。

文件的密钥也存储在数据库中,并在启动回放时检索。

但是,在构建DRM会话后,会抛出以下错误:

代码语言:javascript
复制
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) 

在请求新的关键字之前,我使用这个块来检查给定的曲目是否有关键字。

代码语言:javascript
复制
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无法播放任何文件呢?

EN

回答 1

Stack Overflow用户

发布于 2017-07-21 20:21:20

我认为我有一个键不匹配,因此出现了错误。使用正确的密钥时播放的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45166813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档