Workflow voor beveiligde inhoudFlash Player 10.1 of hoger, Adobe AIR 2.0 of hoger In de volgende overzichtsworkflow kunt u zien hoe u met een toepassing beveiligde inhoud kunt ophalen en afspelen. Er wordt aangenomen dat de toepassing specifiek is ontworpen voor het afpelen van inhoud die is beveiligd door Flash Access: 
 Als er geen fout is opgetreden en de gebruiker is geautoriseerd om de inhoud weer te geven, verzendt het NetStream-object een DRMStatusEvent-object. Hierna begint de toepassing met het afspelen. Het DRMStatusEvent-object bevat de gerelateerde bongegevens die het beleid en de toegangsrechten voor de gebruiker identificeren. In object vindt u bijvoorbeeld informatie over het feit of de inhoud offline beschikbaar kan worden gemaakt of wanneer de licentie verloopt. De toepassing kan deze gegevens gebruiken om de gebruiker zijn status mee te delen. Voorbeeld: de toepassing kan in een statusbalk aangeven hoeveel dagen de gebruiker de inhoud nog kan bekijken. Als de gebruiker offline toegang heeft, wordt de voucher in het cachegeheugen opgeslagen en wordt de gecodeerde inhoud gedownload naar het apparaat van de gebruiker (alleen AIR). De inhoud is beschikbaar in de tijdsduur die wordt gedefinieerd in de offline leaseperiode. De eigenschap detail in de gebeurtenis bevat "DRM.voucherObtained". De toepassing bepaalt waar de inhoud lokaal wordt opgeslagen om deze vervolgens offline toegankelijk te maken. U kunt vouchers ook vooraf laden met de klasse DRMManager. Bij elke DRM-gerelateerde fout wordt door de toepassing een DRMErrorEvent-gebeurtenisobject verzonden (in AIR is dit een DRMAuthenticationErrorEvent-object. Het is de verantwoordelijkheid van de toepassing om alle andere foutgebeurtenissen expliciet af te handelen. Bijvoorbeeld als de gebruiker geldige gegevens invoert maar de voucher die de gecodeerde inhoud beveiligt, de toegang tot de inhoud beperkt. Zo heeft een geverifieerde gebruiker geen toegang tot de inhoud als er niet voor de rechten is betaald. Hetzelfde geval kan zich tevens voordoen wanneer twee geregistreerde leden van dezelfde uitgever inhoud proberen te delen, waarvoor slechts één van de leden heeft betaald. De toepassing moet de gebruiker op de hoogte stellen van de fout en een alternatieve suggestie bieden. De alternatieve suggestie zou in dit geval kunnen bestaan uit instructies voor het registreren en betalen voor weergaverechten. Gedetailleerde API-workflowHier vindt u een meer gedetailleerde versie van de workflow voor beveiligde inhoud. In deze workflow worden de specifieke API's beschreven waarmee de inhoud die is beveiligd door Flash Access wordt afgespeeld. 
 DRM-gerelateerde gebeurtenissenWanneer een toepassing beveiligde inhoud wil afspelen, verzendt het runtimeprogramma een groot aantal gebeurtenissen: 
 Als u inhoud wilt ondersteunen die wordt beveiligd door Flash Access, moet u gebeurtenislisteners toevoegen om de DRM-gebeurtenissen af te handelen. Bonnen voor offline afspelen vooraf ladenU kunt de vouchers (licenties) die nodig zijn om de door Flash Access beveiligde inhoud af te spelen vooraf laden. Als gebruikers beschikken over vooraf geladen vouchers, kunnen ze de inhoud ook weergeven wanneer ze geen actieve internetverbinding hebben. (Voor het vooraf laden is wel een internetverbinding vereist.) Met de methode preloadEmbeddedMetadata() van de NetStream-klasse en de DRMManager-klasse kunt u vouchers op voorhand laden. Bij AIR 2.0 en hoger kunt u vouchers nu rechtstreeks vooraf laden met een DRMContentData-object. Deze techniek verdient de voorkeur, omdat u het DRMContentData-object onafhankelijk van de inhoud kunt bijwerken. (Met de methode preloadEmbeddedData() wordt DRMContentData opgehaald van de inhoud.) DRMContentData gebruikenDe volgende procedure beschrijft de workflow voor het vooraf laden van de voucher voor een beveiligd mediabestand met een DRMContentData-object. 
 preloadEmbeddedMetadata() gebruikenIn de volgende stappen wordt de workflow beschreven voor het vooraf laden van een voucher voor een DRM-beveiligd mediabestand met preloadEmbeddedMetadata(): 
 In de volgende code voor AIR wordt geïllustreerd hoe u een voucher vooraf kunt laden voor een lokaal mediabestand: package 
{ 
import flash.display.Sprite; 
import flash.events.DRMAuthenticationCompleteEvent; 
import flash.events.DRMAuthenticationErrorEvent; 
import flash.events.DRMErrorEvent;   
import flash.ev ents.DRMStatusEvent; 
import flash.events.NetStatusEvent; 
import flash.net.NetConnection; 
import flash.net.NetStream; 
import flash.net.NetStreamPlayOptions; 
import flash.net.drm.AuthenticationMethod; 
import flash.net.drm.DRMContentData; 
import flash.net.drm.DRMManager; 
import flash.net.drm.LoadVoucherSetting;   
public class DRMPreloader extends Sprite  
{ 
     private var videoURL:String = "app-storage:/video.flv"; 
    private var userName:String = "user"; 
    private var password:String = "password";  
    private var preloadConnection:NetConnection; 
    private var preloadStream:NetStream; 
    private var drmManager:DRMManager = DRMManager.getDRMManager(); 
    private var drmContentData:DRMContentData; 
    public function DRMPreloader():void { 
        drmManager.addEventListener( 
            DRMAuthenticationCompleteEvent.AUTHENTICATION_COMPLETE, 
            onAuthenticationComplete); 
        drmManager.addEventListener(DRMAuthenticationErrorEvent.AUTHENTICATION_ERROR, 
            onAuthenticationError);             
        drmManager.addEventListener(DRMStatusEvent.DRM_STATUS, onDRMStatus); 
        drmManager.addEventListener(DRMErrorEvent.DRM_ERROR, onDRMError); 
        preloadConnection = new NetConnection(); 
        preloadConnection.addEventListener(NetStatusEvent.NET_STATUS, onConnect); 
        preloadConnection.connect(null);            
    } 
 
    private function onConnect( event:NetStatusEvent ):void 
    { 
        preloadMetadata(); 
    } 
    private function preloadMetadata():void 
    { 
        preloadStream = new NetStream( preloadConnection ); 
        preloadStream.client = this; 
        var options:NetStreamPlayOptions = new NetStreamPlayOptions(); 
        options.streamName = videoURL; 
        preloadStream.preloadEmbeddedData( options );                         
    }     
    public function onDRMContentData( drmMetadata:DRMContentData ):void 
    { 
        drmContentData = drmMetadata; 
        if ( drmMetadata.authenticationMethod == AuthenticationMethod.USERNAME_AND_PASSWORD ) 
        { 
            authenticateUser(); 
        } 
        else 
            { 
                getVoucher(); 
            } 
    } 
    private function getVoucher():void 
    { 
        drmManager.loadVoucher( drmContentData, LoadVoucherSetting.ALLOW_SERVER ); 
    } 
 
    private function authenticateUser():void 
    { 
        drmManager.authenticate( drmContentData.serverURL, drmContentData.domain, userName, password ); 
    } 
    private function onAuthenticationError( event:DRMAuthenticationErrorEvent ):void 
    { 
        trace( "Authentication error: " + event.errorID + ", " + event.subErrorID ); 
    } 
 
    private function onAuthenticationComplete( event:DRMAuthenticationCompleteEvent ):void 
    { 
        trace( "Authenticated to: " + event.serverURL + ", domain: " + event.domain ); 
        getVoucher(); 
    } 
    private function onDRMStatus( event:DRMStatusEvent ):void 
    { 
        trace( "DRM Status: " + event.detail); 
        trace("--Voucher allows offline playback = " + event.isAvailableOffline ); 
        trace("--Voucher already cached          = " + event.isLocal ); 
        trace("--Voucher required authentication = " + !event.isAnonymous ); 
    } 
    private function onDRMError( event:DRMErrorEvent ):void 
    { 
        trace( "DRM error event: " + event.errorID + ", " + event.subErrorID + ", " + event.text ); 
    } 
    public function onPlayStatus( info:Object ):void 
    { 
        preloadStream.close(); 
    } 
} 
}
 | 
     
     |