Описание технологического процесса защищенного содержимогоFlash Player 10.1 и более поздних версий, Adobe AIR 2.0 и более поздних версий С помощью следующего технологического процесса высокого уровня показано, как приложение может получать и воспроизводить защищенное содержимое. В этом технологическом процессе подразумевается, что приложение создано специально для воспроизведения содержимого, защищенного Flash Access:
Если операция выполнена без ошибок и пользователь авторизован для просмотра содержимого, объект NetStream отправляет объект DRMStatusEvent. В программе начинается воспроизведение. Объект DRMStatusEvent содержит необходимую информацию о ваучере, которая определяет политику и разрешения для пользователя. Например, в нем хранится информация о том, может ли содержимое быть доступно в автономном режиме, или информация об окончании срока действия лицензии. Эти данные могут использоваться приложением для сообщения пользователю статуса его разрешения. Например, в приложении может отображаться число дней, оставшихся до конца периода просмотра. (только для AIR) Если пользователю разрешен доступ в автономном режиме, ваучер кэшируется и зашифрованное содержимое загружается на компьютер пользователя. Содержимое доступно в течение заданного периода аренды в автономном режиме. Свойство события detail содержит запись "DRM.voucherObtained". Приложение определяет, где хранить содержимое в системе пользователя, чтобы оно было доступно в автономном режиме. Можно также предварительно загрузить ваучеры с помощью класса DRMManager. Появление любых связанных с DRM ошибок в приложении влечет отправку объекта события DRMErrorEvent, а в среде AIR — отправку объекта DRMAuthenticationErrorEvent. Все остальные ошибки обрабатывает исключительно программа. Это касается и случаев, когда пользовать вводит верные учетные данные, но ваучер, защищающий зашифрованное содержимое, запрещает доступ к содержимому. Например, пользователь, прошедший проверку подлинности, не может получать доступ к содержимому, если не оплачены права доступа. Такая ситуация может настать, если два зарегистрированных участника пытаются обратиться к содержимому издателя, за которое заплатил только один из них. Программа сообщит пользователю об ошибке и предложит варианты действий. Типичным предлагаемым вариантом являются инструкции по регистрации и оплате просмотра. Подробный технологический процесс API-интерфейсаС помощью этой последовательности действий приводится более подробное описание технологического процесса защищенного содержимого. В этом технологическом процессе описаны определенные API-интерфейсы, используемые для воспроизведения содержимого, защищенного Flash Access.
События, связанные с DRMСреда выполнения отправляет многочисленные события, когда в приложении предпринимается попытка воспроизвести защищенное содержимое:
Для поддержки содержимого, защищенного Flash Access, добавьте прослушиватели событий для обработки событий DRM. Предварительная загрузка ваучеров для автономного воспроизведенияМожно предварительно загрузить ваучеры (лицензии), требуемые для воспроизведения содержимого, защищенного Flash Access. Предварительно загруженные ваучеры позволяют пользователям просматривать содержимое независимо от наличия доступа в Интернет. (Но для самого процесса предварительной загрузки требуется подключение к Интернету.) Для предварительной загрузки ваучеров можно использовать метод preloadEmbeddedMetadata() класса NetStream и класс DRMManager. В среде AIR 2.0 и более поздней версии для непосредственной предварительной загрузки ваучеров можно использовать объект DRMContentData. Этот метод является предпочтительным, поскольку он позволяет обновлять объект DRMContentData независимо от содержимого. (Метод preloadEmbeddedData() извлекает объект DRMContentData из содержимого.) Использование объекта DRMContentDataСледующие действия описывают технологический процесс предварительной загрузки ваучера для защищенного файла мультимедиа с использованием объекта DRMContentData.
Использование метода preloadEmbeddedMetadata()Следующие действия описывают технологический процесс предварительной загрузки ваучера для DRM-защищенного файла мультимедиа с использованием метода preloadEmbeddedMetadata():
Следующий пример кода для среды AIR показывает способ начальной загрузки ваучера для локального файла мультимедиа: 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();
}
}
}
|
|