使用 DRMAuthenticateEvent 類別

Adobe AIR 1.0 以及更新的版本

如果 NetStream 物件嘗試播放的受保護內容,需要在播放之前才進行使用者憑證驗證,則會傳送 DRMAuthenticateEvent 物件。

DRMAuthenticateEvent 處理常式負責收集所需的憑證 (使用者名稱、密碼和類型) 並將這些值傳遞給 NetStream.setDRMAuthenticationCredentials() 方法以供驗證。每個 AIR 應用程式都必須提供某些機制以取得使用者憑證。例如,應用程式可能會提供簡單的使用者介面,讓使用者輸入使用者名稱和密碼值。同時提供機制來處理和限制重複的驗證嘗試。

DRMAuthenticateEvent 屬性

DRMAuthenticateEvent 類別包含下列屬性:

屬性

說明

authenticationType

指出提供的憑證是使用 Adobe Access (「drm」) 或 Proxy 伺服器 (「proxy」) 進行驗證。例如,必要時,「proxy」選項可讓應用程式由 Proxy 伺服器進行驗證,使用者才能存取網際網路。除非使用匿名驗證,否則使用者在 Proxy 驗證後還是必須由 Adobe Access 進行驗證,才能取得憑證並播放內容。您可以再次使用 setDRMAuthenticationcredentials() 搭配「drm」選項,由 Adobe Access 進行驗證。

header

伺服器所提供的加密內容檔案檔頭,當中含有加密內容的情境相關資訊。

此檔頭字串可以傳遞給 Flash 應用程式,讓應用程式建構使用者名稱-密碼對話方塊。檔頭字串可用來做為對話方塊的指示。例如,檔頭可以是「請輸入您的使用者名稱與密碼」。

netstream

起始此事件的 NetStream 物件。

passwordPrompt

由伺服器提供,要求提供密碼憑證的提示。此字串可包含所需之密碼類型的說明。

urlPrompt

由伺服器提供,要求提供 URL 字串的提示。此字串可提供使用者名稱和密碼將傳送的目標位置。

usernamePrompt

由伺服器提供,要求提供使用者名稱憑證的提示。此字串可包含所需之使用者名稱類型的說明。例如,內容提供者可要求以電子郵件地址做為使用者名稱。

先前提及的字串只能由 FMRMS 伺服器提供。Adobe Access 伺服器不使用這些字串。

建立 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 物件時的基礎狀態。下列範例包含 VideoDisplay 物件,而其 source 特質指向保護的 FLV 檔案。在這個例子中, 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>