AIR for TV 应用程序设计注意事项

视频注意事项

视频编码准则

在向电视设备传输视频流时,Adobe 建议采用以下编码原则:

视频编解码器:

H.264,主要或高级配置文件,渐进式编码

分辨率:

720i、720p、1080i 或 1080p

帧速率:

每秒 24 帧或每秒 30 帧

音频编解码器:

AAC-LC 或 AC-3,44.1 kHz,立体声,或这些多频道音频编解码器:E-AC-3、DTS、DTS Express、DTS-HD High Resolution Audio 或 DTS-HD Master Audio

组合比特率:

最高 8M bps,具体取决于可用带宽

音频比特率:

最高 192 Kbps

像素高宽比:

1 × 1

对于传送到 AIR for TV 设备的视频,Adobe 建议使用 H.264 编解码器。

注: AIR for TV 还支持使用 Sorenson Spark 或 On2 VP6 编解码器编码的视频。但是,硬件无法对这些编解码器进行解码并呈现。而是由运行时使用软件对这些编解码器进行解码并呈现,因此,视频会以相当低的帧速率进行播放。因此,请尽可能使用 H.264。

StageVideo 类

AIR for TV 支持对 H.264 编码的视频进行硬件解码并呈现。使用 StageVideo 类可以启用此功能。

请参阅 ActionScript 3.0 开发人员指南 中的 使用 StageVideo 类实现硬件加速呈现 ,了解以下详细信息:

  • StageVideo 类和相关类的 API。

  • StageVideo 类的使用限制。

为了更好地支持使用 Video 对象播放 H.264 编码的视频的现有 AIR 应用程序, AIR for TV 将在 内部 使用 StageVideo 对象。这样做意味着可以利用硬件解码和呈现实现视频播放。但是,Video 对象与 StageVideo 对象具有相同的限制。例如,如果应用程序试图旋转视频,但却无法旋转,这是因为正在使用硬件而非运行时呈现视频。

不过,在编写新应用程序时,请使用 StageVideo 对象来播放 H.264 编码的视频。

有关使用 StageVideo 类的示例,请参阅 在电视上传送 Flash Platform 的视频和内容

视频传输指南

在 AIR for TV 设备上,视频播放期间网络的可用带宽可能会发生变化。例如,当另一个用户开始使用同一 Internet 连接时,可用带宽可能会发生变化。

因此,Adobe 建议在您的视频传输系统中采用自适应比特率功能。例如,在服务器端,Flash Media Server 支持自适应比特率功能。在客户端,可以使用开源媒体框架 (OSMF)。

可以采用以下协议将视频内容通过网络传送到 AIR for TV 应用程序:
  • HTTP 和 HTTPS 动态流(F4F 格式)

  • RTMP、RTMPE、RTMFP、RTMPT 和 RTMPTE 流

  • HTTP 和 HTTPS 渐进式下载

有关详细信息,请参阅以下内容:

音频注意事项

在 AIR for TV 应用程序中,用于播放声音的 ActionScript 与其他 AIR 应用程序中的相应 ActionScript 没有任何不同。有关详细信息,请参阅 ActionScript 3.0 开发人员指南 中的 使用声音

关于 AIR for TV 中的多频道音频支持,请考虑以下事项:

  • AIR for TV 为从 HTTP 服务器渐进式下载的视频提供多频道音频支持。从 Adobe Flash Media Server 流式传输的视频中的多频道音频支持尚不可用。

  • 尽管 AIR for TV 支持许多音频编解码器,但并非所有的 AIR for TV 设备 都支持整套编解码器。使用 flash.system.Capabilities 方法 hasMultiChannelAudio() 检查 AIR for TV 设备是否支持特殊多频道音频编解码器(如 AC-3)。

    例如,考虑从服务器渐进式下载视频文件的应用程序。服务器具有支持不同多频道音频编解码器的各种 H.264 视频文件。应用程序可以使用 hasMultiChannelAudio() 确定要从服务器请求的视频文件。或者,应用程序可以向服务器发送 Capabilities.serverString 中包含的字符串。字符串指示可用的多频道音频编解码器,从而允许服务器选择适当的视频文件。

  • 当使用某个 DTS 音频编解码器时,存在 hasMultiChannelAudio() 返回 true ,但不播放 DTS 音频的情况。

    例如,假设带有 S/PDIF 输出的蓝光播放器连接到旧功放。旧功放不支持 DTS,但 S/PDIF 没有协议通知蓝光播放器。如果蓝光播放器向旧功放发送 DTS 流,则用户什么也听不到。因此,最佳做法是,在使用 DTS 时提供一个用户界面,以便该用户可以知道是否在播放声音。然后,应用程序可以还原到其他的编解码器。

