none
使用DRM做发布License的网页时,为什么会授权两次数量??? RRS feed

  • 常规讨论

  • 我用DRM10.1.1版的SDK在VS2005下用C#建立了ASP.NET网页,想试验一下发布License所以将ASP的示例换成了ASP.NET的。 我引用了wmrmobjs.dll文件, 但是授权的时候,授权数量却下发了两次,这是什么原因?如果把播放器的自动获取受保护内容的许可证勾掉,就会授权一次,至今没搞明白怎么回事?但是DRM自带的ASP例子没有这个问题,肯定是我程序的BUG,请大家指点一下,谢谢.

    打开播放器(Windows Media Player)-->工具-->选项-->隐私-->自动获取受保护内容的许可证,如果选择,会授权两次数量。

    using System;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using DRMREHEADERLib;
    using ENROLLOBJLib;
    using LICENSESERVERLib;
    using WMRMOBJSLib;
    using SENTINELKEYSCOMLib;

    public partial class _Default : System.Web.UI.Page
    {

       //定义全局的客户端许可证证书
        public string sLicResponse;

       protected void Page_Load(object sender, EventArgs e)
        {   
                    Boolean silent;         
                    silent = true;

                    if (Request.Form["nonsilent"] != "") 
                    {        
                        silent = false;    
                    }     
                    try    
                    {
                        Response.BufferOutput = true;
                        Response.Expires = 0;

                        //声明变量和对象

                        String contentowner_publickey = (String)Application["contentserverpubkey"]; //公钥

                        String key;

                        //MovieInfo info = null; 

                        //创建对象   
                        WMRMChallenge challenge = new WMRMChallengeClass();  //请求处理许可对象(WMRMChallenge)
                        WMRMHeader header = new WMRMHeaderClass(); //管理加密文件头的对象(WMRMHeader)
                        WMRMKeys keysObj = new WMRMKeysClass();  //管理密钥和种子的一个对象(WMRMKeys)
                        WMRMRights rightsObj = new WMRMRightsClass();  //指定加密视频内容的使用权限(WMRMRights)
                        WMRMLicGen licGen = new WMRMLicGenClass();  //创建并签名一个许可(WMRMLicGen)
                        WMRMResponse responseObj = new WMRMResponseClass();  //将许可递交给客户端(WMRMResponseClass)

                        // We load the encrypted challenge information 

                        //获取客户端的证书请求信息,将证书请求信息存入 WMRMChallenge 对象
                        challenge.Challenge = Request.Form.Get("challenge");               

                        //从challenge中获取文件头信息,将 header 信息存入 WMRMHeader 对象
                        header.Header = challenge.Header;
                        keysObj.KeyID = header.KeyID;
                        
                        keysObj.Seed = (String)Application["seed"];
                        key = keysObj.GenerateKey();

                        //设置所颁发证书中包含的权限
                        /*-----------------------------------------开始设置权限------------------------------------------*/
                        rightsObj.MinimumSecurityLevel = 1000; //最小的安全级别
                        rightsObj.AllowPlay = true;//允许播放视频
                        //rightsObj.ExpirationOnStore = 1; //指定用户的许可证保存时间
                        //rightsObj.Playcount = 1;  //每播放一次弹出许可证对话框
                        rightsObj.BeginDate = mBeginDate;//许可证起始时间
                        rightsObj.ExpirationDate = mExpirationDate;//许可证失效时间
                        rightsObj.AllowCopy = false;//表示不允许复制文件
                        rightsObj.AllowCollaborativePlay = false;
                        rightsObj.AllowBackupRestore = 1;//这个不允许备份许可证
                        rightsObj.AllowPlayOnPC = 1;//表示允许在PC机上播放
                        rightsObj.AllowBurnToCD = 0;//表示不允许烧录到CD上
                        rightsObj.AllowTransferToNonSDMI = 0;//表示不允许把文件转移到非SDMI设备上
                        rightsObj.AllowTransferToSDMI = 0;//表示不允许把文件转移到SDMI设备上
                        rightsObj.DisableOnClockRollback = 0;//当客户端机器时间更改到更早时间时,该证书失效;
                        rightsObj.DeleteOnClockRollback = 0;//当客户端机器时间更改到更早时间时,该证书自动删除;
                        rightsObj.PMRights = 51;
                        rightsObj.PMAppSecurity = 150;

                        //获取头对象中的 key ID ,并存入证书中。
                        licGen.KeyID = keysObj.KeyID;
                        licGen.SetKey("", key);
                        licGen.Priority = 10;

                        //获取定义权限的字符串,并且设置证书中的权限
                        licGen.Rights = rightsObj.GetAllRights();

                        //在证书中设置证书服务器的名字
                        licGen.set_Attribute("Copyright", "(c) 2009 China");
                        licGen.set_Attribute("ContentType", "Video");
                        licGen.set_Attribute("Author", "LiuWei");
                        licGen.set_Attribute("ArtistURL", "http://localhost/");
                        licGen.set_Attribute("Title", "Test");

                        //从 challenge 中获取客户端信息
                        licGen.ClientInfo = challenge.ClientInfo;

                        //调用BindToPubKey属性为客户端发送用于验证证书的公钥
                        //当证书中包含一个公钥时,客户端计算机上的 Windows Media Rights Manager
                        //将用之验证证书有效性。公钥包含在 Windows Media License Service 颁发给证书颁发服务器的证书中
                        licGen.BindToPubKey = contentowner_publickey;

                        //创建证书
                        String license = licGen.GetLicenseToDeliver();

                        responseObj.AddLicense("2.0.0.0", license);

                        responseObj.ReplaceQuotesWith = "\"";

                        //获取响应中存储的证书字符串       
                        sLicResponse = responseObj.GetLicenseResponse();
                    }
                    catch (Exception ex)
                    {
                        Response.Write("\\n"); Response.Write(ex.Message);
                    }
             }
    }

    2009年5月11日 0:40

全部回复

  • Media Player 11的选项为:
    “播放或同步文件时自动下载使用权利”

    打开播放器(Windows Media Player 11)-->工具-->选项-->隐私-->自动获取受保护内容的许可证,如果选择,会授权两次数量。

    请大家指点一下,这到底是为什么???
    2009年5月11日 2:10