从Silverlight中的MediaElement抛出System.Exception 6028

时间:2011-12-19 09:37:20

标签: c# silverlight silverlight-5.0 playready

从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版本。

4 个答案:

答案 0 :(得分:2)

检查http://blogs.msdn.com/b/playready4/archive/2011/12/08/playready-license-acquisition-fails-after-upgrading-to-silverlight-5.aspx

  

要解决此问题(在过期持久许可证的情况下),我们需要   使用MediaFailed事件处理程序。在处理程序中,如果错误代码是   6028,我们只需要使用LicenseAcquirer来获取许可证。该   LicenseAcquirer可以是自定义LicenseAcquirer或默认值   SSME的LicenseAcquirer。

答案 1 :(得分:2)

只是一个更新,对于新读者来说,这已在Silverlight 5.1.10411.0中得到解决。

Microsoft发布说明:

  

修复了当客户从Silverlight 4升级到Silverlight 5时持久许可证获取失败的问题。

来自:http://www.microsoft.com/getsilverlight/locale/en-us/html/Microsoft%20Silverlight%20Release%20History.htm

答案 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安装,当您尝试播放时会产生无意义的错误。

对我有用的修复是:

  1. 卸载Silverlight 5
  2. 删除%ProgramData%\Microsoft\PlayReady(请注意,这也将删除所有持久许可)
  3. 重新启动。
  4. 重新安装Silverlight 5
  5. 在某些机器上,我需要多次重复此过程才能让PlayReady再次运行。