我无法通过ExoPlayer框架运行DRM PlayReady内容。我想这与我的drmSessionManager有关
清单Url和LicenseUrl都已经过测试,但很难实现我的更改,因为没有真正的具体示例实现任何DRM内容(WideVine或PlayReady)
正常的Dash内容与ExoPlayer配合使用,但当我尝试播放任何受DRM保护的内容时,它失败了。
DataSource.Factory dataSourceFactory =
new DefaultHttpDataSourceFactory(Util.getUserAgent(this, "ExoPlayerDASHPR"));
try {
drmSessionManager = buildDrmSessionManager(C.PLAYREADY_UUID, drmLicenseUrl, true);
} catch (Exception e) {
System.out.println(e);
}
player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), new DefaultTrackSelector(), drmSessionManager);
playerView.setPlayer(player);
DashMediaSource mediaSource = new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(dataSourceFactory), dataSourceFactory).createMediaSource(manifestUri);
player.prepare(mediaSource);
player.setPlayWhenReady(true);
}
构建实际drmSessionManager的方法(我认为问题所在)
private DefaultDrmSessionManager<FrameworkMediaCrypto> buildDrmSessionManager(
UUID uuid, String licenseUrl, boolean multiSession)
throws UnsupportedDrmException {
HttpMediaDrmCallback httpMediaDrmCallback = new HttpMediaDrmCallback(licenseUrl,
new DefaultHttpDataSourceFactory(Util.getUserAgent(this, "ExoPlayerDASHPR")));
releaseMediaDrm();
mediaDrm = FrameworkMediaDrm.newInstance(uuid);
return new DefaultDrmSessionManager<>(uuid, mediaDrm, httpMediaDrmCallback, null, multiSession);
}
希望它在Android设备上通过我的WebView播放PlayReady内容。我百分之百确定该设备支持PlayReady,因为它是NVidia屏蔽。
下面的错误消息。
2019-10-18 09:56:18.272 31508-31555/com.example.exoplayer_dashpr E/ExoPlayerImplInternal: Playback error.
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.shouldWaitForKeys(MediaCodecRenderer.java:842)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:739)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:574)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.drm.DrmSession$DrmSessionException: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 500
at com.google.android.exoplayer2.drm.DefaultDrmSession.onError(DefaultDrmSession.java:422)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeysError(DefaultDrmSession.java:417)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeyResponse(DefaultDrmSession.java:379)
at com.google.android.exoplayer2.drm.DefaultDrmSession.access$100(DefaultDrmSession.java:41)
at com.google.android.exoplayer2.drm.DefaultDrmSession$PostResponseHandler.handleMessage(DefaultDrmSession.java:472)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 500
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:211)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.read(DataSourceInputStream.java:82)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.read(DataSourceInputStream.java:76)
at com.google.android.exoplayer2.util.Util.toByteArray(Util.java:128)
at com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executePost(HttpMediaDrmCallback.java:159)
at com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executeKeyRequest(HttpMediaDrmCallback.java:134)
at com.google.android.exoplayer2.drm.DefaultDrmSession$PostRequestHandler.handleMessage(DefaultDrmSession.java:503)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
在这种情况下,ExoPlayer似乎工作正常-正在发送对许可证服务器的请求并接收响应。
问题是服务器正在发送一个响应,指示其端部有错误。
这可能是由于一些内部错误,但更有可能是因为传递给服务器的某些凭据(例如提供授权信息的令牌)无效或丢失,或者清单或媒体流中的keyid不正确。
DRM服务器往往不会给出特别冗长或详细的错误消息作为响应,以防止发送重复不正确请求以尝试了解服务器安全机制的攻击。
我已使用Azure媒体服务存储加密视频 有人能帮我解决以下问题吗: 我从哪里获得Widevine许可证URL,以便在Exo Player中播放视频 提前感谢。
我正在开发一个应用程序,我使用了谷歌的ExoPlayer,它工作起来很有魅力,现在我想在我的应用程序中添加RTSP支持,但使用ExoPlayer我无法播放,请任何人都可以帮我,如果有人有其他选择,请与我分享。 日志 E/ExoPlayerImplInternal:源错误。网蝴蝶电视。rtmp_客户端。RtmpClient$RtmpIOException at net。蝴蝶电视。rtmp_客户端。R
一旦我向concatenatingMediaSource添加一首歌,我就会在它旁边添加一个标签,所以我想知道如何通过这个特定的标签播放一首歌。 obs:ctd是歌曲位置的参考号;
我正在尝试为ExoPlayer 2实现离线DRM支持,但我有一些问题。 我找到了这段对话。ExoPlayer 1有一些实现。以及如何使用ExoPlayer 2实现的一些步骤。十、 我对离线DrmSessionManager有问题,which实现了DrmSessionManager。在该示例中,是从ExoPlayer 1导入的DrmSessionManager。x、 如果我从ExoPlayer 2导
我正在使用ExoPlayer播放视频的应用程序。出于某种原因,当我试图暂停时,视频播放器没有显示播放/暂停图标。我只为播放/暂停做了一个自定义布局,并将其设置在PlayerView上。使用或播放/暂停视频。到处都找不到解决办法,好像我错过了什么,但又不知道是什么。
我无法使用exoplayer2.2离线播放歌曲。 这是我的密码。 我得到以下错误。 谁能帮忙吗。