下表概述了何时需要在 AIR for TV 应用程序中使用不同的音频编解码器。该表格还指示 AIR for TV 设备何时使用硬件加速器解码音频编解码器。硬件解码会提高性能并卸载 CPU。

音频编解码器

AIR for TV 设备的可用性

硬件解码

何时使用此音频编解码器

更多信息

AAC

始终可用

始终可用

在采用 H.264 编码的视频中。

对于 Internet 音乐流媒体服务等音频流。

当使用纯音频 AAC 流时,请将音频流封装在 MP4 容器中。

mp3

始终可用

不可用

对于应用程序的 SWF 文件中的声音。

在用 Sorenson Spark 或 On2 VP6 编码的视频中使用。

使用 mp3 音频的 H.264 视频在 AIR for TV 设备上无法播放。

AC-3 (Dolby Digital)

E-AC-3(增强的 Dolby Digital)

DTS Digital Surround

DTS Express

DTS-HD High Resolution Audio

DTS-HD Master Audio

需检查

在采用 H.264 编码的视频中。

通常,AIR for TV 将多频道音频流传递到解码和播放音频的外部音频/视频接收器。

Speex

始终可用

不可用

接收实时语音流。

使用 Speex 音频的 H.264 视频在 AIR for TV 设备上无法播放。Speex 只能与 Sorenson Spark 或 On2 VP6 编码的视频一起使用。

NellyMoser

始终可用

不可用

接收实时语音流。

使用 NellyMoser 音频的 H.264 视频在 AIR for TV 设备上无法播放。NellyMoser 只能与 Sorenson Spark 或 On2 VP6 编码的视频一起使用。

注: 某些视频文件包含两个音频流。例如,视频文件可以同时包含 AAC 流和 AC3 流。AIR for TV 不支持此类视频文件,使用此类文件会导致视频没有声音。

图形硬件加速

使用硬件图形加速

AIR for TV 设备为 2D 图形操作提供了硬件加速功能。设备的硬件图形加速器可以代替 CPU 执行以下操作:

  • 位图呈现

  • 位图缩放

  • 位图混合

  • 实心矩形填充

这种硬件图形加速意味着在 AIR for TV 应用程序中,可以更加高效地执行许多图形操作。其中的一些操作包括:

  • 滑动转换

  • 缩放转换

  • 淡入淡出

  • 使用 alpha 合成多个图像

若要获得此类操作的硬件图形加速性能优势,请使用以下方法之一:

  • 将 MovieClip 对象和内容大部分均为发生更改的其他显示对象的 cacheAsBitmap 属性设置为 true 。然后对这些对象进行滑动转换、淡入淡出转换和 alpha 混合。

  • 在要缩放或平移(应用 X 和 Y 重新定位)的显示对象上使用 cacheAsBitmapMatrix 属性。

    通过使用 Matrix 类操作进行缩放和平移,设备的硬件加速器会执行这些操作。此外,还可以考虑采用以下方案:更改 cacheAsBitmap 属性设置为 true 的显示对象的尺寸。当尺寸发生更改时,运行时软件会重新绘制位图。与使用 Matrix 操作的硬件加速进行缩放相比,使用软件进行重绘的性能要差一些。

    例如,假设有这样一个应用程序,当最终用户选择其中显示的图像时,该图像将扩大。多次使用 Matrix 缩放操作可营造图像逐渐扩大的效果。但是,如果原始图像和最终图像的大小相差过大,最终图像的品质可能无法令人满意。因此,请在扩大操作完成后重置显示对象的尺寸。由于 cacheAsBitmap true ,运行时软件会重新绘制显示对象(但只执行一次),从而可呈现高品质的图像。

    注: AIR for TV 设备通常不支持硬件加速的旋转和倾斜。因此,如果在 Matrix 类中指定旋转和倾斜,AIR for TV 将使用软件执行所有 Matrix 操作。这些软件操作会对性能产生不利影响。
  • 使用 BitmapData 类创建自定义位图缓存行为。

