当前位置: 首页 > 知识库问答 >
问题:

如何检测在Exoplayer中读取DRM Widevine许可证时出现错误

陆洛城
2023-03-14

我有一个视频DASH DRM Widevine的应用程序。在模拟器和某些电视盒中,读取许可证时出错,并且不会播放受保护的内容。我想要实现的是,如果许可证有错误,可以执行其他一些功能。

谢谢

共有1个答案

闾丘德宇
2023-03-14

Exoplayer支持监听器,您可以使用监听错误并根据需要对其做出反应-信息可在此处获得:

  • https://exoplayer.dev/doc/reference-v1/com/google/android/exoplayer/ExoPlayer.Listener.html#onPlayerError-com.google.android.exoplayer.ExoPlaybackException-

您可以向player实例添加侦听器:

yourExoPlayerInstance.addListener(new Player.EventListener() {
                @Override
                public void onPlayerError(ExoPlaybackException e) {
                    //Add you code to check the error type here 
                    //and take whatver actions you need
                }
});

请注意,来自DRM服务器的DRM错误有时可能含糊不清,细节不多。这可能是为了避免攻击者试图了解DRM服务器的行为(或者因为他们忘记添加更好的错误原因…)。

具体来看,如果内容在真实设备上播放,而不是在模拟器中播放,那么移动设备上的DRM系统通常与设备上的硬件紧密关联,使用硬件信任根。

当您在模拟器中运行应用程序时,HW链接不存在,并且一些安全应用程序和操作(如DRM)将无法工作。

作为一个过于简化但希望有用的示例,如果您可以想象解密密钥存储在真实设备上的一些“硬件安全”内存中,那么在模拟器上,这必须在软件中进行模拟,并且可能更容易进行反向工程,从而发现解密密钥。

在现实中,模拟器在某些情况下可能能够将这些类型的安全功能传递到运行它们的基础平台,因此您可能会发现对于某些生态系统和模拟器,它将起作用。然而,即使它确实让你远离了应用程序在真实设备上的实际工作方式,因此尽可能在真实设备上测试这些类型的用例可能是最安全的。

 类似资料:
  • 我使用Dropwizard框架创建了java应用程序,其中我使用了liquibase迁移。我能够从eclipse中运行“db migrate”命令,但同一命令在终端cli中失败。 很长时间以来,我一直在试图找出设置中的错误,但现在我需要一些液化专家的帮助。这是打印的错误日志。请让我知道-可能有什么问题。

  • 我已使用Azure媒体服务存储加密视频 有人能帮我解决以下问题吗: 我从哪里获得Widevine许可证URL,以便在Exo Player中播放视频 提前感谢。

  • 但是,在构建DRM会话之后,会引发以下错误: 未能获取脱机DRM许可证com.google.android.exoPlayer2.DRM.drmsession$drmsessionexception:com.google.android.exoPlayer2.upstream.httpdatasource$invalidresponseCodeexception:响应代码:403 at com.g

  • 我返回了一个代码,使用jsoup-1.7.3.jar读取网页,它对一些网站有效,但对一些URL显示读取超时错误。 线程“main”java.net.SocketTimeoutException中的异常:java.net.SocketInputStream.socketRead0(本机方法)处java.net.SocketInputStream.Read(SocketInputStream.java

  • 我将我的应用程序迁移到Android P(28级),并在运行Android P的模拟器上进行了测试。许可证检查结果显示错误“无法连接到服务器”。在Logcat中,我发现了“不允许清除文本流量”的消息。 我添加了一个配置文件network-security-config.xml:cleartextTraffePermit="true",并在清单中的标签“应用程序”下添加了android: netwo

  • 问题内容: 我正在用golang编写HTTP处理程序的单元测试。在查看代码覆盖率报告时,我遇到了以下问题:从请求中读取请求正文时,可能会返回我需要处理的错误。但是,当我为我的处理程序编写单元测试时,我不知道如何以触发该错误的方式将请求发送到我的处理程序(内容的结尾过早似乎不会产生这样的错误,但是会在解体身体)。这就是我想要做的: 我该如何为不存在的情况编写测试用例? 问题答案: 您可以创建和使用伪