NetStream 类中与 DRM 相关的成员和事件

Flash Player 10.1 和更高版本,Adobe AIR 1.0 和更高版本

NetStream 类提供 Flash Player 或 AIR 应用程序与 Flash Media Server 或本地文件系统之间的单向流连接。(NetStream 类还支持渐进式下载。)NetStream 对象是 NetConnection 对象中的一个通道。NetStream 类调度四个与 DRM 相关的事件:

事件

说明

drmAuthenticate

(仅限 AIR)

在 DRMAuthenticateEvent 类中定义。NetStream 对象尝试播放保护的内容(播放前需要用户凭据以进行身份验证)时调度此事件。

此事件的属性包括 header、usernamePrompt、passwordPrompt 和 urlPrompt,这些属性可用于获取和设置用户凭据。此事件将重复发生,直到 NetStream 对象获得有效的用户凭据。

drmError

在 DRMErrorEvent 类中定义,在 NetStream 对象尝试播放保护的内容并遇到与 DRM 相关的错误时调度。例如,当用户授权失败时,将调度 DRM 错误事件对象。如果用户没有购买查看内容的权限,可能发生此错误。如果内容提供商不支持查看应用程序,也可能发生此错误。

drmStatus

在 DRMStatusEvent 类中定义。在开始播放保护的内容(如果已对用户进行身份验证并授权播放该内容)时调度此事件。DRMStatusEvent 对象包含与凭证有关的信息。凭证信息包括是否可以脱机使用该内容或凭证何时过期而无法再查看该内容。

状态

在 events.StatusEvent 中定义,仅当应用程序尝试通过调用 NetStream.play() 方法播放保护的内容时调度。status 代码属性的值为“DRM.encryptedFLV”。

NetStream 类包含下列特定于 DRM 的方法,这些方法仅限于在 AIR 中使用:

方法

说明

resetDRMVouchers()

删除所有本地缓存的数字权限管理 (DRM) 凭证数据。应用程序必须重新下载凭证,用户才能访问加密内容。

例如,以下代码将删除缓存中的所有凭证:

NetStream.resetDRMVouchers();

setDRMAuthenticationCredentials()

将一组身份验证凭据(即用户名、密码和身份验证类型)传递给 NetStream 对象以进行身份验证。有效身份验证类型包括"drm""proxy"。使用"drm"身份验证类型时,提供的凭据将针对 Flash Access 进行身份验证。使用"proxy"身份验证类型时,凭据将针对代理服务器进行身份验证且必须与代理服务器所需的凭据相匹配。例如,企业可能需要应用程序先针对代理服务器对用户进行身份验证后,用户才可以访问 Internet。使用代理选项可实现此类型的身份验证。除非使用匿名身份验证,否则在代理身份验证之后,用户必须仍针对 Flash Access 进行身份验证才能获取凭证并播放内容。您可以再次使用 setDRMAuthenticationcredentials() 与“drm”选项一起针对 Flash Access 进行身份验证。

preloadEmbeddedMetadata()

分析本地媒体文件,从而得到嵌入的元数据。找到与 DRM 相关的元数据后,AIR 将调用 onDRMContentData() 回调函数。

此外,在 AIR 中,作为调用 preloadEmbeddedMetaData() 方法的结果,NetStream 对象调用 onDRMContentData()onPlayStatus() 回调函数。在媒体文件中遇到 DRM 元数据后,将调用 onDRMContentData() 函数。解析文件后,调用 onPlayStatus() 函数。在分配给 NetStream 实例的 client 对象上必须定义 onDRMContentData()onPlayStatus() 函数。如果使用同一个 NetStream 对象预加载凭证并播放内容,则必须在开始播放前等待由 preloadEmbeddedMetaData() 生成的 onPlayStatus() 调用。

在以下 AIR 代码中,将设置用户名(“administrator”)、密码(“password”)和“drm”身份验证类型以对用户进行身份验证。setDRMAuthenticationCredentials() 方法提供的凭据必须与内容提供者已知并接受的凭据相匹配。这些凭据与用户查看内容所需的用户凭据相同。此处不包含用于播放视频和确保已成功连接到视频流的代码。

var connection:NetConnection = new NetConnection(); 
connection.connect(null); 
 
var videoStream:NetStream = new NetStream(connection); 
 
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                            drmAuthenticateEventHandler) 
 
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
{ 
    videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); 
}