包 | flash.media |
类 | public class StageVideo |
继承 | StageVideo EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
AIR 配置文件支持:在 AIR 3 中,所有 AIR for TV 设备及某些移动设备都支持此功能。针对 iOS 的 AIR 3 使用带硬件解码的 H.264 视频的 StageVideo 对象,并对 NetStream 功能提供有限支持。针对 iOS 的 AIR 3 还通过 StageVideo 对象支持 On2 和 Sorenson 编解码器。此类支持不使用硬件解码,并且不限制 NetStream 功能。在 AIR 2.5 中。只有 AIR for TV 设备支持此功能。此外,AIR 2.5 for TV 中此功能的 ActionScript 与 AIR 3 或 Flash Player 10.2 的 ActionScript 不同。ActionScript 描述中介绍了具体差异。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。AIR 桌面或 extendedDesktop 配置文件中不支持 StageVideo 类。
StageVideo 对象显示的视频始终显示在舞台的矩形区域中,在所有 Flash 显示列表对象后面。因此,StageVideo 对象利用硬件加速,同时支持显示视频的大部分情形:覆盖有视频控件的矩形显示区域。
使用 StageVideo 对象比使用 Video 对象更好的方面是:
- 由于使用了硬件加速,提高了视频显示性能。
- 降低了 CPU 使用率。
- 开发内容的灵活性和创造性,如视频控件,显示在 StageVideo 对象前面。
因为设备的硬件显示视频,所以与 Video 对象相比,StageVideo 对象具有以下限制:
- 对于每个 SWF 文件,Flash Player 将可同时显示视频的 StageVideo 对象数限制为四个。但是,根据设备硬件资源,实际的限制可能更低。在 AIR for TV 设备上,一次只有一个 StageVideo 对象可以显示视频。
- 视频计时与运行时显示的 Flash 内容的计时不同步。
- 视频显示区域只能是矩形。您无法使用更先进的显示区域,如椭圆形或不规则形状。
- 无法旋转视频。
- 您不能对视频进行位图缓存或使用 BitmapData 访问它。
- 无法对视频应用滤镜。
- 无法对视频应用颜色转化。
- 无法对视频应用 Alpha 值。
- 应用于视频前面的显示对象的混合模式不会应用于视频。
- 只能将视频放置在全像素边界上。
- 尽管对于给定设备硬件,渲染效果最好,但并不是百分之百的跨设备“像素完全一致”。由于驱动程序和平台的差别,会有微小的不同。
- 有几种设备不支持所有必需的颜色空间。例如,有些设备不支持 BT.709,H.264 标准。在这样的情况下,您可以使用 BT.601 进行快速显示。
- 您不能将舞台视频与 WMODE 设置一起使用,如
normal
、opaque
或transparent
。当不处于全屏模式时,舞台视频只支持WMODE=direct
。WMODE 在 Safari 4 或更高版本、IE 9 或更高版本或 AIR for TV 中无效。 - 在 AIR for Android 的应用程序中使用 StageVideo 时,在应用程序描述符中将
colorDepth
设置为 32bit。不支持使用带 16 位颜色深度的 StageVideo。 - 在 Android 上,仅在运行 Android 3 (Honeycomb) 和更高版本的设备上支持 StageVideo。要允许您的应用程序在尽可能多类型的 Android 设备上运行,请始终提供使用 Video 对象显示视频的逻辑,以备 StageVideo 不可用的情况。
下列步骤总结了如何使用 StageVideo 对象来播放视频:
- 侦听 StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY 事件以了解 Stage.stageVideos 矢量何时更改。(不支持 AIR 2.5 for TV。)
- 如果 StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY 事件报告舞台视频可用,则在事件处理函数中使用
Stage.stageVideos
矢量对象来访问 StageVideo 对象。在 AIR 2.5 for TV 中,呈现第一个 SWF 帧后,访问Stage.stageVideos
。注意 您无法创建 StageVideo 对象。 - 使用
StageVideo.attachNetStream()
连接 NetStream 对象。 - 使用
NetStream.play()
播放视频。 - 侦听 StageVideo 对象上的
StageVideoEvent.RENDER_STATE
事件,以确定播放视频的状态。收到此事件还说明,视频的宽度和高度属性已初始化或更改。 - 侦听 Video 对象上的
VideoEvent.RENDER_STATE
事件。此事件提供与 StageVideoEvent.RENDER_STATE 相同的状态,因此您也可以使用它来确定 GPU 加速是否可用。收到此事件还说明,视频的宽度和高度属性已初始化或更改。(不支持 AIR 2.5 for TV。)
如果 StageVideoEvent.RENDER_STATE
事件表明视频无法显示,您可以恢复为使用 Video 对象,而不使用 StageVideo 对象。视频附加到 NetStream 对象并播放后调度此事件。此外,根据不同的平台,播放状态中的任何更改可能导致调度此事件。处理 StageVideoEvent.RENDER_STATE
事件以确保应用程序播放视频或不播放视频。
如果运行的视频从不支持舞台视频的 WMODE 进入全屏模式,舞台视频可以变为可用。同样,如果用户退出全屏模式,舞台视频可以变为不可用。在这些情况下,Stage.stageVideos 矢量发生更改。要收到此更改的通知,请侦听 StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABITY 事件。注意:在 AIR 2.5 for TV 中不提供此通知。
了解详细信息
相关 API 元素
flash.events.StageVideoAvailabilityEvent
flash.events.VideoEvent
flash.display.Stage.stageVideos
flash.media.Video
flash.net.NetStream
属性 | 由以下参数定义 | ||
---|---|---|---|
colorSpaces : Vector.<String> [只读]
返回此视频表面可用色彩空间的名称。 | StageVideo | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
depth : int
StageVideo 对象的深度级别与其他 StageVideo 对象相关。 | StageVideo | ||
pan : Point
显示视频的平移设置,指定为 Point 对象。 | StageVideo | ||
videoHeight : int [只读]
一个整数,以像素为单位指定视频流的高度。 | StageVideo | ||
videoWidth : int [只读]
一个整数,以像素为单位指定视频流的宽度。 | StageVideo | ||
viewPort : Rectangle
以像素表示的视频表面的绝对位置和大小。 | StageVideo | ||
zoom : Point
视频的缩放设置,指定为 Point 对象。 | StageVideo |
方法 | 由以下参数定义 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
指定摄像头中的视频流利用 GPU 进行呈现,要显示在应用程序中的 StageVideo 对象边界内。 | StageVideo | ||
指定要在应用程序中 StageVideo 对象的边界内显示的视频流。 | StageVideo | ||
将事件调度到事件流中。 | EventDispatcher | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 由以下参数定义 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
StageVideo 对象的呈现状态变化后,被 StageVideo 对象调度。 | StageVideo |
colorSpaces | 属性 |
depth | 属性 |
depth:int
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
StageVideo 对象的深度级别与其他 StageVideo 对象相关。
StageVideo 对象始终显示在舞台上其他对象后面。如果平台支持多个 StageVideo 对象,depth
属性表示 StageVideo 对象的深度级别。底部 StageVideo 对象的 depth
属性具有最小值。如果多个 StageVideo 对象具有相同的深度设置,它们显示在 stage,stageVideos
矢量中的顺序决定了它们的相对深度。
注意: AIR for TV 设备仅支持一个 StageVideo 对象。因此,此属性不适用于这些设备。
实现
public function get depth():int
public function set depth(value:int):void
相关 API 元素
pan | 属性 |
pan:Point
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
显示视频的平移设置,指定为 Point 对象。
默认情况下,pan
值为 (0,0)
。此默认值将视频置于 StageVideo.viewPort
指定的矩形的中心。
仅当 zoom
属性值为非默认值 (1.0, 1.0)
时,pan
值很大。当视频以默认 zoom
值显示在 StageVideo.viewPort
矩形中时,平台会调整视频大小,使其适合矩形尺寸。因此,整个视频都是可见的。然后,如果指定了缩放系数,整个视频不一定可见。在此情况下,您可以设置 pan
值来指定哪个视频的子矩形显示在 StageVideo.viewPort
矩形中。
pan
属性的有效值范围是从 (-1.0, -1.0)
到 (1.0, 1.0)
。具体是:
-
pan
值(-1.0, -1.0)
将视频的左上角像素放置到StageVideo.viewPort
矩形的左上角位置。 -
pan
值(1.0, 1.0)
将视频的右下角位置放置到StageVideo.viewPort
矩形的右下角位置。 -
pan
值(1.0, -1.0)
将视频的右上角像素放置到StageVideo.viewPort
矩形的右上角位置。 -
pan
值(-1.0, 1.0)
将视频的左下角像素放置到StageVideo.viewPort
矩形的左下角位置。
值 -1.0 到 1.0 之间根据比例平移。
如果将 pan
属性设置为有效范围之外的值,将引发 RangeError
意外。运行时将值重置为上一个有效值。
另外,考虑到要使用 StageVideo 对象,将 Stage.stageVideos
矢量对象的元素调度给 StageVideo 变量。设置 StageVideo 变量的 pan
属性时,底层 Stage.stageVideos
矢量元素也会更改。如果后来将该元素调度给另一个 StageVideo 变量以播放另一段视频,则会重置 pan
属性。
实现
public function get pan():Point
public function set pan(value:Point):void
引发
RangeError — Point 值无效。
|
相关 API 元素
videoHeight | 属性 |
videoWidth | 属性 |
viewPort | 属性 |
viewPort:Rectangle
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
以像素表示的视频表面的绝对位置和大小。
视频的位置与舞台的左上角相关。
viewPort
矩形队对象的 x
和 y
属性的有效范围是 -8192 至 8191。所以,您可以将视频完全或部分偏移舞台。如果将 viewPort
属性的 width
和 height
属性设置为大于舞台,您也可以使视频大于舞台。
实现
public function get viewPort():Rectangle
public function set viewPort(value:Rectangle):void
引发
RangeError — 矩形值无效。
|
zoom | 属性 |
zoom:Point
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
视频的缩放设置,指定为 Point 对象。
缩放点为比例因子。默认情况下,zoom
值为 (1.0, 1.0)
。此默认值将整个视频显示在 StageVideo.viewPort
矩形中。
zoom
属性的有效值范围为 (1.0, 1.0)
到 (8.0, 8.0)
。缩放 Point 对象的 x
属性指定了水平像素的缩放值,y 属性指定垂直像素的缩放值。
例如,zoom
值 (2.0, 2.0)
在 StageVideo.viewPort
矩形中仅显示一半水平像素和一半垂直像素。即,视频仍然在 StageVideo.viewPort
矩形内,但是仅有一半视频可见,形成了 2 倍的缩放效果。类似地,zoom
值 (8.0, 8.0)
在 StageVideo.viewPort
矩形中仅显示水平像素的 1/8 和垂直像素的 1/8,放大到了最大 8 倍。
您设置 zoom
属性时,请设置 pan
属性,以使 StageVideo.viewPort
矩形显示视频的适当子矩形。
考虑下列情形,将 zoom
Point 对象的 x
和 y
属性设置为不同的值很有用。首先,注意当视频以默认 zoom
值显示在 StageVideo.viewPort
矩形中时,平台会调整视频大小以正好适应矩形大小。如果视频的矩形不能均匀缩放到 StageVideo.viewPort
矩形大小,则视频显示可能扭曲。即,视频的高宽比以及 StageVideo.viewPort
不相等。此情况可能在以下情形出现:例如,如果视频的宽度和高度不同,但是 StageVideo.viewPort
属性指定了一个正方形。为了解决扭曲变形问题,为 zoom
Point 对象的 x
和 y
属性设置不同的值。然后设置 pan
属性,以确保 StageVideo.viewPort
矩形显示视频的适当子矩形。
如果将 zoom
属性设置为非有效范围内的一个值,则会引发 RangeError
意外。运行时将值重置为上一个有效值。
另外,考虑到要使用 StageVideo 对象,将 Stage.stageVideos
矢量对象的元素调度给 StageVideo 变量。设置 StageVideo 变量的 zoom
属性时,底层 Stage.stageVideos
矢量元素也会更改。如果您后来将该元素调度给另一个 StageVideo 变量以播放另一个视频,请重置 zoom
属性。
实现
public function get zoom():Point
public function set zoom(value:Point):void
引发
RangeError — Point 值无效。
|
相关 API 元素
attachCamera | () | 方法 |
public function attachCamera(theCamera:Camera):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11.4, AIR 3.4 |
指定摄像头中的视频流利用 GPU 进行呈现,要显示在应用程序中的 StageVideo 对象边界内。
注意:Android 不支持对摄像头使用 StageVideo。
使用此方法将用户捕获的实时视频附加到 StageVideo 对象。要切断与该 StageVideo 对象的连接,请传递 null
。
参数
theCamera:Camera — 正在捕获视频数据的 Camera 对象。
|
相关 API 元素
attachNetStream | () | 方法 |
public function attachNetStream(netStream:NetStream):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
指定要在应用程序中 StageVideo 对象的边界内显示的视频流。视频流或者是通过 NetStream.play() 播放的视频文件,或者为 null
。视频文件可以存储在本地文件系统或 Flash Media Server 上。如果 netStream
参数的值为 null
,则视频不会再在 StageVideo 对象中播放。
再次调用 attachNetStream()
之前,调用当前连接的 NetStream 对象的 close()
方法。 调用 close()
会释放所有资源,包括硬件解码器,有关播放视频方面。然后,可以调用带有另一个 NetStream 对象或 null
的 attachNetStream()
。
如果视频文件仅包含音频,您无需使用此方法;当您调用 NetStream.play()
时,视频文件的音频部分会自动播放。 要控制与视频文件相关联的音频,请使用用于播放视频文件的 NetStream 对象的 soundTransform
属性。
参数
netStream:NetStream — 一个 NetStream 对象。要切断与该 StageVideo 对象的连接,请传递 null 。
|
renderState | 事件 |
flash.events.StageVideoEvent
属性 StageVideoEvent.type =
flash.events.StageVideoEvent.RENDER_STATE
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.5, Flash Player 10.2 |
StageVideo 对象的呈现状态变化后,被 StageVideo 对象调度。
StageVideoEvent.RENDER_STATE
常量定义 renderState
事件对象的 type
属性的值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
colorSpace | 用于显示视频的可用色彩空间。 |
currentTarget | 当前正在使用事件侦听器主动处理 StageVideoEvent 对象的对象。 |
status | 指明视频是否正在被硬件或软件呈现(解码并显示),或完全没有呈现。 |
target | 已更改状态的 StageVideo 对象。 |
Tue Jun 12 2018, 11:04 AM Z