Förstå arbetsflödet för skyddat innehållFlash Player 10.1 och senare, Adobe AIR 2.0 och senare Följande arbetsflöde på hög nivå beskriver hur ett program kan hämta och spela upp skyddat innehåll. För det här arbetsflödet förutsätts det att programmet utformas särskilt för uppspelning av innehåll som skyddas av Flash Access:
Om inget fel inträffar och användaren autentiserades för att se innehållet, skickar NetStream-objektet ett DRMStatusEvent-objekt. Programmet påbörjar då uppspelningen. DRMStatusEvent-objektet innehåller relaterad voucherinformation, som identifierar användarens policy och behörigheter. Till exempel innehåller det information om innehållet kan göras tillgängligt offline eller när licensen upphör. Programmet kan använda data för att informera användaren om statusen för policyn. Programmet kan till exempel visa i statusfältet hur många dagar till som användaren kan visa innehållet. (Endast AIR) Om användaren tillåts åtkomst offline cachelagras vouchern och det krypterade innehållet laddas ner till användarens dator. Innehållet är tillgängligt under den period som angivits för offlineuthyrningsperioden. Egenskapen detail i händelsen innehåller "DRM.voucherObtained". Programmet avgör var innehållet ska sparas lokalt för att kunna visas offline. Du kan även förhandsladda en voucher med klassen DRMManager. Vid DRM-relaterade fel skickar programmet ett DRMErrorEvent-händelseobjekt, eller i AIR, ett DRMAuthenticationErrorEvent-objekt. Programmet sköter alla andra felhändelser explicit. Dessa händelser omfattar fall där användaren anger giltiga inloggningsuppgifter, men där åtkomsten till innehållet begränsas av vouchern som skyddar det krypterade innehållet. En autentiserad användare kan till exempel inte få åtkomst till innehållet om denne inte har betalat för rättigheterna. Detta kan också inträffa när två användare, som båda är registrerade medlemmar hos samma utgivare, försöker att dela innehåll som bara en av dem har betalat för. Programmet bör informera användaren om felet och presentera ett alternativ. Ett vanligt alternativ är att ge användaren information om hur han/hon registrerar sig och betalar för att få visa innehåll. Utförligt API-arbetsflödeDet här arbetsflödet ger en mer utförlig beskrivning av arbetsflödet för skyddat innehåll. Det här arbetsflödet beskriver de specifika API:er som används för att spela upp innehåll som skyddas av Flash Access.
DRM-relaterade händelserI körningen skickas flera händelser när ett program försöker att spela upp skyddat innehåll:
Om du vill ha stöd för innehåll skyddat av Flash Access lägger du till händelseavlyssnare för hantering av DRM-händelserna. Läsa in vouchers i förväg för uppspelning offlineDu kan ladda voucher (licens) i förväg som krävs för uppspelning av innehåll som skyddas av Flash Access. Med en förladdad voucher kan användarna visa innehållet även om de inte har en aktiv Internetanslutning. (För själva förladdningen krävs dock en Internetanslutning.) Du kan använda metoden preloadEmbeddedMetadata() i NetStream-klassen och DRMManager-klassen för att ladda en voucher i förväg. I AIR 2.0 och senare kan du använda ett DRMContentData-objekt om du vill ladda en voucher. Den här metoden är att föredra eftersom den låter dig uppdatera DRMContentData-objektet oberoende av innehållet. (Metoden preloadEmbeddedData() hämtar DRMContentData från innehållet.) Använda DRMContentDataFöljande steg beskriver hur du läser in vouchern för en skyddad mediefil i förväg med ett DRMContentData-objekt.
Använda preloadEmbeddedMetadata()Följande steg beskriver hur du läser in vouchern för en DRM-skyddad mediefil i förväg med preloadEmbeddedMetadata():
Följande kodexempel för AIR illustrerar hur du läser in en voucher för en lokal mediefil i förväg: 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(); } } } |
|