-
使用 URLLoader 对象,加载受保护内容的元数据文件的字节。将此对象设置为变量,例如
metadata_bytes
。
由 Adobe Access 控制的所有内容都包含 Adobe Access 元数据。打包内容时,可同时将此元数据另存为一个单独的元数据文件 (.metadata)。有关详细信息,请参阅 Adobe Access 文档。
-
创建 DRMContentData 实例。将此代码置于 try-catch 块中:
new DRMContentData(
metadata_bytes
)
其中
metadata_bytes
是步骤 1 中获取的 URLLoader 对象。
-
(仅限 Flash Player)运行时检查 Adobe Access 模块。如果未找到,将引发 IllegalOperationError,并显示 DRMErrorEvent 错误代码 3344 或 DRMErrorEvent 错误代码 3343。
要处理此错误,请使用 SystemUpdater API 下载 Adobe Access 模块。下载此模块后,SystemUpdater 对象将调度 COMPLETE 事件。调度此事件时,包括将返回到步骤 2 的此事件的事件侦听器。下面的代码演示了这些步骤:
flash.system.SystemUpdater.addEventListener(Event.COMPLETE, updateCompleteHandler);
flash.system.SystemUpdater.update(flash.system.SystemUpdaterType.DRM)
private function updateCompleteHandler (event:Event):void {
/*redo step 2*/
drmContentData = new DRMContentData(metadata_bytes);
}
如果必须更新播放器本身,则会调度状态事件。有关处理此事件的详细信息,请参阅
侦听更新事件
。
注:
在 AIR 应用程序中,AIR 安装程序将处理更新 Adobe Access 模块和所需的运行时更新。
-
创建侦听器以侦听从 DRMManager 对象调度的 DRMStatusEvent 和 DRMErrorEvent:
DRMManager.addEventListener(DRMStatusEvent.DRM_STATUS, onDRMStatus);
DRMManager.addEventListener(DRMErrorEvent.DRM_ERROR, onDRMError);
在 DRMStatusEvent 侦听器中,检查凭证是否有效(不是 null)。在 DRMErrorEvent 侦听器中,处理 DRMErrorEvent。请参阅
使用 DRMStatusEvent 类
和
使用 DRMErrorEvent 类
。
-
加载播放内容所需的凭证(许可证)。
首先,尝试加载本地存储的许可证以播放内容:
DRMManager.loadvoucher(drmContentData, LoadVoucherSetting.LOCAL_ONLY)
加载完成后,DRMManager 对象将调度
DRMStatusEvent.DRM_Status
。
-
如果 DRMVoucher 对象不是 null,则凭证有效。跳到步骤 13.
-
如果 DRMVoucher 对象为 null,请检查此内容的策略所需的身份验证方法。使用
DRMContentData.authenticationMethod
属性。
-
如果身份验证方法是
ANONYMOUS
,请转到步骤 13。
-
如果身份验证方法是
USERNAME_AND_PASSWORD
,您的应用程序必须提供一个允许用户输入凭据的机制。将这些凭据传递给许可证服务器以对用户进行身份验证:
DRMManager.authenticate(metadata.serverURL, metadata.domain, username, password)
如果身份验证失败,DRMManager 调度
DRMAuthenticationErrorEvent
,如果身份验证成功,则调度
DRMAuthenticationCompleteEvent
。为这些事件创建侦听器。
-
如果身份验证方法为
UNKNOWN
,则必须使用自定义身份验证方法。在此情况下,内容提供商已安排使用带外方式完成身份验证,而不使用 ActionScript 3.0 API。自定义身份验证过程必须生成一个能够传递给
DRMManager.setAuthenticationToken()
方法的身份验证令牌。
-
如果身份验证失败,您的应用程序必须返回步骤 9。确保您的应用程序具有处理和限制重复的身份验证失败次数的机制。例如,经过三次尝试后,向用户显示一则消息,指示身份验证失败,无法播放内容。
-
要使用存储的令牌,而不是提示用户输入凭据,请使用
DRMManager.setAuthenticationToken()
方法设置该令牌。然后,从许可证服务器下载许可证并按照步骤 8 中的说明播放内容。
-
(可选)如果身份验证成功,您可以捕获身份验证令牌,该令牌是在内存中缓存的字节数组。获取此令牌,其属性为
DRMAuthenticationCompleteEvent.token
。您可以存储并使用该身份验证令牌,以便用户不必为此内容重复输入凭据。许可证服务器确定身份验证令牌的有效期。
-
如果身份验证成功,则从许可证服务器下载许可证:
DRMManager.loadvoucher(drmContentData, LoadVoucherSetting.FORCE_REFRESH)
加载完成后,DRMManager 对象调度 DRMStatusEvent.DRM_STATUS。侦听此事件,在调度该事件时,您可以播放内容。
-
创建 NetStream 对象,然后调用其
play()
方法以播放视频:
stream = new NetStream(connection);
stream.addEventListener(DRMStatusEvent.DRM _STATUS, drmStatusHandler);
stream.addEventListener(DRMErrorEvent.DRM_ERROR, drmErrorHandler);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
video.attachNetStream(stream);
stream.play(videoURL);