有关位图缓存的详细信息,请参阅以下内容:

管理图形内存

要执行加速图形操作,硬件加速器会使用专用的图形内存。如果应用程序使用了所有图形内存,则应用程序的运行速度会变慢,因为 AIR for TV 会恢复为使用软件执行图形操作。

管理应用程序对图形内存的使用:

  • 使用完图像或其他位图数据后,请释放相关的图形内存。若要释放图形内存,请调用 Bitmap 对象 bitmapData 属性的 dispose() 方法。例如:

    myBitmap.bitmapData.dispose();
    注: 释放对 BitmapData 对象的引用不会立即释放图形内存。运行时的垃圾回收器最终会释放图形内存,但是调用 dispose() 可为应用程序提供更多控制手段。
  • 使用 PerfMaster Deluxe(Adobe 提供的 AIR 应用程序)可更好地了解目标设备上的硬件图形加速功能。此应用程序可显示执行各种操作的每秒帧数。使用 PerfMaster Deluxe 可比较相同操作的不同实现。例如,比较移动位图图像与移动矢量图像。 Flash Platform for TV 提供了 PerfMaster Deluxe。

管理显示列表

要使某个显示对象不可见,请将该对象的 visible 属性设置为 false 。则该对象仍在显示列表中,但 AIR for TV 不会呈现或显示它。此技术对于在视图中来回频繁显示的对象非常有用,因为它只产生少量的处理开销。但是,将 visible 属性设置为 false 不会释放任何对象资源。因此,当您完成某个对象的显示或至少将其显示较长一段时间时,请从显示列表中删除该对象。此外,将对该对象的所有引用设置为 null 。这些操作允许垃圾回收器释放对象资源。

PNG 和 JPEG 图像的使用

PNG 和 JPEG 是应用程序中常用的两种图像格式。关于 AIR for TV 应用程序中的这些图像格式,请考虑以下事项:

  • AIR for TV 通常使用硬件加速来解码 JPEG 文件。

  • AIR for TV 通常使用软件来解码 PNG 文件。使用软件解码 PNG 文件的速度非常快。

  • PNG 是唯一支持透明度(Alpha 通道)的跨平台位图格式。

因此,在应用程序中使用这些图像格式时,请遵循以下原则:

  • 对于照片,请使用 JPEG 文件以享受硬件加速解码的优点。

  • 对于用户界面元素,请使用 PNG 图像文件。可以对用户界面元素进行 alpha 设置,而且,对于用户界面元素,软件解码的性能已足够快。

AIR for TV 应用程序中的舞台

若要创作 AIR for TV 应用程序,在使用 Stage 类时,请考虑以下事项:

  • 屏幕分辨率

  • 安全观看区域

  • 舞台缩放模式

  • 舞台对齐方式

  • 舞台显示状态

  • 多种屏幕尺寸设计

  • 舞台品质设置

屏幕分辨率

目前,电视设备通常具有以下屏幕分辨率之一:540p、720p 和 1080p。这些屏幕分辨率对应于 ActionScript Capabilities 类中的以下值:

屏幕分辨率

Capabilities.screenResolutionX

Capabilities.screenResolutionY

540p

960

540

720p

1280

720

1080p

1920

1080

若要针对特定设备编写 AIR for TV 全屏应用程序,请将 Stage.stageWidth Stage.stageHeight 硬编码为设备的屏幕分辨率。但是,若要编写可在多种设备上运行的全屏应用程序,请使用 Capabilities.screenResolutionX Capabilities.screenResolutionY 属性设置舞台尺寸。

例如:

stage.stageWidth = Capabilities.screenResolutionX; 
stage.stageHeight = Capabilities.screenResolutionY;

安全观看区域

