目录
需求
预备知识
您应该对网络上的流视频和为Flash编码视频有一般的了解。
用户水平
中级
需要的产品
- Flash Access
- Flash Media Server(下载试用版)
- 开源媒体框架
示例文件
Adobe HTTP Dynamic Streaming由Adobe开发,用于通过HTTP向用户传送内容,支持根据可供用户使用的带宽动态切换视频内容质量。它在与Adobe Flash Accesss 2.0结合使用时,对于保护宝贵的资产尤其有效。本文循序渐进地指导您获取Flash媒体视频平台并运行。
以下是在与Flash Access 2.0结合使用时,HTTP Dynamic Streaming内容传送的主要功能:
- 内容回放的许可证管理:无需担忧将内容缓存在用户计算机上。
- 基于HTTP来传送内容,意味着无需使用其他数据协议(比如RTMP或RTMPE)。一个强大的内容传送网络(CDN)提供程序基础结构将为您实现视频传送。
- 回放期间灵活的内容管理,意味着您无需完全下载内容即可开始观看它。在回放过程中,内容碎片缓存在硬盘上。
- 内容加密实现了通过HTTP端口80安全地进行HTTP流式传输。
- 网络存储中的内容保护,意味着内容始终是加密的,无论是在存储期间还是在回放期间。内容逐个数据块地从内存缓存解密。
- 对多位率传输的支持将不同位率的内容编码“链接起来”,支持在回放时快速切换质量。
- 针对传输到外部设备的内容保护阻止了通过模拟端口(S-Video、Component Video)和数字端口(HDMI、DVI、UDI)导出视频。
这些功能满足了大部分主流视频内容版权所有者的需求,进而使您能够在在线资源中保留广泛的内容选择。
系统体系结构
保护内容和使用Flash Access分发它的解决方案可能是使用HTTP Dynamic Streaming技术保护多媒体项目中的内容(参见图1)。
图1. Flash Access Server for Protected Streaming功能图(单击放大)
该解决方案包含4个主要模块(内容阶段):
- 针对Web发布的内容准备
- 内容传送
- 内容保护(授权)
- 内容回放
内容准备(使用File Packager实现视频点播)
内容准备包括使用File Packager工具编码和加密,这支持FLV(VP6/MP3)和F4V(H.264/AAC)文件格式。
在内容回放时应用的策略可由许可证服务器管理,所以您可以为HTTP Dynamic Streaming应用最简单的(匿名的)内容加密策略。
关于详细描述,请查阅本教程的“内容准备”一节。
内容传送(HTTP传送)
内容加密流程创建3种类型的文件:
- F4F加密的内容(碎片)包括回放内容所需的所有必要信息。F4F文件包含可通过它们自己的URL单独访问的大量视频碎片。
- F4Ma描述文件包含内容描述、DRM描述和许可证服务器URL。这是基于SWF的视频播放器将引用来回放视频的文件。
- F4X索引文件包含碎片的描述,以用于快速导航。
对于缓存视频碎片,可以使用一个CDN或Nginx服务器。
许可证服务器
Adobe Flash Access Server for Protected Streaming是一个许可证服务器,向用户发放许可证并管理内容传送策略。关于详细描述,请查阅“配置Flash Access Server for Protected Streaming”一节。
回放
要回放测试内容,您可以使用免费的OSMF播放器。可在“OSMF视频播放器”一节中找到详细描述。
其他工具和模块
要让各项内容正常工作(参见图1),您将必须使用其他一些工具和模块,如下所示。
File Packager(f4fpackager)是一个Adobe控制台应用程序,执行以下操作:
- 创建碎片化的视频文件(F4F)
- 生成描述文件(F4M)
- 应用策略(适用的策略文件在设置中指示)
关于详细说明,请参阅“内容准备”一节。
对于视频内容加密,使用了一种对称块加密算法(AES)以及128位的块和128位的密钥。这是一种加密标准,在CDN中提供了高度的存储安全和内容传送。
HTTP Origin Module for Apache处理对内容碎片的请求。它包含在所有Flash Media Server 4版本中,或者可以从Adobe网站下载它。
关于内容传送流程的详细说明,请参阅“HTTP Origin Module操作”一节。
开源媒体框架是一个可靠且灵活的ActionScript框架,用于快速开发基于SWF的视频播放器。OSMF示例播放器(参见图2)针对HTTP Dynamic Streaming而设计。关于该播放器的详细说明,请参阅“OSMF视频播放器”一节。
图2. OSMF示例播放器
内容准备
要为HTTP传输准备内容,您需要使用File Packager,它提供了以下功能:
- 碎片化(碎片内容准备)
- 加密文件并将它与策略相关联
Windows中的内容碎片化
要在Windows中启用内容碎片化:
- 使用命令行打开一个控制台窗口。
- 导航到包含File Packager(f4fpackager.exe)的目录。
- 输入以下带有参数的命令:
f4fpackager - input-file = sample.f4v - output-path = c: \ sampleoutput
编码完成后,您得到以下文件:sampleSeg1.f4f、sample.f4x和sample.f4m。
Linux中的内容碎片化
要在Linux中启用内容碎片化:
- 打开一个终端窗口。
- 设置LD_LIBRARY_PATH来指定包含File Packager库的目录。
- 在控制台中,键入以下命令和参数:
f4fpackager - input-file = sample.f4v - output-path = / sampleoutput
编码之后,您得到以下文件:sampleSeg1.f4f、sample.f4x和sample.f4m。
具有多种位率的内容碎片化
这包括使用多种位率加密内容:例如150 kbps、700 kbps和1500 kbps。在本例中,3个文件使用不同的位率编码:sample1_150kbps.f4v、sample1_700kbps.f4v和sample1_1500kbps.f4v。在Flash Media Server中。这些文件位于rootinstall\applications\vod\media目录中。
- 将这些文件复制到File Packager目录(对于Flash Media Interactive Server 4,File Packager位于rootinstall\tools\f4fpackager目录中)。
- 使用命令行打开一个控制台窗口。
- 将目录更改为rootinstall\tools\f4fpackager。
- 键入以下命令和参数:
f4fpackager - input-file = sample1_150kbps.f4v - bitrate = 150
编码完成后,您得到以下文件:sample1_150kbpsSeg1.f4f、sample1_150kbps.f4x和sample1_150kbps.f4m。
- 对第二个文件重复编码过程:
f4fpackager - input-file = sample1_700kbps.f4v - manifest-file = sample1_150kbps.f4m - bitrate = 700
编码完成后,您得到以下文件:sample1_700kbpsSeg1.f4f、sample1_700kbps.f4x和sample1_700kbps.f4m。
除了当前编码(sample1_700kbps.f4m)的详细信息,描述文件sample1_700kbps.f4m还包含关于第一次编码的信息(sample1_150kbps.f4m)。
- 对第三个文件重复编码过程:
编码完成后,您得到以下文件:sample1_1500kbpsSeg1.f4f、sample1_1500kbps.f4x和sample1_1500kbps.f4m。
除了当前编码的详细信息,描述文件sample1_1500kbps.f4m包含关于第一次编码(sample1_150kbps.f4m)和第二次编码(sample1_700kbps.f4m)的信息。如果您使用多种位率编码,来自第一个描述文件的信息复制到第二个描述文件,第二个描述文件的信息复制到第三个描述文件,依此类推。
- 要回放多位率内容,打开OSMF播放器。在URL字段中,指定sample1_1500kbps.f4m的路径。
最新的描述文件包含所有3个已编码文件和它们不同的位率的最新信息。
内容加密
File Packager不仅设计用于编码内容,还可以加密内容。使用配置文件,可以非常轻松地设置大量参数:
- 找到配置文件f4fpackager_config.xml。默认情况下,f4fpackager_config.xml位于与File Packager相同的目录。重命名它以易于使用。在文本编辑器中打开它。
- 输入以下设置,更改加粗的值以与您的场景匹配:
#offline <input-file> someFile.f4v </ input-file> <content-id> contentId </ content-id> <common-key> commonKey.bin </ common-key> <license-server-url> http://server1.com:9999 </ license-server-url> <license-server-cert> licenseServer.der </ license-server-cert> <transport-cert> transportCert.der </ transport-cert> <packager-credential> packagerCredential.pfx </ packager-credential> <credential-pwd> mYpwd </ credential-pwd> <policy-file> policyFile.pol </ policy-file> #offline
- 保存配置文件。
- 使用命令行打开控制台窗口。
- 执行命令:
f4fpackager - conf-file = f4fpackager_config.xml
以下是参数的描述
- input-file是源视频文件的路径。
- content-id是您选择的内容标识符。它与common-key参数一起生成内容加密密钥。对整个内容集保持相同的content-id和common-key设置,以确保用户可使用单一许可证解密您的内容集。
- common-key是一个唯一的128位密钥(由OpenSSL工具创建),与content-id一起创建加密密钥。
- license-server-url是Flash Access for Protected Streaming许可证服务器的一个URL。它授权用户许可证。
- license-server-cert是编码之后的许可证服务器证书。它在授权之后从Adobe获取,并且从不更改。
- transport-cert是一个加密的传输证书(.der)。它在授权之后从Adobe获取,并且从不更改。
- packager-credential是一个加密内容的命令(.pfx)。它在授权之后从Adobe获取,并且从不更改。
- credential-pwd是一个密码。它在授权之后从Adobe获取,并且从不更改。
- policy-file是一个策略(.pol)。策略文件可使用java API或Flash Access附带的一个工具(AdobePolicyManager.jar)创建。
所有参数应该包含文件的相对或绝对文件路径。关于File Packager的更多信息,请查阅以下资源:
- File Packager Reference:这个Adobe参考文献提供了File Packager程序和它的参数的详细描述。
- Protecting Content(PDF):这份白皮书提供了策略创建流程的详细描述。
包含已编码内容的文件描述
描述文件(F4M)包含以下内容:
- 位率
- 元数据
- 内容保护(DRM)数据
这是用于内容回放的描述文件的一个示例:
<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns="http://ns.adobe.com/f4m/1.0"> <id> myvideo </ id> <duration> 253 </ duration> <mimeType> video / x-flv </ mimeType> <streamType> recorded </ streamType> <baseURL> http://example.com "</ baseURL> <drmMetadata url="http://mydrmserver.com/mydrmmetadata"/> <bootstrapInfo profile="named" url="/mybootstrapinfo"/> <media url="/myvideo/medium" bitrate="908" width="800" height="600"/> </ Manifest>
这是用于多位率内容回放的描述文件的示例:
<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns="http://ns.adobe.com/f4m/1.0"> <id> myvideo </ id> <duration> 253 </ duration> <mimeType> video / x-flv </ mimeType> <streamType> recorded </ streamType> <baseURL> http://example.com "</ baseURL> <drmMetadata url="http://mydrmserver.com/mydrmmetadata"/> <bootstrapInfo profile="named" url="/mybootstrapinfo"/> <media url="/myvideo/low" bitrate="408" width="640" height="480"/> <media url="/myvideo/medium" bitrate="908" width="800" height="600"/> <media url="/myvideo/high" bitrate="1708" width="1920" height="1080"/> </ Manifest>
内容文件(F4F)包含加密的内容的碎片。您将在白皮书HTTP Dynamic Streaming on the Adobe Flash Platform(PDF)中找到F4F文件的更多信息。
内容传送
当您的视频库准备好通过HTTP Dynamic Streaming传送时,您就可以配置服务器的HTTP基础结构了。内容传送由两个主要模块启用:
- HTTP Origin Module:用于Apache的Adobe插件,用于获取加密视频内容的碎片
- HTTP Cache Module:您喜欢的任何缓存HTTP Web服务器(可选)
HTTP提供了多种流行的工具来实现负载平衡、缓存和适合标准Web内容的有效内容传送。
传送方法对比
表1对比了各种内容传送方法和它们的参数,准确描述了HTTP Dynamic Streaming的优势。
表1. 内容传送方法对比
| RTMP Dynamic Streaming | HTTP渐进下载 | HTTP Dynamic Streaming |
Flash Player版本 | Flash Player 6或更高版本 | Flash Player 7或更高版本 | Flash Player 10.1或更高版本 |
服务质量 | 调节带宽和性能 | 不适用(常常导致糟糕的用户体验) | 调节带宽和性能 |
自适应位率 | 是 | 否 | 是 |
发布工作流 | 简单 | 简单 | 需要封装额外的描述文件 |
内容保护 | 实时(RTMPe)、SWF验证、DRM | DRM仅用于VOD | DRM同时用于实况和VOD |
实况支持 | 是 | 否 | 是 |
实况延迟 | 小于1秒* | 不适用 | 小于30秒** |
同步通信 | 是 | 否 | 不适用 |
日志 | 服务器端 | 否 | 客户端 |
可否缓存 | 否 | 是 | 是 |
RTMP的实况延迟可能因具体的网络基础结构和缓冲区设置不同而不同。
HTTP Dynamic Streaming的实况延迟可能因编码、碎片和缓冲区设置不同而不同。
HTTP Dynamic Streaming的一个最显著的优势在于,具有速度很低的Internet连接的用户可以暂停回放并等待视频内容完全下载。这样,甚至具有窄带Internet连接的用户也可以观看高品质视频,而不会中断。
您将在Adobe白皮书HTTP Dynamic Streaming on the Adobe Flash Platform(PDF)中看到HTTP Dynamic Streaming的特征的更多信息。
HTTP Origin Module操作
要在OSMF播放器中回放内容,您应该制定描述文件(F4M)的URL。下面是它的工作原理:
- OSMF客户端向Web服务器发送一个HTTP请求,例如http://www.example.com/media/http_dynamic_Streaming.f4m。
- Apache Web服务器将请求发送给HTTP Origin Module。
- HTTP Origin Module将描述文件(F4M)返回到客户端。
- 客户端收到描述文件(F4M)并使用引导数据将编码时间转换为碎片#/碎片#格式。
- 客户端将第二个HTTP请求发送到Apache Web服务器并请求一个特定的内容碎片(F4F),例如http://www.example.com/media/http_dynamic_StreamingSeg1-Frag1。
- Apache Web服务器接收请求并将它传输到HTTP Origin Module。
- HTTP Origin Module使用索引文件(F4X)定义文件(F4F)的偏移(以字节为单位)并将合适的Segment1和Fragment1发送到客户端,例如http://www.example.com/media/http_dynamic_StreamingSeg1.f4f。
碎片化的内容结构(F4F)如图3所示。
图3. 碎片化内容(F4F)的结构
- 客户端收到碎片并回放它。
碎片化内容传送示例
当将内容通过HTTP传送时,传送流程可使用Firefox和安装的FireBug插件分析(参见图4)。
图4. Firebug报告显示HTTP Dynamic Streaming内容传送
为HTTP Dynamic Streaming设置和配置Flash Media Server
要创建HTTP Dynamic Streaming应用程序,执行以下操作:
- 安装Flash Media Interactive Server 4或更新版本。此Flash Media Server版本包含所有需要的包,包括Apache HTTP Server和HTTP Origin Module。
为HTTP Dynamic Streaming设置Flash Media Interactive Server 4的过程已在白皮书HTTP Dynamic Streaming on the Adobe Flash Platform(PDF)中介绍。关于FMS设置和配置的更一般的信息,请查阅Flash Media Server 4.0帮助。
- 准备加密的内容(关于详细信息,请参阅“内容准备”一节)并将它复制到以下目录:
- Windows:C:\Program Files\Adobe\Flash Media Server 4\webroot\vod
- Linux: /opt/adobe/fms/webroot/vod
安装OSMF播放器。将OSMF播放器(包括目录\scripts、\images和\assets)复制到根目录:- Windows:C:\Program Files\Adobe\Flash Media Server 4\webroot
- Linux:/opt/adobe/fms/webroot
注意:如果webroot目录已有“images”目录,将这些文件从OSMF播放器的\images目录复制到webroot\images。
关于更多细节,请参阅“OSMF视频播放器”一节。
- 打开Web浏览器并输入OSMF播放器的地址。默认情况下,该地址为http://localhost/OSMFPlayer.html。
注意:OSMF播放器需要Flash Player 10.1或更高版本。
- 单击Eject并输入地址:http://localhost/vod/sample1_1500kbps.f4m
- 开始回放内容。
对于多位率传输,可以按下Q。按下Q–和Q+以更改回放位率。
许可证服务器
为了管理受保护内容的数字版权和用户访问,Adobe提供了Flash Access Server for Protected Streaming。此服务器向用户发放受保护内容的许可证。
配置Flash Access Server for Protected Streaming
由于应用于内容回放的策略可由许可证服务器自定义,您可以使用最简单的(匿名的)内容保护策略加密内容。
Flash Access Server for Protected Streaming忽略加密文件本身中的策略。相反,在以下配置文件中,内容访问参数和限制需要在服务器端上定义:
- flashaccess-global.xml:全局配置文件
- flashaccess-tenant.xml:租户的配置文件
目录结构
在所有者的全局配置文件中,您可以指定flashaccess-tenant.xml的完整路径或相对于租户的目录的路径(LicenseServer.ConfigRoot/flashaccessserver/tenants/tenantname)。
租户的配置文件:
租户的配置文件flashaccess-tenant.xml提供了控制对租户内容的访问的设置:
- 传输凭据就是证书和私钥。它由Adobe提供。
- 许可证服务器凭据是服务器的授权(证书和私钥)。它由Adobe提供。
- 自定义授权方是可选的。一个自定义类,在请求许可证时处理身份验证。
- 授权封装者列表是可选的。指定标识实体已获授权封装此许可证服务器的内容的证书。
- 使用规则:
- 许可证缓存是可选的。它确定许可证将在用户设备上缓存多长时间。默认情况下,缓存是禁用的。当您启用缓存时,您需要设置缓存结束日期或定义缓存许可证的秒数。要禁用缓存,将缓存间隔设置为0。
注意:Flash Access Server for Protected Streaming发放的所有许可证都仅在24小时(86,400秒)内有效。
- 输出保护用于实现通过模拟或数字端口安全地输出到外部设备。
- AIR和SWF应用程序限制是可选的。它指定允许观看内容的SWF和AIR应用程序列表。
- DRM和运行时模块限制是可选的。它定义最低安全级别。它包含不允许播放内容的旧有应用程序列表。
- 许可证缓存是可选的。它确定许可证将在用户设备上缓存多长时间。默认情况下,缓存是禁用的。当您启用缓存时,您需要设置缓存结束日期或定义缓存许可证的秒数。要禁用缓存,将缓存间隔设置为0。
全局配置文件:
最重要的设置(比如缓存和日志)在全局配置文件flashaccess-global.xml中配置:
- <Caching>:缓存管理参数,例如
<Caching refreshDelaySeconds ="..." numTenants ="..."/>
refreshDelaySeconds确定更新频率。较小的间隔可能影响服务器性能。
numTenants是服务器的租户数量。 - <Logging>:指定日志级别,例如
<Logging level ="..." rollingFrequency =""/>
level确定日志级别。如果它设置为“DEBUG”,则会将大量消息保存到日志文件中。为实现最优性能,Adobe建议将该值设置为“WARN”。但是,存在丢失重要信息的风险,比如授权审计数据。要记录尽可能少的日志,可以将该值设置为“INFO”。
rollingFrequency指定日志文件更改的频率。您可以将该值设置为“MINUTELY”、“HOURLY”、“TWICE- DAILY”、“DAILY”、“WEEKLY”、“MONTHLY”或“NEVER”
使用Flash Access Server for Protected Streaming,在回放内容时使用一条特定策略(参数默认会在Flash Access配置文件中设置):
- 匿名访问
- 许可证在24小时内有效
- 许可证不缓存在用户的计算机中
- 多个许可证会被忽略
- 内容回放上的限制
- 忽略的用户设置
日志
日志文件由Flash Access Server for Protected Streaming创建并位于LicenseServer.LogRoot目录中。
注意:如果当前的日志文件在服务器启动时删除或移动,服务器将不会创建新日志文件,数据可能会在未来丢失。
目录结构:
LicenseServer.LogRoot/ flashaccess-global.log flashaccessserver/ flashaccess-partition.log tenants/ tenantname/ flashaccess-tenant.log
全局日志文件
全局日志文件flashaccess-global.log位于LicenseServer.LogRoot目录中。这个日志文件包含来自Flash Access SDK的消息和服务器初始化时生成的消息。
分区日志文件
flashaccess-partition.log配置文件位于LicenseServer.LogRoot/flashaccesserver目录中。此日志文件包含与请求的许可证相关的消息。
租户日志文件
配置文件flashaccess-tenant.log位于LicenseServer.LogRoot/flashaccesserver/tenants/tenantname中。
此日志文件包含与每个请求的许可证相关的信息。
自定义身份验证
使用自定义身份验证机制需要将一个特殊令牌(AuthenticationToken)插入到许可证请求中:
- 用户的视频播放器请求一个播放内容的许可证。该请求包含一个身份验证令牌。
- 许可证服务器(Flash Access Server for Protected Streaming)接收包含该令牌的请求。
- 许可证服务器处理令牌,通常使用接近生成令牌的服务器的一个外部Web服务。也就是说,与令牌生成Web服务配对使用——一个生成它,另一个验证它。
- 许可证服务器确定令牌是否正确。
- 许可证服务器向用户的视频播放器发送(或不发送)许可证。
为受保护的传输自定义身份验证
要在Flash Access Server for Protected Streaming中启用自定义身份验证,您应该:
- 创建一个类型为自定义身份验证的策略。这种策略可使用Flash Access SDK创建。
- 使用您创建的策略加密一个文件。(参阅“内容加密”一节获取逐步说明)。
- 在配置文件flashaccess-tenant.xml中(在LicenseServer.ConfigRoot/flashaccessserver/tenants/tenantname目录中)使用一个处理类(比如SampleAuthorizer)启用身份验证。
<AuthExtensions> <Extension className="com.adobe.flashaccess.server.license.extension.auth.SampleAuthorizer"/> </AuthExtensions>
关于更多信息,请参阅白皮书Protecting Content(PDF)。
- 在您的开发环境中创建一个身份验证处理类。请参阅下一节。
- 将该类插入到您的身份验证包中,比如auth.jar。您的身份验证包应该放在LicenseServer.ConfigRoot/flashaccessserver/libs目录中。
- 重新启动许可证服务器。
自定义身份验证类实现
要实现自定义身份验证类,执行以下步骤:
- 打开您的开发环境。
- 创建一个项目。为其命名,比如HttpDSAuthorizer。
- 在包com.adobe.flashaccess.server.license.extension.auth中创建一个名为SampleAuthorizer的类(参见图5)。
图5. 单击此处并插入您的图片标题。
- 在SampleAuthorizer类中实现身份验证逻辑:
package com.adobe.flashaccess.server.license.extension.auth; import java.io.DataInputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.logging.Log; public class SampleAuthorizer implements IAuthorizer { public SampleAuthorizer() {} public void authorize(IMessageFacade message, IAuthRequestFacade request, IAuthResponseFacade response, IAuthChain chain, Log log) throws Exception { if(message.getAuthToken() != null){ System.out.println(new String(message.getAuthToken())); URLConnection conn = null; DataInputStream dis = null; boolean authValid = false; try { conn = new URL("http://localhost/auth.jsp?" + new String(message.getAuthToken())).openConnection(); conn.setDoOutput(true); conn.setConnectTimeout(10000); conn.setReadTimeout(10000); dis = new DataInputStream(conn.getInputStream()); String inputLine = null; while ((inputLine = dis.readLine()) != null) if(inputLine.equalsIgnoreCase("auth=true")){authValid = true; k;} } catch (IOException e) { } finally{ if(dis != null) dis.close(); } if(authValid){ chain.execute(message); return; } } throw new Exception("AuthToken error"); } @Override public IAuthorizer clone() { return new SampleAuthorizer(); } }
OSMF视频播放器
要在您的应用程序中播放视频内容,您应该创建一个兼容Flash Access的视频播放器来保护基于OSMF 1.5的内容回放(参见图6)。播放器的源代码已在本文中给出。
图6. 基于OSMF的示例视频播放器,用于观看授权的内容(单击放大)
在初始化视频播放器期间,创建MediaPlayerSprite类的一个新实例。对于它的mediaPlayer属性,设置DRMEvent.DRM_STATE_CHANGE事件处理函数。这意味着在DRMEvent上,将调用onDRMStateChangeHandler方法来分析事件:
private function initMediaPlayer (): void { _mediaPlayerSprite = new MediaPlayerSprite (); _mediaPlayerSprite.mediaPlayer.addEventListener (DRMEvent.DRM_STATE_CHANGE, onDRMStateChangeHandler) addChild (_mediaPlayerSprite); }
addMedia方法用户添加要播放的新流。此方法创建URLResource类的一个实例,内容URL(比如http://server_url/content.f4m)传递给类构造函数。接下来,创建一个新MediaFactory对象和一个F4Melement类实例(该类的构造函数接受您的URLResource),以及一个F4Mloader类实例(它的构造函数接受MediaFactory对象):
private function addMedia (m_url: String): void { var _urlResource: URLResource = new URLResource (m_url); var _factory: MediaFactory = new MediaFactory (); var _f4mElement: F4MElement = new F4MElement (_urlResource, new F4MLoader (_factory)); _mediaPlayerSprite.mediaPlayer.media = _f4mElement; }
只要MediaPlayerSprite类的mediaPlayer属性出现了DRMEvent事件,就会调用onDRMStateChangeHandler方法。此方法对此类型的所有事件进行循环,在它找到一个匹配值时发起某些操作。例如,当出现RMState.AUTHENTICATION_NEEDED事件时,这表明需要身份验证。在这种情况下,身份验证按如下方式执行:
_mediaPlayerSprite.mediaPlayer.authenticate ("test", "test")
其中的两个test分别表示用户名和密码。
应该注意,可以实现身份验证功能来让用户名和密码扮演完全不同的角色(比如作为Web会话标识符):
protected function onDRMStateChangeHandler (evt: DRMEvent): void { switch (evt.drmState) { case DRMState.AUTHENTICATING: break; case DRMState.AUTHENTICATION_COMPLETE: break; case DRMState.AUTHENTICATION_ERROR: break; case DRMState.AUTHENTICATION_NEEDED: _mediaPlayerSprite.mediaPlayer.authenticate ("test", "test"); break; case DRMState.DRM_SYSTEM_UPDATING: break; case DRMState.UNINITIALIZED: break; } }
通过使用这些方法,您可以在基于SWF的视频播放器中回放DRM内容。
如果您需要传递一个令牌以进行身份验证,您应该使用DRMManager中的新API。方法setAuthenticationToken (serverUrl: String , domain: String , token: ByteArray ): void 可用于传递您拥有的任何令牌。
关于更多信息,请参阅ActionScript 3.0参考文档中的DRMManager类部分。
延伸阅读
本教程介绍了使用Flash Access来保护HTTP Dynamic Streaming所提供的内容,包括构建一个兼容Flash Access、基于OSMF的媒体播放器。
此教程中参考的资源提供了更深入的知识和指南:
- File Packager参考文档
- HTTP Dynamic Streaming
- 保护内容(PDF)
- Adobe Flash Platform上的HTTP Dynamic Streaming(PDF)
- Flash Media Server 4(帮助文档)
- Flash Access SDK
- ActionScript 3参考文档中的DRMManager类部分
- 使用数字权限管理(帮助)
另请查阅DENIVIP博客,我们在其中发布与Flash Platform相关的有用内容,比如播客Flash Media Server: URLs tokenization。
原文地址: http://www.infoq.com/cn/vendorcontent/show.action?vcr=1444#header_4