从Silverlight 4升级到Silverlight 5后,我得到System.Exception 6028
我自己的播放器中的MediaElement
尝试播放DRM h264视频。当我已将许可证存储在我的计算机上时,就会发生这种情况。
这发生在Silverlight 5.0.61118.0上。
我希望找到有关识别该异常原因的任何帮助,并找到除删除许可证并再次获取许可证之外的解决方案。
编辑: 我删除了PC上的所有PlayReady许可证,但过了一段时间后我再次获得了该系统异常。关于它的一个好处是我可以复制此异常消息:
System.Exception: 6028 No valid simple or leaf license is available to create the decryptor
我确实检查了一件事。我的应用程序要求许可的DRM服务器是1.5.2版本。
答案 0 :(得分:2)
要解决此问题(在过期持久许可证的情况下),我们需要 使用MediaFailed事件处理程序。在处理程序中,如果错误代码是 6028,我们只需要使用LicenseAcquirer来获取许可证。该 LicenseAcquirer可以是自定义LicenseAcquirer或默认值 SSME的LicenseAcquirer。
答案 1 :(得分:2)
只是一个更新,对于新读者来说,这已在Silverlight 5.1.10411.0中得到解决。
Microsoft发布说明:
修复了当客户从Silverlight 4升级到Silverlight 5时持久许可证获取失败的问题。
答案 2 :(得分:1)
如上一个答案所述,您应该检查6028错误代码
要解决此问题(在过期持久许可证的情况下),我们需要使用MediaFailed>事件处理程序。在处理程序中,如果错误代码是6028,我们只需要使用LicenseAcquirer>来获取许可证。 LicenseAcquirer可以是自定义LicenseAcquirer,也可以是SSME的默认> LicenseAcquirer。
如下例所示,我们使用了自定义许可证获取者。
protected void OnMediaFailed(object sender, CustomEventArgs<Exception> e)
{
if (e.Value.Message.StartsWith("6028"))
{
//Get Manifest Info Somehow
........
//our custom acquirer initialization
var acquirer = new ManualLicenseAcquirer();
if (manifestInfo != null
&& manifestInfo.ProtectionInfo != null
&& manifestInfo.ProtectionInfo.ProtectionHeader != null)
{
acquirer.AcquireLicenseCompleted += this.OnLAcquirerCompleted;
acquirer.AcquireLicenseAsync(manifestInfo.ProtectionInfo.ProtectionHeader.ProtectionData);
}
else
{
this.ShowCustomError("Manifest info is null or protection header is null", true, true);
}
}
private void OnLAcquirerCompleted(object sender, AcquireLicenseCompletedEventArgs e)
{
if (e.Error != null)
{
this.ShowCustomError(string.Format("Server response error: {0}", e.Error), true, true);
}
else if (e.Cancelled)
{
this.ShowCustomError(string.Format("Manual license acquier request was cancelled"), true, true, true);
}
else
{
this.Play();
}
}
答案 3 :(得分:0)
我发现升级到Silverlight 5经常会破坏Silverlight使用的PlayReady安装,当您尝试播放时会产生无意义的错误。
对我有用的修复是:
%ProgramData%\Microsoft\PlayReady
(请注意,这也将删除所有持久许可)在某些机器上,我需要多次重复此过程才能让PlayReady再次运行。