电视机上的 安全观看区域 是指沿屏幕边缘向内缩放而形成的一个屏幕区域。该区域的内缩距离足够大,可确保最终用户能够看到整个区域,而不会被电视外壳的边缘所遮盖。由于电视外壳边缘(形成屏幕的物理边框)的宽度因制造商而异,因此所需的内缩距离也会有所不同。安全观看区域试图保证屏幕可见区域的准确性。安全观看区域也称为 标题安全区域

过扫描 区域是指被外壳边缘遮盖的不可见屏幕区域。

Adobe 建议在屏幕的每个边缘向内缩放 7.5%。例如:

查看完全大小图形
1920 x 1080 屏幕分辨率的安全观看区域

在设计 AIR for TV 全屏应用程序时,应始终考虑安全观看区域:

  • 将整个屏幕用作背景,如背景图像或背景颜色。

  • 仅对关键应用程序元素(如文本、图形、视频和诸如按钮之类的用户界面项目)使用安全观看区域。

下表显示了各种典型屏幕分辨率的安全观看区域尺寸(使用 7.5% 内缩比例)。

屏幕分辨率

安全观看区域的宽度和高度

左边和右边内缩宽度

顶部和底部内缩高度

960 x 540

816 x 460

72

40

1280 x 720

1088 x 612

96

54

1920 x 1080

1632 x 918

144

81

但是,最佳做法是始终动态计算安全观看区域的尺寸。例如:

var horizontalInset, verticalInset, safeAreaWidth, safeAreaHeight:int; 
 
horizontalInset = .075 * Capabilities.screenResolutionX; 
verticalInset = .075 * Capabilities.screenResolutionY; 
safeAreaWidth = Capabilities.screenResolutionX - (2 * horizontalInset); 
safeAreaHeight = Capabilities.screenResolutionY - (2 * verticalInset);

舞台缩放模式

Stage.scaleMod e 设置为 StageScaleMode.NO_SCALE ,并侦听舞台的 resize 事件。

stage.scaleMode = StageScaleMode.NO_SCALE; 
stage.addEventListener(Event.RESIZE, layoutHandler);

此设置使舞台坐标与像素坐标相同。将此设置与 FULL_SCREEN_INTERACTIVE 显示状态和 TOP_LEFT 舞台对齐方式结合使用,可以有效地使用安全观看区域。

具体来说,在全屏应用程序中,此缩放模式意味着 Stage 类的 stageWidth stageHeight 属性与 Capabilities 类的 screenResolutionX screenResolutionY 属性相对应。

此外,当应用程序的窗口大小发生更改时,舞台内容会保持所定义的大小。运行时不执行任何自动布局或缩放。此外,当窗口大小发生更改时,运行时会调度 Stage 类的 resize 事件。因此,当启动应用程序时以及当调整应用程序窗口大小时,您可以完全控制如何调整应用程序的内容。

注: NO_SCALE 行为与任何 AIR 应用程序的行为相同。但是,在 AIR for TV 应用程序中,使用此设置对使用安全观看区域来说至关重要。

舞台对齐方式

Stage.align 设置为 StageAlign.TOP_LEFT

stage.align = StageAlign.TOP_LEFT; 

此对齐方式将 0,0 坐标放置在屏幕的左上角,这便于使用 ActionScript 放置内容。

将此设置与 NO_SCALE 缩放模式和 FULL_SCREEN_INTERACTIVE 显示状态结合使用,可以有效地使用安全观看区域。

舞台显示状态

在 AIR for TV 全屏应用程序中,将 Stage.displayState 设置为 StageDisplayState.FULL_SCREEN_INTERACTIVE

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

设置该值后,AIR 应用程序将扩展舞台以覆盖整个屏幕(允许用户输入)。

Adobe 建议您使用 FULL_SCREEN_INTERACTIVE 设置。将此设置与 NO_SCALE 缩放模式和 TOP_LEFT 舞台对齐方式结合使用,可以有效地使用安全观看区域。

因此,对于全屏应用程序,在主文档类的 ADDED_TO_STAGE 事件的处理函数中,请执行以下操作:

private function onStage(evt:Event):void 
{ 
    stage.scaleMode = StageScaleMode.NO_SCALE; 
    stage.align = StageAlign.TOP_LEFT; 
    stage.addEventListener(Event.RESIZE, onResize); 
    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 
}

