Nozioni fondamentali sul flusso di contenuto protettoFlash Player 10.1 e versioni successive, Adobe AIR 2.0 e versioni successive Il flusso di lavoro di alto livello seguente mostra in che modo un'applicazione può recuperare e riprodurre contenuto protetto. Il flusso di lavoro presuppone che l'applicazione sia progettata specificatamente per riprodurre contenuto protetto da Flash Access:
Qualora non si sia verificato alcun errore e l'utente sia stato autorizzato a visualizzare il contenuto, l'oggetto NetStream invia un oggetto DRMStatusEvent e l'applicazione inizia la riproduzione. L'oggetto DRMStatusEvent contiene le informazioni del voucher correlate che identificano i criteri e le autorizzazioni dell'utente. Ad esempio, contiene informazioni riguardo la possibilità di rendere il contenuto disponibile offline o relative alla data di scadenza della licenza. L'applicazione può utilizzare questi dati per informare l'utente sullo stato dei criteri. Ad esempio, l'applicazione può visualizzare in una barra di stato il numero di giorni rimanenti per cui l'utente può visualizzare il contenuto. (Solo AIR) Se all'utente viene concesso l'accesso offline, il voucher viene memorizzato nella cache e il contenuto crittografato viene scaricato nel computer dell'utente e reso accessibile per la durata definita nel periodo di leasing offline. La proprietà detail dell'evento contiene "DRM.voucherObtained". Il contenuto viene memorizzato localmente in modo automatico affinché possa essere disponibile offline. È inoltre possibile precaricare voucher mediante la classe DRMManager. Tutti gli errori correlati a DRM determinano l'invio di un oggetto evento DRMErrorEvent da parte dell'applicazione o, in AIR, un oggetto DRMAuthenticationErrorEvent. È responsabilità dell'applicazione gestire esplicitamente tutti gli altri eventi errore. Questi eventi includono i casi in cui l'utente immette credenziali valide, ma il voucher di protezione del contenuto crittografato limita l'accesso al contenuto. Ad esempio, un utente autenticato non può accedere al contenuto se i diritti non sono stati pagati. Questo caso si può verificare anche quando due membri registrati dello stesso editore tentano di condividere contenuto che solo uno dei due ha pagato. L'applicazione deve informare l'utente dell'errore e fornire un suggerimento alternativo. Un suggerimento alternativo tipico è fornire istruzioni su come eseguire la registrazione e pagare per i diritti di visualizzazione. Flusso di lavoro API dettagliatoQuesto flusso di lavoro fornisce una visualizzazione più dettagliata del flusso di lavoro con contenuto protetto e descrive le API specifiche utilizzate per riprodurre contenuto protetto da Flash Access.
Eventi correlati a DRMIl runtime invia numerosi eventi quando un'applicazione tenta di riprodurre contenuto protetto:
Per supportare contenuto protetto da Flash Access, aggiungete listener di eventi per la gestione di eventi DRM. Precaricamento di voucher per la riproduzione non in lineaPotete precaricare i voucher (licenze) richieste per riprodurre contenuto protetto da Flash Access. I voucher precaricati consentono agli utenti di visualizzare il contenuto, con o senza una connessione Internet attiva. (Il processo stesso di precaricamento richiede una connessione Internet). Potete utilizzare il metodo preloadEmbeddedMetadata() della classe NetStream e la classe DRMManager per precaricare i voucher. In AIR 2.0 e versioni successive, potete utilizzare un oggetto DRMContentData per precaricare i voucher direttamente. Questa tecnica è preferibile poiché consente di aggiornare l'oggetto DRMContentData in maniera indipendente dal contenuto. (Il metodo preloadEmbeddedData() recupera DRMContentData dal contenuto.) Uso di DRMContentDataI passaggi seguenti descrivono il flusso di lavoro di precaricamento del voucher per un file multimediale protetto utilizzando un oggetto DRMContentData.
Uso di preloadEmbeddedMetadata()Di seguito viene descritto il flusso di lavoro per precaricare il voucher per un file multimediale protetto da DRM utilizzando preloadEmbeddedMetadata().
L'esempio di codice per AIR riportato di seguito illustra come precaricare un voucher per un file multimediale locale: 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();
}
}
}
|
|