使用 DRMAuthenticateEvent 类

Adobe AIR 1.0 和更高版本

当 NetStream 对象尝试播放保护的内容(播放前需要用户凭据以进行身份验证)时调度 DRMAuthenticateEvent 对象。

DRMAuthenticateEvent 处理函数负责收集所需凭据(用户名、密码和类型)并将这些值传递给 NetStream.setDRMAuthenticationCredentials() 方法以进行验证。每个 AIR 应用程序都必须提供用于获取用户凭据的某种机制。例如,应用程序可以为用户提供一个输入用户名和密码值的简单用户界面。另外,还提供一种处理和限制重复的身份验证尝试次数的机制。

DRMAuthenticateEvent 属性

DRMAuthenticateEvent 类包含以下属性:

属性

说明

authenticationType

指示提供的凭据是针对 Flash Access(“drm”)进行身份验证,还是针对代理服务器(“proxy”)进行身份验证。例如,如果要求用户在针对代理服务器进行身份验证后才能访问 Internet,使用“proxy”选项可使应用程序针对代理服务器进行身份验证。除非使用匿名身份验证,否则在代理身份验证之后,用户必须仍针对 Flash Access 进行身份验证才能获取凭证并播放内容。您可以再次与“drm”选项一起使用 setDRMAuthenticationcredentials() 以针对 Flash Access 进行身份验证。

header

服务器提供的加密内容文件标头。它包含有关加密内容的上下文的信息。

netstream

启动此事件的 NetStream 对象。

passwordPrompt

服务器提供的密码凭据提示。该字符串可以包括所需密码类型的说明。

urlPrompt

服务器提供的 URL 字符串提示。该字符串可以提供要将用户名和密码发送到的位置。

usernamePrompt

服务器提供的用户名凭据提示。该字符串可以包括所需用户名类型的说明。例如,内容提供者可能要求用电子邮件地址作为用户名。

创建 DRMAuthenticateEvent 处理函数

以下示例将创建一个事件处理函数,该事件处理函数将一组硬编码身份验证凭据传递给启动了事件的 NetStream 对象。(此处不包含用于播放视频和确保已成功连接到视频流的代码。)

var connection:NetConnection = new NetConnection(); 
connection.connect(null); 
 
var videoStream:NetStream = new NetStream(connection); 
 
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                            drmAuthenticateEventHandler) 
 
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
{ 
    videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); 
} 

创建用于获取用户凭据的界面

在保护的内容要求进行用户身份验证的情况下,AIR 应用程序通常必须通过用户界面检索用户的身份验证凭据。

以下是一个有关用于获取用户凭据的简单用户界面的 Flex 示例。它由一个包含两个 TextInput 对象(分别针对用户名的和密码凭据)的面板对象组成。该面板还包含一个启动 credentials() 方法的按钮。

<mx:Panel x="236.5" y="113" width="325" height="204" layout="absolute" title="Login"> 
    <mx:TextInput x="110" y="46" id="uName"/> 
    <mx:TextInput x="110" y="76" id="pWord" displayAsPassword="true"/> 
    <mx:Text x="35" y="48" text="Username:"/> 
    <mx:Text x="35" y="78" text="Password:"/> 
    <mx:Button x="120" y="115" label="Login" click="credentials()"/> 
</mx:Panel>

credentials() 方法是用户定义的方法,可将用户名和密码值传递给 setDRMAuthenticationCredentials() 方法。一旦传递这些值,credentials() 方法将重置 TextInput 对象的值。

<mx:Script> 
    <![CDATA[ 
        public function credentials():void  
        { 
            videoStream.setDRMAuthenticationCredentials(uName, pWord, "drm"); 
            uName.text = ""; 
            pWord.text = ""; 
        } 
    ]]> 
</mx:Script>

实现此类型的简单界面的一种方法是包含该窗格,将其作为新状态的一部分。新状态来自引发 DRMAuthenticateEvent 对象时的基本状态。以下示例包含其源属性指向保护的 FLV 文件的 VideoDisplay 对象。在此例中,对 credentials() 方法进行了修改,以便该方法也将应用程序返回到基本状态。此方法在传递用户凭据并重置 TextInput 对象值后将执行此操作。

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    width="800" 
    height="500" 
    title="DRM FLV Player" 
    creationComplete="initApp()" > 
 
    <mx:states> 
        <mx:State name="LOGIN"> 
            <mx:AddChild position="lastChild"> 
                    <mx:Panel x="236.5" y="113" width="325" height="204" layout="absolute"  
                            title="Login"> 
                    <mx:TextInput x="110" y="46" id="uName"/> 
                    <mx:TextInput x="110" y="76" id="pWord" displayAsPassword="true"/> 
                    <mx:Text x="35" y="48" text="Username:"/> 
                    <mx:Text x="35" y="78" text="Password:"/> 
                    <mx:Button x="120" y="115" label="Login" click="credentials()"/> 
                    <mx:Button x="193" y="115" label="Reset" click="uName.text='';  
                            pWord.text='';"/> 
                </mx:Panel> 
            </mx:AddChild> 
        </mx:State> 
    </mx:states> 
 
    <mx:Script> 
        <![CDATA[ 
                import flash.events.DRMAuthenticateEvent; 
            private function initApp():void  
            { 
                videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                                        drmAuthenticateEventHandler); 
            } 
 
            public function credentials():void  
            { 
                videoStream.setDRMAuthenticationCredentials(uName, pWord, "drm"); 
                uName.text = ""; 
                pWord.text = ""; 
                currentState=''; 
            } 
 
            private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
            { 
                currentState='LOGIN'; 
            } 
        ]]> 
    </mx:Script> 
     
    <mx:VideoDisplay id="video" x="50" y="25" width="700" height="350" 
        autoPlay="true" 
        bufferTime="10.0" 
        source="http://www.example.com/flv/Video.flv" /> 
</mx:WindowedApplication>