然后,在 RESIZE 事件的处理函数中:

  • 将屏幕分辨率的大小与舞台宽度和高度相比较。如果相同,则引发 RESIZE 事件,因为舞台 示状态改变为 FULL_SCREEN_INTERACTIVE

  • 计算并保存安全观看区域的尺寸以及对应的内缩比例。

private function onResize(evt:Event):void 
{ 
    if ((Capabilities.screenResolutionX == stage.stageWidth) && 
        (Capabilities.screenResolutionY == stage.stageHeight)) 
    { 
         
        // Calculate and save safe viewing area dimensions. 
    } 
}

当舞台尺寸等于 Capabilities.screenResolutionX screenResolutionY 时,AIR for TV 会使硬件为您的视频和图形传递可能的最佳保真度。

注: 电视屏幕上图形和视频的显示保真度可能与 Capabilities.screenResolutionX screenResolutionY 值不同,具体取决于运行 AIR for TV 的设备。例如,运行 AIR for TV 的机顶盒的屏幕分辨率为 1280 x 720,而相连电视的屏幕分辨率为 1920 x 1080。不过,AIR for TV 会使硬件传递可能的最佳保真度。因此,在本示例中,硬件会使用 1920 x 1080 的屏幕分辨率显示 1080p 视频。

多种屏幕尺寸设计

您可以按相同方式开发可在多种 AIR for TV 设备上正常运行并显示的 AIR for TV 全屏应用程序。请执行以下操作:

  1. 将舞台属性 scaleMode align displayState 分别设置为推荐值: StageScaleMode.NO_SCALE StageAlign.TOP_LEFT StageDisplayState.FULL_SCREEN_INTERACTIVE

  2. 根据 Capabilities.screenResolutionX Capabilities.screenResolutionY 设置安全观看区域。

  3. 根据安全观看区域的宽度和高度调整您的内容的大小布局。

    虽然您的内容对象非常庞大(尤其是与移动设备应用程序相比),但是诸如动态布局、相对定位和自适应内容之类的概念是相同的。有关 ActionScript 对这些概念的支持的详细信息,请参阅 针对多种屏幕大小创作移动 Flash 内容

舞台品质

AIR for TV 应用程序的 Stage.quality 属性始终为 StageQuality.High 。您无法更改它。

此属性指定所有舞台对象的呈现品质。

遥控器输入处理

用户通常使用遥控器与 AIR for TV 应用程序进行交互。但是,应像在桌面应用程序上处理键盘按键输入时一样,采用相同方式处理按键输入。具体来说,处理事件 KeyboardEvent.KEY_DOWN 。有关更多信息,请参阅 ActionScript 3.0 开发人员指南 中的 捕获键盘输入

遥控器上的按键会映射到 ActionScript 常量。例如,遥控器键盘上的方向键映射如下:

遥控器键盘的方向键

ActionScript 3.0 常量

向上键

Keyboard.UP

向下键

Keyboard.DOWN

向左键

Keyboard.LEFT

向右键

Keyboard.RIGHT

“确定”或“选择”键

Keyboard.ENTER

AIR 2.5 增加了许多其他 Keyboard 常量以支持遥控器输入。有关完整列表,请参阅 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 中的 Keyboard 类

为确保您的应用程序可在尽可能多的设备上运行,Adobe 建议您参考以下做法:

  • 如果可能,仅使用键盘方向键。

    不同的遥控设备具有不同的按键集。但是,它们通常始终包含键盘方向键。

    例如,蓝光播放器的遥控器通常不会有“频道递增”和“频道递减”键。甚至并非所有的遥控器上都有播放、暂停和停止键。

  • 如果应用程序还需要键盘方向键以外的其他按键,请使用“菜单”和“信息”键。

    “菜单”和“信息”键是遥控器上最常用的第二类按键。

  • 考虑通用遥控器的频繁使用。

    即使您正在针对特定设备创建应用程序,也要认识到许多用户并不使用设备附带的遥控器,而是改用通用遥控器。此外,用户并不总是设置他们的通用遥控器来匹配设备遥控器上的所有按键。因此,最好只使用最常用的按键。

  • 确保在任何情况下,用户始终可使用其中一个键盘方向键退出当前环境。

    有时,您的应用程序可能必须使用遥控器上的不常用按键。使用某个键盘方向键提供一种退出方案,可使您的应用程序在所有设备上都能正常使用。

  • 请勿要求指针输入,除非您知道 AIR for TV 目标设备具有指针输入功能。

    虽然许多桌面应用程序期望鼠标输入,但是多数电视不支持指针输入。因此,如果您正在转换桌面应用程序以便其能够在电视机上运行,请确保您将应用程序修改为不要求鼠标输入。这些修改包括对事件处理的更改和对用户使用说明的更改。例如,当显示应用程序的启动屏幕时,不显示“点击开始”文本。

