具有Flash Access保护的HTTP Dynamic Streaming

目录

  • 系统体系结构
  • 内容准备
  • 内容传送
  • 许可证服务器
  • 自定义身份验证
  • OSMF视频播放器
  • 延伸阅读

需求

预备知识

您应该对网络上的流视频和为Flash编码视频有一般的了解。

用户水平

中级


需要的产品

  • Flash Access
  • Flash Media Server(下载试用版)
  • 开源媒体框架

示例文件

  • dynamic-streaming-protection.zip

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中启用内容碎片化:

  1. 使用命令行打开一个控制台窗口。
  2. 导航到包含File Packager(f4fpackager.exe)的目录。
  3. 输入以下带有参数的命令:
    f4fpackager - input-file = sample.f4v - output-path = c: \ sampleoutput

编码完成后,您得到以下文件:sampleSeg1.f4f、sample.f4x和sample.f4m。

Linux中的内容碎片化

要在Linux中启用内容碎片化:

  1. 打开一个终端窗口。
  2. 设置LD_LIBRARY_PATH来指定包含File Packager库的目录。
  3. 在控制台中,键入以下命令和参数:
    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目录中。

  1. 将这些文件复制到File Packager目录(对于Flash Media Interactive Server 4,File Packager位于rootinstall\tools\f4fpackager目录中)。
  2. 使用命令行打开一个控制台窗口。
  3. 将目录更改为rootinstall\tools\f4fpackager。
  4. 键入以下命令和参数:
    f4fpackager - input-file = sample1_150kbps.f4v - bitrate = 150

    编码完成后,您得到以下文件:sample1_150kbpsSeg1.f4f、sample1_150kbps.f4x和sample1_150kbps.f4m。

  5. 对第二个文件重复编码过程:
    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)。

  6. 对第三个文件重复编码过程:

    编码完成后,您得到以下文件:sample1_1500kbpsSeg1.f4f、sample1_1500kbps.f4x和sample1_1500kbps.f4m。

    除了当前编码的详细信息,描述文件sample1_1500kbps.f4m包含关于第一次编码(sample1_150kbps.f4m)和第二次编码(sample1_700kbps.f4m)的信息。如果您使用多种位率编码,来自第一个描述文件的信息复制到第二个描述文件,第二个描述文件的信息复制到第三个描述文件,依此类推。

  7. 要回放多位率内容,打开OSMF播放器。在URL字段中,指定sample1_1500kbps.f4m的路径。

最新的描述文件包含所有3个已编码文件和它们不同的位率的最新信息。

内容加密

File Packager不仅设计用于编码内容,还可以加密内容。使用配置文件,可以非常轻松地设置大量参数:

  1. 找到配置文件f4fpackager_config.xml。默认情况下,f4fpackager_config.xml位于与File Packager相同的目录。重命名它以易于使用。在文本编辑器中打开它。
  2. 输入以下设置,更改加粗的值以与您的场景匹配:
    #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
    
  3. 保存配置文件。
  4. 使用命令行打开控制台窗口。
  5. 执行命令:
    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。下面是它的工作原理:

  1. OSMF客户端向Web服务器发送一个HTTP请求,例如http://www.example.com/media/http_dynamic_Streaming.f4m。
  2. Apache Web服务器将请求发送给HTTP Origin Module。
  3. HTTP Origin Module将描述文件(F4M)返回到客户端。
  4. 客户端收到描述文件(F4M)并使用引导数据将编码时间转换为碎片#/碎片#格式。
  5. 客户端将第二个HTTP请求发送到Apache Web服务器并请求一个特定的内容碎片(F4F),例如http://www.example.com/media/http_dynamic_StreamingSeg1-Frag1。
  6. Apache Web服务器接收请求并将它传输到HTTP Origin Module。
  7. HTTP Origin Module使用索引文件(F4X)定义文件(F4F)的偏移(以字节为单位)并将合适的Segment1和Fragment1发送到客户端,例如http://www.example.com/media/http_dynamic_StreamingSeg1.f4f。

    碎片化的内容结构(F4F)如图3所示。

    图3. 碎片化内容(F4F)的结构

  8. 客户端收到碎片并回放它。

碎片化内容传送示例

当将内容通过HTTP传送时,传送流程可使用Firefox和安装的FireBug插件分析(参见图4)。

图4. Firebug报告显示HTTP Dynamic Streaming内容传送

为HTTP Dynamic Streaming设置和配置Flash Media Server

要创建HTTP Dynamic Streaming应用程序,执行以下操作:

  1. 安装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帮助。

  2. 准备加密的内容(关于详细信息,请参阅“内容准备”一节)并将它复制到以下目录:
    • Windows:C:\Program Files\Adobe\Flash Media Server 4\webroot\vod
  3. 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视频播放器”一节。

  4. 打开Web浏览器并输入OSMF播放器的地址。默认情况下,该地址为http://localhost/OSMFPlayer.html。

    注意:OSMF播放器需要Flash Player 10.1或更高版本。

  5. 单击Eject并输入地址:http://localhost/vod/sample1_1500kbps.f4m
  6. 开始回放内容。

对于多位率传输,可以按下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和运行时模块限制是可选的。它定义最低安全级别。它包含不允许播放内容的旧有应用程序列表。

全局配置文件:

最重要的设置(比如缓存和日志)在全局配置文件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)插入到许可证请求中:

  1. 用户的视频播放器请求一个播放内容的许可证。该请求包含一个身份验证令牌。
  2. 许可证服务器(Flash Access Server for Protected Streaming)接收包含该令牌的请求。
  3. 许可证服务器处理令牌,通常使用接近生成令牌的服务器的一个外部Web服务。也就是说,与令牌生成Web服务配对使用——一个生成它,另一个验证它。
  4. 许可证服务器确定令牌是否正确。
  5. 许可证服务器向用户的视频播放器发送(或不发送)许可证。

为受保护的传输自定义身份验证

要在Flash Access Server for Protected Streaming中启用自定义身份验证,您应该:

  1. 创建一个类型为自定义身份验证的策略。这种策略可使用Flash Access SDK创建。
  2. 使用您创建的策略加密一个文件。(参阅“内容加密”一节获取逐步说明)。
  3. 在配置文件flashaccess-tenant.xml中(在LicenseServer.ConfigRoot/flashaccessserver/tenants/tenantname目录中)使用一个处理类(比如SampleAuthorizer)启用身份验证。
    <AuthExtensions> 
        <Extension className="com.adobe.flashaccess.server.license.extension.auth.SampleAuthorizer"/> 
    </AuthExtensions> 

    关于更多信息,请参阅白皮书Protecting Content(PDF)。

  4. 在您的开发环境中创建一个身份验证处理类。请参阅下一节。
  5. 将该类插入到您的身份验证包中,比如auth.jar。您的身份验证包应该放在LicenseServer.ConfigRoot/flashaccessserver/libs目录中。
  6. 重新启动许可证服务器。

自定义身份验证类实现

要实现自定义身份验证类,执行以下步骤:

  1. 打开您的开发环境。
  2. 创建一个项目。为其命名,比如HttpDSAuthorizer
  3. 在包com.adobe.flashaccess.server.license.extension.auth中创建一个名为SampleAuthorizer的类(参见图5)。

    图5. 单击此处并插入您的图片标题。

  4. 在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)。播放器的源代码已在本文中给出。

具有Flash Access保护的HTTP Dynamic Streaming_第1张图片

图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

你可能感兴趣的:(具有Flash Access保护的HTTP Dynamic Streaming)