管理焦点

当桌面应用程序的某个用户界面元素获得焦点时,它将成为用户输入事件(如键盘和鼠标事件)的目标。此外,应用程序会加亮显示获得焦点的用户界面元素。在 AIR for TV 应用程序中管理焦点与在桌面应用程序中管理焦点有所不同,原因如下:

  • 桌面应用程序通常使用 tab 键将焦点更改到下一个用户界面元素上。使用 tab 键不适用于 AIR for TV 应用程序。遥控设备通常不具有 tab 键。因此,像在桌面上一样使用 DisplayObject 的 tabEnabled 属性来管理焦点并不适用。

  • 桌面应用程序通常期望用户使用鼠标为用户界面元素提供焦点。

因此,请在您的应用程序中执行以下操作:

  • 为舞台添加可侦听 Keyboard 事件(例如, KeyboardEvent.KEY_DOWN )的事件侦听器。

  • 提供应用程序逻辑以确定向最终用户加亮显示的用户界面元素。当启动应用程序后,确保加亮显示某个用户界面元素。

  • 根据应用程序逻辑,将舞台接收到的 Keyboard 事件调度到相应的用户界面元素对象。

    也可以使用 Stage.focus Stage.assignFocus() 将焦点分配给用户界面元素。然后,可以为该 DisplayObject 添加事件侦听器,以便该对象可接收键盘事件。

用户界面设计

通过采纳针对以下各项提供的建议,使 AIR for TV 应用程序的用户界面能够在电视机上正常工作:

  • 应用程序的响应性能

  • 应用程序的易用性

  • 用户的个性和期望

响应性能

使用以下技巧尽量提高 AIR for TV 应用程序的响应能力。

  • 使应用程序的初始 SWF 文件尽可能小。

    在初始 SWF 文件中,仅加载启动应用程序所必需的资源。例如,仅加载应用程序的启动屏幕图像。

    虽然此建议同样适用于桌面 AIR 应用程序,但在 AIR for TV 设备中更为重要。例如,AIR for TV 设备不具备与桌面计算机同等的处理能力。此外,这些设备将应用程序存储在闪存中,访问闪存要比访问桌面计算机中的硬盘快得多。

  • 以至少每秒 20 帧的帧速率运行应用程序。

    对图形进行专门设计以实现此目标。图形操作的复杂程度会影响每秒的帧数。有关改善呈现效果的技巧,请参阅 优化 Adobe Flash Platform 的性能

    注: AIR for TV 设备上的图形硬件通常以 60 Hz 或 120 Hz(每秒 60 或 120 次)的速度更新屏幕。例如,对于 60 Hz 或 120 Hz 屏幕,硬件以每秒 30 帧或每秒 60 帧扫描舞台进行更新以显示画面。但是,用户能否体验这些较高的帧速率取决于应用程序图形操作的复杂程度。
  • 在用户输入内容之后,在 100 至 200 毫秒内更新屏幕。

    如果需要更长时间才能完成更新,用户会变得不耐烦,往往导致多次按下按键。

易用性

AIR for TV 应用程序的用户处于“客厅”环境中。他们坐在电视机的对面,离电视机大约 3 米远。客厅内有时会很黑暗。用户通常使用遥控设备进行输入。会有多个人使用应用程序,有时同时使用,有时交替使用。

因此,为改善用户界面在电视上的易用性,请在设计时考虑以下事项:

  • 将用户界面元素放大。

    在设计文本、按钮或任何其他用户界面元素时,应假定用户坐在房间的对侧。使所有界面元素均能够在距离电视 3 米远的位置清楚观看和阅读。不要因屏幕够大而草率地让界面元素占据过多屏幕空间。

  • 使用适当的对比度,以便能够坐在房间对侧轻松观看和阅读内容。

  • 通过加亮显示具有焦点的用户界面元素使其突显。

  • 仅在必要时使用动画。例如,连续从一个屏幕滑动到下一个屏幕可以正常工作。但是,如果动画不能帮助用户进行导航,或者动画不是应用程序所固有的,则会分散用户的注意力。

  • 始终为用户提供通过用户界面返回的明显途经。

有关使用遥控器的更多信息,请参阅 遥控器输入处理

用户的个性和期望

考虑到 AIR for TV 应用程序的用户通常是在娱乐性的轻松环境中寻求高品质的电视娱乐。他们不一定熟练掌握相关计算机或技术知识。

因此,在设计 AIR for TV 应用程序时,应遵循以下原则:

  • 请勿使用技术术语。

  • 避免使用模态对话框。

  • 使用适用于客厅环境而非工作或技术环境的友好、通俗易懂的使用说明。

  • 使用电视观众期望的具有较高产品品质的图形。

  • 创建能够方便使用远程控制设备的用户界面。请勿使用更适用于桌面或移动应用程序的用户界面或设计元素。例如,桌面和移动设备上的用户界面通常涉及使用鼠标或手指指向并单击按钮。

字体和文本

可以在 AIR for TV 应用程序中使用设备字体,也可以使用嵌入字体。

设备字体是设备上安装的字体。所有 AIR for TV 设备都具有以下设备字体:

字体名称

说明

_sans

_sans 设备字体是无衬线字体。所有 AIR for TV 设备上安装的 _sans 设备字体都是 Myriad Pro 字体。通常,由于观看距离的缘故,在电视上,sans-serif 字体比 serif 字体更美观。

_serif

_serif 设备字体是有衬线字体。所有 AIR for TV 设备上安装的 _serif 设备字体都是 Minion Pro 字体。

_typewriter

_typewriter 设备字体是等宽字体。所有 AIR for TV 设备上安装的 _typewriter 设备字体都是 Courier Std 字体。

所有 AIR for TV 设备还具有以下亚洲设备字体:

字体名称

语言

字体类别

区域设置代码

RyoGothicPlusN-Regular

日语

sans

ja

RyoTextPlusN-Regular

日语

serif

ja

AdobeGothicStd-Light

韩语

sans

ko

AdobeHeitiStd-Regular

简体中文

sans

zh_CN

AdobeSongStd-Light

简体中文

serif

zh_CN

AdobeMingStd-Light

繁体中文

serif

zh_TW 和 zh_HK

这些 AIR for TV 设备字体均具有以下特征:

  • 来自 Adobe® 类型库

  • 在电视机上显示效果良好

  • 针对视频字幕而设计

  • 是轮廓字体,而不是位图字体

注: 设备制造商通常会在设备上包含其他设备字体。除了 AIR for TV 设备字体之外,设备上还安装了这些制造商提供的设备字体。

Adobe 提供了一个名为 FontMaster Deluxe 的应用程序,可在设备上显示所有设备字体。可从 Flash Platform for TV 上获取该应用程序。

也可以在 AIR for TV 应用程序中嵌入字体。有关嵌入字体的信息,请参阅 ActionScript 3.0 开发人员指南 中的 高级文本呈现

在使用 TLF 文本字段时,Adobe 建议遵循以下原则:

  • 对亚洲语言文本采用 TLF 文本字段,以利用运行应用程序所使用的区域设置。设置与 TLFTextField 对象相关联的 TextLayoutFormat 对象的 locale 属性。若要确定当前的区域设置,请参阅 ActionScript 3.0 开发人员指南 中的 选择区域设置

  • 如果字体不是 AIR for TV 设备字体,请在 TextLayoutFormat 对象的 fontFamily 属性中指定字体名称。如果设备上提供了该字体,则 AIR for TV 将使用该字体。如果设备上未提供所请求的字体,则 AIR for TV 会根据 locale 设置使用相应的 AIR for TV 设备字体予以替换。

  • fontFamily 属性指定 _sans _serif _typewriter 并设置 locale 属性,这样 AIR for TV 就能够选择正确的 AIR for TV 设备字体。根据区域设置, AIR for TV 会从其亚洲设备字体集或非亚洲设备字体集中进行选择。这些设置为您提供一种简单的方法,可以自动为亚洲四种主要区域设置和英语使用正确的字体。

注: 如果为亚洲语言文本使用传统文本字段,请指定 AIR for TV 设备字体的字体名称以保证正确呈现。如果知道您的目标设备上安装了另一种字体,也可以指定该字体。

关于应用程序性能,请考虑以下事项:

  • 与 TLF 文本字段相比,传统文本字段能够提供更快的性能。

  • 使用位图字体的传统文本字段能够提供最快的性能。

    与仅提供每个字符的轮廓数据的轮廓字体不同,位图字体可提供每个字符的位图。设备字体和嵌入字体均可为位图字体。

  • 如果指定设备字体,请确保目标设备上已安装该设备字体。如果设备上未安装该设备字体,则 AIR for TV 会查找并使用设备上安装的其他字体。但是,此行为会降低应用程序的性能。

  • 与所有显示对象一样,如果 TextField 对象基本未更改,请将该对象的 cacheAsBitmap 属性设置为 true 。此设置可改善淡入淡出、滑动和 alpha 混合等转换效果。使用 cacheAsBitmapMatrix 进行缩放和转换。有关详细信息,请参阅 图形硬件加速

文件系统安全

AIR for TV 应用程序属于 AIR 应用程序,因此可以访问设备的文件系统。但是,对于“客厅”设备来说,应用程序不能访问该设备的文件系统或其他应用程序的文件,这一点至关重要。当电视及相关设备的用户正在观看电视时,他们不希望出现或者不能容忍任何设备故障,毕竟,他们是在观看电视。

因此,AIR for TV 应用程序只能有限度地查看设备的文件系统。使用 ActionScript 3.0,应用程序只能访问特定目录(及其子目录)。此外,您在 ActionScript 中使用的目录名称并不是设备上的实际目录名称。这一附加保护层可防止 AIR for TV 应用程序恶意或意外地访问不属于它们的本地文件。

有关详细信息,请参阅 使用 AIR for TV 应用程序查看目录

AIR 应用程序沙箱

AIR for TV 应用程序在 AIR 应用程序沙箱中运行,如 AIR 应用程序沙箱 中所述。

AIR for TV 应用程序的唯一区别在于,它们只能有限制地访问文件系统(如 文件系统安全 中所述)。

应用程序生命周期

与在桌面环境中不同的是,最终用户无法关闭正在运行 AIR for TV 应用程序的窗口。因此,必须提供退出应用程序的用户界面机制。

通常情况下,设备允许最终用户使用遥控器上的退出键无条件退出应用程序。但是,AIR for TV 不会将 flash.events.Event.EXITING 事件调度到应用程序。因此,应经常保存应用程序状态,以便下次启动应用程序时可以自行恢复到合理状态。

HTTP cookie

AIR for TV 支持 HTTP 永久 cookie 和会话 cookie。AIR for TV 将每个 AIR 应用程序的 cookie 存储在特定于应用程序的目录中:

/app-storage/<app id>/Local Store

Cookie 文件名为 cookies

注: 其他设备(如,桌面设备)上的 AIR 不会为每个应用程序单独存储 cookie。特定于应用程序的 cookie 存储支持 AIR for TV 的应用程序和系统安全模型。

请遵循以下原则使用 ActionScript 属性 URLRequest.manageCookies

  • manageCookies 设置为 true 。此值是默认值。它表示 AIR for TV 会自动向 HTTP 请求中添加 cookie,并记住 HTTP 响应中的 cookie。

    注: 即使 manageCookies 设置为 true ,应用程序也可以使用 URLRequest.requestHeaders 向 HTTP 请求中添加 cookie。如果此 cookie 与 AIR for TV 所管理的 cookie 具有相同名称,则请求中将包含同名的两个 cookie。两个 cookie 的值可以不同。
  • manageCookies 设置为 false 。此值表示应用程序负责发送 HTTP 请求中的 cookie,并记住 HTTP 响应中的 cookie。

有关详细信息,请参阅 URLRequest