包 | flash.net |
类 | public class NetStream |
继承 | NetStream EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
NetStream.publish()
发布流,也可以使用 NetStream.play()
订阅发布的流并接收数据。您可以发布或播放实时数据及先前录制的数据。您还可以使用 NetStream 对象向所有已订阅的客户端发送文本消息(请参阅 NetStream.send()
方法)。
与在 SWF 文件中嵌入视频相比,播放外部视频文件有很多好处,例如,更好的性能和内存管理以及独立的视频和 SWF 帧速率。
Adobe AIR 和 Flash Player 9.0.115.0 _cn 和更高版本支持从标准 MPEG-4 容器格式(包括 F4V、MP4、M4A、MOV、MP4V、3GP 和 3G2)中派生的文件(如果文件包含 H.264 视频和/或 HEAAC v2 编码音频)。与 Sorenson 或 On2 中同样的编码配置文件相比,H.264 可以在更低的位速率下传送更高品质的视频。HE-AAC v2 是 AAC(在 MPEG-4 视频标准中定义的一种标准音频格式)的扩展,它使用频带复制 (SBR) 和参量立体声 (PS) 技术在低位速率下提高编码效率。有关支持的编解码器和文件格式的信息,请参阅 http://www.adobe.com/go/hardware_scaling_cn 和 Flash Media Server 文档。
NetStream 类提供了一些方法和属性,它们可用于跟踪文件的加载和播放进度,以及便于用户对回放进行控制(停止或暂停等)。
音频流或视频流的一般工作流程:以下步骤简要介绍了用于发布实时音频和视频的工作流程:
NetConnection.connect()
方法连接到服务器上的应用程序实例。
NetStream.attachAudio()
方法捕获音频并通过该流进行发送,然后使用 NetStream.attachCamera()
方法捕获并发送视频。
NetStream.publish()
方法为该流指定唯一的名称,然后通过该流将数据发送到服务器,以使其他用户能够收到该数据。您还可以在发布数据时进行录制,以便用户可以在日后回放该数据。
订阅该流的文件将在调用 play()
时使用传递给 publish()
的名称,并调用与发布者相同的 NetConnection.connect()
方法。它们必须调用 Video.attachNetStream()
方法以流式传输视频,然后调用 NetStream.play()
方法播放视频。
将数据关键帧用于 Flash Media Server:创建 NetConnection 和 NetStream 对象后,您可以在将实时音频或视频流式传输到服务器时,使用 NetStream.send()
向实时音频或视频中添加元数据。元数据可以是如下信息:视频高度或宽度、其持续时间、其创建者的姓名等。若要定义元数据,请使用特殊的处理函数名称 @setDataFrame
作为 NetStream.send()
的第一个参数。
从 Flash Media Server 流、渐进式 F4V 文件或渐进式 FLV 文件中接收数据:Flash Media Server、F4V 文件和 FLV 文件可以在流处理或播放过程中发送包含特定数据点上的数据的事件对象。您可以使用两种方法在回放过程中从流或 FLV 文件中处理数据:
NetStream.client
属性分配对象以调用特定的数据处理函数。分配给 NetStream.client
属性的对象可以侦听以下数据点:onCuePoint()
、onImageData()
、onMetaData()
、onPlayStatus()
、onTextData()
和 onXMPData()
。然后在这些函数内编写过程,以处理在回放过程中从流或 FLV 文件中返回的数据对象。有关详细信息,请参阅 NetStream.client
属性。
注意:若要通过音频文件(如 MP3 文件)发送数据,请使用 Sound 类将音频文件与 Sound 对象关联起来。然后使用 Sound.id3
属性读取声音文件中的元数据。
另请参见
属性 | 定义方 | ||
---|---|---|---|
bufferLength : Number [只读 (read-only)] 数据当前存在于缓冲区中的秒数。 | NetStream | ||
bufferTime : Number 指定在开始显示流之前需要多长时间将消息存入缓冲区。 | NetStream | ||
bytesLoaded : uint [只读 (read-only)] 已加载到应用程序中的数据的字节数。 | NetStream | ||
bytesTotal : uint [只读 (read-only)] 正加载到应用程序中的文件的总大小(以字节为单位)。 | NetStream | ||
checkPolicyFile : Boolean 指定应用程序在开始加载视频文件之前,是否应尝试从所加载视频文件的服务器中下载跨域策略文件。 | NetStream | ||
client : Object 指定对其调用回调方法以处理流或 FLV 文件数据的对象。 | NetStream | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
currentFPS : Number [只读 (read-only)] 每秒显示的帧的数目。 | NetStream | ||
farID : String [只读 (read-only)] 连接到此 NetStream 实例的远端的标识符。 | NetStream | ||
farNonce : String [只读 (read-only)] 由此流的另一端实际选择的值,对于此连接唯一。 | NetStream | ||
info : NetStreamInfo [只读 (read-only)] 返回一个 NetStreamInfo 对象,其属性包含有关服务质量的统计信息。 | NetStream | ||
liveDelay : Number [只读 (read-only)] 在实时(未缓冲的)模式下,数据在订阅流的缓冲区中停留的秒数。 | NetStream | ||
maxPauseBufferTime : Number 指定在暂停模式下需要多长时间(以秒为单位)将消息存入缓冲区。 | NetStream | ||
nearNonce : String [只读 (read-only)] 由流的这一端实际选择的值,对于此连接唯一。 | NetStream | ||
objectEncoding : uint [只读 (read-only)] 此 NetStream 对象的对象编码(AMF 版本)。 | NetStream | ||
peerStreams : Array [只读 (read-only)] 一个对象,其中容纳了侦听此发布方 NetStream 实例的所有订阅方 NetStream 实例。 | NetStream | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
soundTransform : SoundTransform 在此 NetStream 对象中控制声音。 | NetStream | ||
time : Number [只读 (read-only)] 播放头的位置(以秒为单位)。 | NetStream |
方法 | 定义方 | ||
---|---|---|---|
创建可用于通过指定的 NetConnection 对象播放视频文件的流。 | NetStream | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
指定一个通过 NetStream 对象发送的音频流,它来自作为源传递的 Microphone 对象。 | NetStream | ||
开始从摄像头捕获视频,如果将 theCamera 设置为 null,则会停止捕获操作。 | NetStream | ||
停止播放流上的所有数据,将 time 属性设置为 0,并使该流可用于其它用途。 | NetStream | ||
将事件调度到事件流中。 | EventDispatcher | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
每当一个同级发布流与一个同级订阅流相匹配时即调用。 | NetStream | ||
暂停视频流的回放。 | NetStream | ||
播放媒体文件。 | NetStream | ||
开始播放媒体文件(提供一些播放选项)。 | NetStream | ||
从本地存储的媒体文件中提取任何 DRM 元数据。 | NetStream | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
将音频流、视频流和文本消息流从客户端发送到 Flash Media Server,并可选择在传输期间录制该流。 | NetStream | ||
指定传入的音频是否在流上播放。 | NetStream | ||
指定传入的音频是否将在流上播放。 | NetStream | ||
指定传入视频的帧速率。 | NetStream | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
[静态] 删除所有本地缓存的数字权限管理 (DRM) 凭证数据。 | NetStream | ||
恢复回放暂停的视频流。 | NetStream | ||
搜索与指定位置最接近的关键帧(在视频行业中也称为 I 帧)。 | NetStream | ||
在发布的流上向所有订阅客户端发送一条消息。 | NetStream | ||
设置查看基础加密内容所需要的 DRM 身份验证凭据。 | NetStream | ||
设置循环操作动态属性的可用性。 | Object | ||
暂停或恢复流的回放。 | NetStream | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 定义方 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
在异步引发异常(即来自本机异步代码)时调度。 | NetStream | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
在 NetStream 对象尝试播放使用数字权限管理 (DRM) 加密的内容(播放前需要用户凭据以进行身份验证)时调度。 | NetStream | |||
在 NetStream 对象尝试播放数字权限管理 (DRM) 加密的文件的过程中遇到与 DRM 相关的错误时调度。 | NetStream | |||
在开始播放数字权限管理 (DRM) 加密的内容时(如果已对用户进行身份验证并授权播放该内容)调度。 | NetStream | |||
在出现输入或输出错误并导致网络操作失败时调度。 | NetStream | |||
在 NetStream 对象报告其状态或错误条件时调度。 | NetStream | |||
在播放视频文件期间到达嵌入提示点时建立侦听器进行响应。 | NetStream | |||
建立一个侦听器,以便在 AIR 提取媒体文件中嵌入的 DRM 内容元数据时作出响应。 | NetStream | |||
在 Flash Player 以字节数组形式接收到正在播放的媒体文件中嵌入的图像数据时建立侦听器进行响应。 | NetStream | |||
在 Flash Player 接收到正在播放的视频中嵌入的描述性信息时建立侦听器进行响应。 | NetStream | |||
在 NetStream 对象已完全播放流时建立侦听器进行响应。 | NetStream | |||
在 Flash Player 接收到正在播放的媒体文件中嵌入的文本数据时建立侦听器进行响应。 | NetStream | |||
建立一个侦听器,以便在 Flash Player 接收到特定于正在播放的视频中嵌入的 Adobe 可扩展元数据平台 (XMP) 的信息时进行响应。 | NetStream | |||
在应用程序尝试通过调用 NetStream.play() 方法播放用数字权限管理 (DRM) 加密的内容时调度。 | NetStream |
常量 | 定义方 | ||
---|---|---|---|
CONNECT_TO_FMS : String = "connectToFMS" [静态] 一个静态对象,用作 NetStream 实例的构造函数的参数。 | NetStream | ||
DIRECT_CONNECTIONS : String = "directConnections" [静态] 创建同级对同级发行者连接。 | NetStream |
bufferLength | 属性 |
bufferLength:Number
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
数据当前存在于缓冲区中的秒数。您可以将此属性与 bufferTime
属性一起使用,以评估缓冲区将近填满的程度;例如,向正等待数据加载到缓冲区中的用户显示反馈。
public function get bufferLength():Number
另请参见
bufferTime | 属性 |
bufferTime:Number
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定在开始显示流之前需要多长时间将消息存入缓冲区。例如,若要确保流的最初 15 秒无中断播放,请将 bufferTime
设置为 15;应用程序将在把 15 秒的数据存入缓冲区后才开始播放该流。
默认值是 0.1(十分之一秒)。若要确定当前位于缓冲区中的秒数,请使用 bufferLength
属性。
注意:若要避免在对预先录制的(非实时)内容进行流处理时发生扭曲,不要将 Netstream.bufferTime
为 0。对于预先录制的内容,默认情况下应用程序将使用输入缓冲区对媒体数据进行排队并正确播放媒体。对于预先录制的内容,请使用默认设置或延长缓冲时间。
从 Flash Player 9.0.115.0 开始,在调用 NetStream.pause()
时,Flash Player 不再清除缓冲区。在 Flash Player 9.0.115.0 之前,恢复播放之前 Flash Player 将等待缓冲区填满,这通常会导致延迟。
对于一次暂停,NetStream.bufferLength
属性的限值为 60 秒或二倍的 NetStream.bufferTime
值(取二者之中的较大值)。例如,如果 bufferTime
为 20 秒,在 NetStream.bufferLength
为较大值 20*2 (40) 或 60 之前,Flash Player 将一直进行缓冲,因此在本例中,在 bufferLength
为 60 之前,Flash Player 将一直进行缓冲。如果 bufferTime
为 40 秒,在 bufferLength
为较大值 40*2 (80) 或 60 之前,则 Flash Player 将一直进行缓冲,因此在本例中,在 bufferLength
为 80 秒之前,Flash Player 将一直进行缓冲。
bufferLength
属性还有一个绝对限制。如果对 pause()
的任何调用导致 bufferLength
增大到 600 秒以上或 bufferTime
* 2 的值(取二者中的较大值),Flash Player 将刷新缓冲区并将 bufferLength
重置为 0。例如,如果 bufferTime
为 120 秒,当 bufferLength
达到 600 秒时,Flash Player 将刷新缓冲区;如果 bufferTime
为 360 秒,当 bufferLength
达到 720 秒时,Flash Player 将刷新缓冲区。
提示:例如,在查看器监视商用版的同时,可以在代码中使用 NetStream.pause()
来缓冲数据,然后在开始播放主视频时取消暂停。
有关新的暂停行为的详细信息,请参阅 http://www.adobe.com/go/learn_fms_smartpause_cn。
Flash Media Server。缓冲行为取决于缓冲时间是在发布流还是订阅流中设置的。对于发布流,bufferTime
指定在应用程序开始删除帧之前传出缓冲区可以增长多长时间。在高速连接上,不必担心缓冲时间问题;发送数据的速度几乎与应用程序将数据存入缓冲区一样快。但在速度较慢的连接上,应用程序将数据存入缓冲区与将数据发送到客户端的速度可能会有很大差异。
对于订阅流,bufferTime
指定在开始显示流之前需要花多长时间将传入数据存入缓冲区。例如,如果要确保流的最初 15 秒在播放时不会出现中断,请将 bufferTime
设置为 15;Flash 在将 15 秒的数据存入缓冲区后才开始播放该流。
在播放录制流时,如果 bufferTime
为 0,Flash 会将其设置为较小的值(大约为 10 毫秒)。如果以后播放实时流(例如,从播放列表中),则会永久保留此缓冲时间。即,流的 bufferTime
始终为非零值。
public function get bufferTime():Number
public function set bufferTime(value:Number):void
另请参见
bytesLoaded | 属性 |
bytesLoaded:uint
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
已加载到应用程序中的数据的字节数。您可以将此属性与 bytesTotal
属性一起使用,以评估缓冲区将近填满的程度;例如,向正等待数据加载到缓冲区中的用户显示反馈。
public function get bytesLoaded():uint
另请参见
bytesTotal | 属性 |
bytesTotal:uint
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
正加载到应用程序中的文件的总大小(以字节为单位)。
public function get bytesTotal():uint
另请参见
checkPolicyFile | 属性 |
checkPolicyFile:Boolean
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定应用程序在开始加载视频文件之前,是否应尝试从所加载视频文件的服务器中下载跨域策略文件。如果对渐进式视频下载(独立的文件)使用 NetStream 对象,或者加载的文件位于进行调用的 文件所在的域外部,则应用此属性。当使用 NetStream 对象获取 RTMP 资源时,忽略此属性。
如果从执行调用的 SWF 文件所在的域外部加载视频文件,而且需要使用 BitmapData.draw()
方法对视频进行像素级访问,则将此属性设置为 true
。在加载时未将 checkPolicyFile
属性设置为 true
的情况下,如果调用 BitmapData.draw()
,可能会收到一个 SecurityError
异常,因为没有下载所需的策略文件。
如果不需要对正在加载的视频进行像素级访问,则不要将 checkPolicyFile
设置为 true
。检查策略文件会占用网络带宽,并可能延迟下载的开始时间。
如果将 checkPolicyFile
设置为 true
,则调用 NetStream.play()
方法时,Flash Player 或 AIR 运行时必须成功下载一个相关的跨域策略文件,或者必须先确定在开始下载对象(在对 NetStream.play()
的调用中指定)之前,不存在这种策略文件。若要确认是否存在策略文件,Flash Player 或 AIR 运行时将执行以下操作,具体顺序如下:
Security.loadPolicyFile()
方法调用中指定的任何未处理的策略文件。
NetStream.play()
的 URL 相对应的默认位置下载策略文件,在与该 URL 所在的同一台服务器上,该默认位置为 /crossdomain.xml
。
无论哪种情况,Flash Player 或 AIR 运行时都要求视频服务器上存在一个正确的策略文件,该文件可以提供对传递给 play()
的 URL 处(根据该策略文件的位置)的对象的访问,并允许执行调用代码的文件所在的域通过一个或多个 <allow-access-from>
标签来访问视频。
如果将 checkPolicyFile
设置为 true
,则应用程序会等到策略文件确认完毕才下载视频。等待对视频数据执行任何像素级操作(如调用 BitmapData.draw()
),直至从 NetStream 对象收到 onMetaData
或 NetStatus
事件。
如果将 checkPolicyFile
设置为 true
,但未找到相关的策略文件,则您只有执行需要策略文件的操作时,才会接收到错误,然后应用程序会引发 SecurityError 异常。
如果从使用服务器端 HTTP 重定向的 URL 中下载文件,请谨慎使用 checkPolicyFile
。应用程序尝试检索与您在 NetStream.play()
中指定的初始 URL 相对应的策略文件。如果最终文件由于 HTTP 重定向而来自不同的 URL,则最初下载的策略文件可能不适用于该文件的最终 URL,该 URL 对安全决策至关重要。
有关策略文件的详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。
public function get checkPolicyFile():Boolean
public function set checkPolicyFile(value:Boolean):void
另请参见
client | 属性 |
client:Object
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定对其调用回调方法以处理流或 FLV 文件数据的对象。默认对象为 this
,将创建 NetStream 对象。如果将 client
属性设置为另一个对象,则将对该对象调用回调方法。NetStream.client
对象可以调用以下函数并接收关联的数据对象:onCuePoint()
、onImageData()
、onMetaData()
、onPlayStatus()
、onTextData()
和 onXMPData()
。
将 client
属性与事件处理函数相关联:
client
属性:
var customClient:Object = new Object(); my_netstream.client = customClient;
customClient.onImageData = onImageDataHandler;
public function onImageDataHandler(imageData:Object):void { trace("imageData length: " + imageData.data.length); }
当数据经过流或在回放过程中传递时,将用该数据填充数据事件对象(本例中为 imageData
对象)。请参阅 onImageData
的描述,其中包括一个分配给 client
属性的对象的完整示例。
将 client
属性与子类相关联:
class CustomClient { public function onMetaData(info:Object):void { trace("metadata: duration=" + info.duration + " framerate=" + info.framerate); }
client
属性:
my_netstream.client = new CustomClient();
当数据经过流或在回放过程中传递时,将用该数据填充数据事件对象(本例中为 info
对象)。请参阅 NetStream 类末尾的类示例,该示例演示了将一个子类实例分配给 client
属性的过程。
public function get client():Object
public function set client(value:Object):void
TypeError —
必须将 client 属性设置为非空对象。
|
另请参见
currentFPS | 属性 |
currentFPS:Number
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
每秒显示的帧的数目。如果要导出视频文件以在多个系统上回放,您可以在测试期间检查该值,以帮助确定在导出该文件时应用的压缩量。
public function get currentFPS():Number
farID | 属性 |
farID:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
连接到此 NetStream
实例的远端的标识符。仅为 RTMFP 连接定义此属性。
public function get farID():String
farNonce | 属性 |
farNonce:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
由此流的另一端实际选择的值,对于此连接唯一。此值出现在流的另一端作为其 nearNonce
值。仅为 RTMFP 连接定义此属性。
public function get farNonce():String
info | 属性 |
info:NetStreamInfo
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回一个 NetStreamInfo 对象,其属性包含有关服务质量的统计信息。此对象是当前状态的快照。
public function get info():NetStreamInfo
另请参见
liveDelay | 属性 |
liveDelay:Number
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在实时(未缓冲的)模式下,数据在订阅流的缓冲区中停留的秒数。此属性指定当前的网络传输延迟(延迟时间)。
此属性主要用于服务器(如 Flash Media Server);有关详细信息,请参阅类说明。
您可以获取此属性的值来粗略估量流的传输质量,并将其传达给用户。
public function get liveDelay():Number
maxPauseBufferTime | 属性 |
maxPauseBufferTime:Number
[读写]
指定在暂停模式下需要多长时间(以秒为单位)将消息存入缓冲区。可以使用此属性来限制暂停模式下进行的缓冲程度。NetStream.bufferLength
的值一旦到达此限制,就会停止缓冲。如果未设置此值,则将默认值限制为 60 秒或每个暂停的 NetStream.bufferTime
值的两倍,以较大的值为准。
public function get maxPauseBufferTime():Number
public function set maxPauseBufferTime(value:Number):void
另请参见
nearNonce | 属性 |
nearNonce:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
由流的这一端实际选择的值,对于此连接唯一。此值出现在流的另一端作为其 farNonce
值。仅为 RTMFP 连接定义此属性。
public function get nearNonce():String
objectEncoding | 属性 |
objectEncoding:uint
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
此 NetStream 对象的对象编码(AMF 版本)。NetStream 对象从关联的 NetConnection 对象继承了它的 objectEncoding
值。如果 ActionScript 3.0 SWF 文件需要与在 Flash Player 9 之前发布的服务器进行通信,则了解此属性非常重要。有关详细信息,请参阅 NetConnection 类中 objectEncoding
属性的描述。
此属性的值取决于流是本地还是远程的。本地流返回 NetConnection.defaultObjectEncoding
的值。在这些流上,null
被传递给 NetConnection.connect()
方法。远程流返回与服务器建立的连接的对象编码。通过远程流连接到服务器。
如果您在未连接时就尝试读取此属性,或者尝试更改此属性,则应用程序将引发一个异常。
public function get objectEncoding():uint
另请参见
peerStreams | 属性 |
peerStreams:Array
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
一个对象,其中容纳了侦听此发布方 NetStream 实例的所有订阅方 NetStream 实例。
public function get peerStreams():Array
soundTransform | 属性 |
soundTransform:SoundTransform
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在此 NetStream 对象中控制声音。有关详细信息,请参阅 SoundTransform 类。
public function get soundTransform():SoundTransform
public function set soundTransform(value:SoundTransform):void
另请参见
time | 属性 |
time:Number
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
播放头的位置(以秒为单位)。
Flash Media Server 对于订阅流,是指流已播放的秒数。对于发布流,是指流已发布的秒数。此数字精确到千分位;将其乘以 1000 可得出流已播放的毫秒数。
对于订阅流,如果服务器停止发送数据,但流保持打开,则 time
属性的值将停止增加。当服务器重新开始发送数据时,该值将继续增加,起始位置为上次停止处(服务器停止发送数据时)。
当流从一个播放列表元素切换到另一个播放列表元素时,time
的值将继续增加。如果调用 NetStream.play()
并将 reset
设置为 1
或 true
,或者调用 NetStream.close()
,则会将此属性设置为 0。
public function get time():Number
另请参见
NetStream | () | 构造函数 |
public function NetStream(connection:NetConnection, peerID:String = "connectToFMS")
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
创建可用于通过指定的 NetConnection 对象播放视频文件的流。
有关支持的编解码器和文件格式的信息,请参阅 http://www.adobe.com/go/hardware_scaling_cn 和 Flash Media Server 文档。
参数connection:NetConnection — 一个 NetConnection 对象。 | |
peerID:String (default = "connectToFMS ") —
此参数是可选的。对于与 FMS 的连接,将此值设置为 NetStream.CONNECT_TO_FMS 。对于向同级的直接发布,请指定 NetStream.DIRECT_CONNECTIONS 。若要从特定同级直接播放,请指定该同级的标识(请参阅 NetConnection.nearID 和 NetConnection.farID )。如果 peerID 参数设置为一个同级,则 NetConnection.protocol 属性值必须为 "rtmfp" 。对于非 RTMFP 连接,将忽略 peerID 参数。ActionScript 对 peerID 参数使用默认值 "connectToFMS" ,以便捕获以编程方式将 null 值作为参数传递给 NetStream() 方法的情况。
不过,由于 new NetStream(nc:NetConnection); |
ArgumentError — 未连接 NetConnection 实例。 |
另请参见
videoURL
的视频的连接:
var my_nc:NetConnection = new NetConnection(); my_nc.connect(null); var my_ns:NetStream = new NetStream(my_nc); my_ns.play(videoURL); var my_video:Video = new Video(); my_video.attachNetStream(my_ns); addChild(my_video);
connect()
命令中指定的远程 Flash Media Server 实例上的视频(为变量 videoURL
分配的视频)的连接:
var my_nc:NetConnection = new NetConnection(); my_nc.connect("rtmp://www.yourfmsserver.com/someappname"); var my_ns:NetStream = new NetStream(my_nc, NetStream.CONNECT_TO_FMS); my_ns.play(videoURL); var my_video:Video = new Video(); my_video.attachNetStream(my_ns); addChild(my_video);
attachAudio | () | 方法 |
public function attachAudio(microphone:Microphone):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定一个通过 NetStream 对象发送的音频流,它来自作为源传递的 Microphone 对象。此方法仅可用于指定流的发布者。
attachAudio
方法用于 Flash Media Server。此方法通常是由从客户端计算机向服务器发送实时音频(或包含音频的实时视频)的用户调用的。
您可以在调用 publish()
方法并真正开始传输之前或之后,调用此方法。想要收听此音频的订阅者必须调用 NetStream.play()
方法。设置麦克风的 rate
,使其与声音捕获设备的频率匹配,并通过 setSilenceLevel()
方法设置静音级别阈值。可以通过 microphone 对象的 soundTransform
属性控制此音频流的声音属性(音量和声相)。
var conn:NetConnection = new NetConnection(); conn.connect("rtmp://server.domain.com/path"); var stream:NetStream = new NetStream(conn); var live_mic:Microphone = Microphone.get(); live_mic.rate = 8; live_mic.setSilenceLevel(20,200); var soundTrans:SoundTransform = new SoundTransform(); soundTrans.volume = 6; live_mic.soundTransform = soundTrans; stream.attachAudio(live_mic); stream.publish("mic_stream","live")
参数
microphone:Microphone — 要传输的音频流的源。 |
另请参见
attachCamera | () | 方法 |
public function attachCamera(theCamera:Camera, snapshotMilliseconds:int = -1):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
开始从摄像头捕获视频,如果将 theCamera
设置为 null
,则会停止捕获操作。此方法仅供指定的流的发布者使用。
此方法用于 Flash Media Server;有关详细信息,请参阅类说明。
在附加了视频源后,必须调用 NetStream.publish()
才能开始传输。 希望显示视频的订户必须调用 NetStream.play()
和 Video.attachCamera()
方法,才能在舞台上显示视频。
可以使用 snapshotMilliseconds
并通过提供一个正数值,将指定毫秒数的尾片添加到视频输入信号中的方式来发送单个快照(通过提供值 0)或一系列快照(实际上是延时拍摄镜头)。尾片延长了视频消息的显示时间。通过对 snapshotMilliseconds
使用正数值来重复调用 attachCamera()
,交替快照和尾片的序列将创建延时拍摄镜头。例如,可以每天捕获一个帧,将其追加到视频文件上。当订阅者播放该文件时,每个帧都会在屏幕上显示指定的毫秒数,然后才会显示下一个帧。
snapshotMilliseconds
参数的用途不同于可通过 Camera.setMode()
设置的 fps
参数。在指定 snapshotMilliseconds
时,您可以控制录制的帧之间的时间间隔。在使用 Camera.setMode()
指定 fps
时,您在控制录制和回放多长时间。
例如,假设您想每隔 5 分钟取一个快照,一共要取 100 个快照。您可以通过以下两种方式来实现:
NetStream.attachCamera(myCamera, 500)
命令,重复执行 100 次。整个录制过程将需要 500 分钟,但是产生的文件将在 50 秒内完成回放(100 个帧,帧与帧之间的时间间隔为 500 毫秒)。
fps
值为 1/300(每 300 秒一次,即每 5 分钟一次)的 Camera.setMode()
命令,然后发出一个 NetStream.attachCamera(source)
命令,使摄像头连续捕捉 500 分钟的图像。产生的文件将在 500 分钟内完成回放,这与录制的时间长度相同,每个帧显示 5 分钟。
这两种方法都同样捕获了 500 个帧,并且都很有用;具体采用何种方法,主要取决于对回放的要求。例如,在第二种情况中,可以是整段时间一直在录制音频。另外,两个文件的大小也相近。
参数
theCamera:Camera —
视频传输的源。有效值为一个 Camera 对象(可开始捕获视频)和 null 。如果传递 null ,应用程序将停止捕获视频,并忽略发送的其他任何参数。
| |
snapshotMilliseconds:int (default = -1 ) —
指定视频流是连续、单帧,还是用于创建延时拍摄的一系列单帧。
|
close | () | 方法 |
public function close():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
停止播放流上的所有数据,将 time
属性设置为 0,并使该流可用于其它用途。此方法还会删除通过 HTTP 下载的视频文件的本地副本。虽然应用程序会删除它所创建的文件的本地副本,但可能会在缓存目录中永久保留一个副本。如果必须完全禁止缓存视频文件或在本地进行存储,请使用 Flash Media Server。
如果使用 Flash Media Server,则在从发布流中调用 NetStream.play()
或从订阅流中调用 NetStream.publish()
时,将隐式地调用此方法。请注意:
close()
,该流将停止发布,发布者现在可以将该流用于其它用途。订阅者不再接收在该流中发布的任何内容,因为该流已停止发布。
close()
,该流将停止为订阅者播放,订阅者现在可以将该流用于其它用途。其它订阅者不受影响。
flash.net.NetStream.play(false)
关闭该流或更改流类型。
另请参见
onPeerConnect | () | 方法 |
public function onPeerConnect(subscriber:NetStream):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
每当一个同级发布流与一个同级订阅流相匹配时即调用。在订户连接到发行者之前,调用此方法以允许 ActionScript 代码细化同级对同级发布的访问控制。以下代码显示一个如何创建此方法的回调函数的示例:
var c:Object = new Object; c.onPeerConnect = function(subscriber:NetStream):Boolean { if (accept) return true; else return false; }; m_netStream.client = c;
如果同级发行者不实现此方法,则允许所有同级播放已发布的任何内容。
参数
subscriber:NetStream |
Boolean |
pause | () | 方法 |
public function pause():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
暂停视频流的回放。如果视频已经暂停,则调用此方法将不会执行任何操作。若要在暂时视频后恢复播放,请调用 resume()
。若要在暂停和播放之间切换(先暂停视频,然后恢复),请调用 togglePause()
。
从 Flash Player 9.0.115.0 开始,在调用 NetStream.pause()
时,Flash Player 不再清除缓冲区。在 Flash Player 9.0.115.0 之前,恢复播放之前 Flash Player 将等待缓冲区填满,这通常会导致延迟。
对于一次暂停,NetStream.bufferLength
属性的限值为 60 秒或二倍的 NetStream.bufferTime
值(取二者之中的较大值)。例如,如果 bufferTime
为 20 秒,在 NetStream.bufferLength
为较大值 20*2 (40) 或 60 之前,Flash Player 将一直进行缓冲,因此在本例中,在 bufferLength
为 60 之前,Flash Player 将一直进行缓冲。如果 bufferTime
为 40 秒,在 bufferLength
为较大值 40*2 (80) 或 60 之前,则 Flash Player 将一直进行缓冲,因此在本例中,在 bufferLength
为 80 秒之前,Flash Player 将一直进行缓冲。
bufferLength
属性还有一个绝对限制。如果对 pause()
的任何调用导致 bufferLength
增大到 600 秒以上或 bufferTime
* 2 的值(取二者中的较大值),Flash Player 将刷新缓冲区并将 bufferLength
重置为 0。例如,如果 bufferTime
为 120 秒,当 bufferLength
达到 600 秒时,Flash Player 将刷新缓冲区;如果 bufferTime
为 360 秒,当 bufferLength
达到 720 秒时,Flash Player 将刷新缓冲区。
提示:例如,在查看器监视商用版的同时,可以在代码中使用 NetStream.pause()
来缓冲数据,然后在开始播放主视频时取消暂停。
另请参见
play | () | 方法 |
public function play(... arguments):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
播放媒体文件。
有关支持的编解码器和文件格式的信息,请参阅 http://www.adobe.com/go/hardware_scaling_cn 和 Flash Media Server 文档。
若要查看视频数据,请创建一个 Video 对象,并调用 Video.attachNetStream()
方法。若要从麦克风建立音频流,请使用 NetStream.attachAudio()
方法。可以使用 Microphone 对象控制音频的某些方面。
调用 DisplayObjectContainer.addChild()
方法可将音频路由至显示列表上的某个对象。然后可以创建一个 Sound 对象来控制音频的某些方面。有关详细信息,请参阅 DisplayObjectContainer.addChild()
方法。
如果无法找到视频文件,则调度 netStatus
事件。若要停止当前播放的流,请使用 close()
方法。
在不使用 Flash Media Server 的情况下使用此方法时,有一些安全注意事项。受信任的本地沙箱或只能与远程内容交互的沙箱中的 文件可以加载并播放远程沙箱中的视频文件,但如果没有以 URL 策略文件的形式进行显式许可,则无法访问该远程文件的数据。此外,还可以在包含 SWF 内容的 HTML 页中设置 object
和 embed
标签的 allowNetworking
参数,以防止在 Flash Player 中运行的 SWF 文件使用此方法。
无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的中的“限制网络 API”。
无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的中的“限制网络 API”。
有关安全性的详细信息,请参阅以下部分:
NetStream.checkPolicyFile
属性。
参数
... arguments —
要播放的媒体文件的位置(字符串形式)、URLRequest.url 属性或引用这二者之一的变量。在应用程序安全沙箱以外的 Flash Player 和 AIR 内容中,您可以播放与 SWF 文件存储在同一个目录或子目录中的本地视频文件,但是不能导航到更高级别的目录。
如果使用 Flash Media Server,
可以播放下表中所列的文件格式。语法将随文件格式的不同而不同。
|
status: — 在尝试播放用数字权限管理 (DRM) 加密的内容时调度。code 属性的值为“DRM.encryptedFLV” 。 |
SecurityError — 本地不受信任的 SWF 文件无法与 Internet 通信。您可以通过将此 SWF 文件重新分类为只能与远程内容交互或受信任来消除此限制。 | |
ArgumentError — 至少必须指定一个参数。 | |
Error — NetStream 对象无效。这可能是由于失败的 NetConnection 造成的。 |
另请参见
ns.play("mp4:record1.f4v", 0, 100, true);
ns.play("stephen");
play2 | () | 方法 |
public function play2(param:NetStreamPlayOptions):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
开始播放媒体文件(提供一些播放选项)。
此方法是 NetStream.play()
的增强版。与 play()
方法类似,play2()
方法开始播放媒体文件或对媒体文件进行排队以创建播放列表。在将此方法用于 Flash Media Server 时,它还可以请求服务器切换到不同的媒体文件。此过渡在客户端应用程序中以无缝方式进行。
使用 play2()
方法可切换到内容相同、但以不同比特率编码的流,或从播放列表中换出流。使用 NetStreamInfo
类可监视网络状况并根据数据切换流。还可以为功能不同的客户端切换流。使用 ActionScript 切换流称为动态流。有关详细信息,请在位于 www.adobe.com/go/learn_fms_devguide_cn 的“Adobe Flash Media Server Developer Guide”(《Adobe Flash Media Server 开发人员指南》)中搜索“dynamic streaming”(动态流)。Adobe 构建了一个称为 DynamicStream 的自定义 ActionScript 类,该类扩展了 NetStream 类。可以使用 DynamicStream 类在应用程序中实现动态流,而不必自行编写代码来检测网络状况。即使决定自行编写动态流代码,也请参考 DynamicStream 类,以查看可以正常工作的实现。在 www.adobe.com/go/fms_dynamicstreaming_cn 下载该类及其文档。
参数
param:NetStreamPlayOptions |
另请参见
preloadEmbeddedData | () | 方法 |
public function preloadEmbeddedData(param:NetStreamPlayOptions):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.5 |
从本地存储的媒体文件中提取任何 DRM 元数据。
使用 preloadEmbeddedMetaData()
作为下载和缓存脱机播放所需的 DRM 凭证的第一步。在媒体文件中检测到嵌入的 DRM 元数据时,将向 NetStream client 的 onDRMContentData
函数传递一个 DRMContentData 对象。此 DRMContentData 对象包含获取凭证所需的信息,在播放内容时需要该凭证。将 DRMContentDataObject 对象传递给 DRMManager loadVoucher()
方法,以下载凭证。
预加载 DRM 凭证的步骤包括:
新建一个 NetStream 对象用于预加载元数据。
重要说明:请勿使用同一个 NetStream 对象同时播放内容和预加载元数据。对每个任务要分别使用单独的 NetStream 对象。
client
的 onDRMContentData
属性。
streamName
属性设置为本地视频文件的 URL 字符串。
preloadEmbeddedMetadata()
,同时传入 NetStreamPlayOptions 对象。
onDRMContentData
回调的响应,调用 DRMManager loadVoucher()
方法,同时传入 DRMContentData 对象。如果 DRMContentData 对象的 authenticationMethod
属性的值为 userNameAndPassWord
,则在加载凭证之前必须在媒体权限服务器上验证用户的身份。
下载的凭证存储在本地缓存中。在线播放内容也会下载和缓存凭证。在查看受 DRM 保护的内容文件时,将自动从本地存储区检索缓存的凭证。使用 DRMManager 可管理凭证缓存。
注意:不支持通过 HTTP、HTTPS 或 RTMP 连接预加载 DRM 元数据。只能从文件系统上存储的文件预加载元数据。
参数
param:NetStreamPlayOptions — 描述在处理内容文件期间要使用的选项的 NetStreamPlayOptions。 |
另请参见
publish | () | 方法 |
public function publish(name:String = null, type:String = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
将音频流、视频流和文本消息流从客户端发送到 Flash Media Server,并可选择在传输期间录制该流。此方法仅供指定的流的发布者使用。
可以录制 FLV 或 MPEG-4 格式的文件。如果录制 MPEG-4 格式的文件,则必须使用 flattener 工具才能在另一个应用程序中编辑或播放该文件。若要下载此工具,请参阅 www.adobe.com/go/learn_fms_flattener_cn。
请勿使用此方法播放已发布和录制的流。若要播放流,请调用 NetStream.play()
方法。
var subscribeNS:NetStream = new NetStream(myNetConnection); subscribeNS.play("streamToPlay");
var subscribeNS = new air.NetStream(myNetConnection); subscribeNS.play("streamToPlay");
在 Flash Media Server 录制流时,它会创建一个文件,并将其存储在服务器上应用程序目录的子目录中。每个流都存储在名称与传递给 NetConnection.connect()
的应用程序实例名称相匹配的目录中。服务器自动创建这些目录;您不必为每个应用程序实例都创建一个目录。例如,下面的代码说明了如何连接到特定应用程序实例,该实例存储在应用程序目录下面名为 lectureSeries 的目录中。名为 lecture.flv 的文件保存在名为 /yourAppsFolder/lectureSeries/streams/Monday 的子目录中:
var myNC:NetConnection = new NetConnection(); myNC.connect("rtmp://server.domain.com/lectureSeries/Monday"); var myNS:NetStream = new NetStream(myNC); myNS.publish("lecture", "record");
var myNC = new air.NetConnection(); myNC.connect("rtmp://server.domain.com/lectureSeries/Monday"); var myNS = new air.NetStream(myNC); myNS.publish("lecture", "record");
下例说明如何连接到同一个应用程序的不同实例,而发出相同的发布命令。名为 lecture.flv 的文件存储在名为 /yourAppsFolder/lectureSeries/streams/Tuesday
的子目录中:
var myNC:NetConnection = new NetConnection(); myNC.connect("rtmp://server.domain.com/lectureSeries/Tuesday"); var myNS:NetStream = new NetStream(myNC); myNS.publish("lecture", "record");
var myNC = new air.NetConnection(); myNC.connect("rtmp://server.domain.com/lectureSeries/Tuesday"); var myNS = new air.NetStream(myNC); myNS.publish("lecture", "record");
如果不为实例名称传递一个与传递给 name
属性的值相匹配的值,则该属性将存储在名为 /yourAppsFolder/appName/streams/_definst_
的子目录中。有关使用实例名称的详细信息,请参阅 NetConnection.connect()
方法。 有关回放视频文件的信息,请参阅 NetStream.play()
方法。
当 Flash Media Server 应用程序客户端调用 publish()
时,应用程序将收到 onPublish
事件。应用程序必须在服务器端脚本中处理该事件。要停止发布,请调用 NetStream.close()
。当客户端停止发布时,应用程序将收到 onUnpublish
事件。有关详细信息,请参阅 Flash Media Server Server-Side ActionScript Language Reference(《Flash Media Server 服务器端 ActionScript 语言参考》)。
此方法可调度具有若干个不同信息对象的 netStatus
事件。例如,如果某个用户在具有指定名称的流上进行发布,则 netStatus
事件将随 NetStream.Publish.BadName
的代码属性一起调度。有关详细信息,请参阅 netStatus
事件。
参数
name:String (default = null ) —
标识该流的字符串。订阅此流的客户端必须在调用 NetStream.play() 时仍然传递此名称。流名称后面不要跟“/”。例如,不要使用流名称“bolero/ ”。
可以发布下表所述格式的文件。语法将随文件格式的不同而不同。
| |||||||||||||
type:String (default = null ) —
指定如何发布该流的字符串。有效值为“record ”、“append ”和“live ”。默认值为“live ”。
|
另请参见
receiveAudio | () | 方法 |
public function receiveAudio(flag:Boolean):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定传入的音频是否在流上播放。此方法仅可用于订阅了指定流的客户端,不可用于流的发布者。
此方法主要用于 Flash Media Server;有关详细信息,请参阅类说明。
您可以在调用 NetStream.play()
方法并真正开始接收流之前或之后,调用此方法。 例如,您可以将这些方法附加到某个按钮上,用户可以通过单击该按钮将传入的音频流静音或取消静音。
如果指定的流仅包含音频数据,则将 false
值传递给该方法可以阻止 NetStream.time
进一步递增。
参数
flag:Boolean —
指定传入音频是在流上播放 (true ) 还是不播放 (false )。默认值为 true 。
|
receiveVideo | () | 方法 |
public function receiveVideo(flag:Boolean):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定传入的音频是否将在流上播放。此方法仅可用于订阅了指定流的客户端,不可用于流的发布者。
此方法主要用于 Flash Media Server;有关详细信息,请参阅类说明。
您可以在调用 NetStream.play()
方法并真正开始接收流之前或之后,调用此方法。例如,您可以将这些方法附加到某个按钮上,用户可以通过按该按钮来显示或隐藏传入的视频流。
如果指定的流仅包含视频数据,则将 false
值传递给该方法可以阻止 NetStream.time
进一步递增。
参数
flag:Boolean —
指定传入视频是在此流上播放 (true ) 还是不播放 (false )。默认值为 true 。
|
receiveVideoFPS | () | 方法 |
public function receiveVideoFPS(FPS:Number):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定传入视频的帧速率。此方法仅可用于订阅了指定流的客户端,不可用于流的发布者。
此方法主要用于 Flash Media Server;有关详细信息,请参阅类说明。
您可以在调用 NetStream.play()
方法并真正开始接收流之前或之后,调用此方法。例如,可以将这些方法附加到供用户设置传入视频帧速率的文本字段。
若要停止接收视频,请为 FPS 传递 0。若要确定当前帧速率,请使用 NetStream.currentFPS
。
如果向 FPS
参数传递一个值以限制视频的帧速率,Flash Media Server 将会尝试在保持视频完整性的同时降低帧速率。服务器将发送最小数量的视频帧以满足每两个关键帧之间需要的速率。但请牢记,必须连续发送 I 帧(即,中间帧);否则,视频将损坏。因此,在关键帧后需要立即连续发送需要的帧数。由于各个帧不是均匀分布的,因此在由于中断而截断的部分中,动作仍会平滑地显示。
参数
FPS:Number — 指定用于播放传入视频的每秒帧速率。 |
resetDRMVouchers | () | 方法 |
public static function resetDRMVouchers():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
删除所有本地缓存的数字权限管理 (DRM) 凭证数据。
应用程序必须从媒体权限服务器重新下载任何必要的凭证,用户才能访问受保护的内容。调用此函数等同于调用 DRMManager 对象的 resetDRMVouchers()
函数。
IOError — 无法删除凭证数据。 |
另请参见
NetStream.resetDRMVouchers();
resume | () | 方法 |
public function resume():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
恢复回放暂停的视频流。如果视频已在播放,则调用此方法将不会执行任何操作。
另请参见
seek | () | 方法 |
public function seek(offset:Number):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
搜索与指定位置最接近的关键帧(在视频行业中也称为 I 帧)。关键帧位于从流的开始处算起的偏移位置(以秒为单位)。
视频流通常是使用以下两种类型的帧进行编码的:关键帧(或 I 帧)和 P 帧。关键帧包含完整图像;而 P 帧是一个中间帧,它在两个关键帧之间提供额外的视频信息。通常,视频流每 10 到 50 帧中有一个关键帧。
在 Flash Media Server 上,seek()
的行为是由 Application.xml
配置文件中的 EnhancedSeek
元素的值控制的。
如果 EnhancedSeek
为 false
,服务器将使用标准搜索模式。在标准搜索模式下,服务器开始从最近的关键帧进行流式传输。 例如,如果视频在第 0 秒和第 10 秒处各有一个关键帧,则搜索第 4 秒位置的操作将导致使用 0 秒处的关键帧在第 4 秒处开始播放。在到达下一个关键帧(在第 10 秒处)之前,视频将保持冻结。 若要获得更好的搜索体验,您需要缩短关键帧间隔。在标准搜索模式下,无法在两个关键帧之间的位置启动视频。
如果 EnhancedSeek
为 true
(默认值),服务器将基于前一个关键帧和所有中间的 P 帧在 offset
位置生成一个新的关键帧。不过,这会在服务器上产生较高的处理负载,并且生成的关键帧中可能会发生扭曲。如果视频编解码器为 On2,则会将搜索点之前的关键帧以及该关键帧和搜索点之间的所有 P 帧发送到客户端。
参数
offset:Number —
要在视频文件中移动到的时间近似值(以秒为单位)。使用 Flash Media Server 时,如果在 Application.xml 配置文件中将 <EnhancedSeek> 设置为 true (这是默认设置),服务器将在 offset 位置生成一个关键帧。
|
另请参见
send | () | 方法 |
public function send(handlerName:String, ... arguments):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在发布的流上向所有订阅客户端发送一条消息。此方法仅供指定的流的发布者使用,并与 Flash Media Server 一起使用。若要处理并响应该消息,请在 NetStream
对象上创建一个处理函数,例如,ns.HandlerName
。
Flash Player 或AIR 不对方法或方法的数据、对象原型变量或不可枚举的变量进行序列化处理。对于显示对象,Flash Player 或 AIR 仅对路径而不对数据进行序列化处理。
您可以调用 send()
方法,将数据关键帧添加到发送给 Flash Media Server 的实时流中。数据关键帧是发布者添加到实时流中的消息。通常,在从摄像头和麦克风为实时流捕获数据之前,使用数据关键帧将元数据添加到该流中。在发布实时流期间,发布者可以随时添加数据关键帧。只要发布者连接到服务器上,就会将数据关键帧保存在服务器的内存中。
如果客户端是在添加数据关键帧之前订阅实时流的,则会在添加后立即收到该关键帧。如果客户端是在添加数据关键帧之后订阅实时流的,则会在订阅时收到该关键帧。
若要将元数据关键帧添加到发送给 Flash Media Server 的实时流中,请使用 @setDataFrame
作为处理函数名称,后跟两个其它参数,例如:
var ns:NetStream = new NetStream(nc); ns.send("@setDataFrame", "onMetaData", metaData);
var ns = new air.NetStream(nc); ns.send("@setDataFrame", "onMetaData", metaData);
@setDataFrame
参数引用 Flash Media Server 中内置的一个特殊处理函数。onMetaData
参数是客户端应用程序中侦听 onMetaData
事件并检索元数据的回调函数的名称。第三项 metaData
是包含用于定义元数据值的属性的 Object
或 Array
实例。发布者应该设置订阅者易于理解的属性名称;有关建议的属性名称的列表,请参阅 Flash Media Server 文档。
可以使用 @clearDataFrame
清除已在流中设置的元数据关键帧:
ns.send("@clearDataFrame", "onMetaData");
参数
handlerName:String —
要发送的消息;还有接收消息使用的 ActionScript 处理函数的名称。处理函数的名称只能为单级形式(即不能是父/子多级形式)并相对于流对象。不要对处理函数名称使用保留字。例如,将“close ”用作处理函数名称将导致该方法失败。如果使用 Flash Media Server,请使用 @setDataFrame 将元数据关键帧添加到实时流中,或者使用 @clearDataFrame 删除关键帧。
| |
... arguments —
可以是任何类型的可选参数。它们经过序列化并通过该连接发送,而接收处理函数则以相同的顺序接收它们。如果某个参数为循环对象(如循环的链接列表),则序列化函数可以正确处理引用。使用 Flash Media Server 时,如果 @setDataFrame 是第一个参数,请使用 onMetaData 作为第二个参数;对于第三个参数,请传递将元数据设置为属性的 Object 或 Array 实例。有关建议的属性名称的列表,请参阅 Flash Media Server 文档。如果将 @clearDataFrame 作为第一个参数,请使用 onMetaData 作为第二个参数,而不使用第三个参数。
|
另请参见
NetStream
对象。一个对象用于将实时流发布到服务器上;另一个对象用于订阅该流。
package { import flash.display.Sprite; import flash.net.NetConnection; import flash.net.NetStream; import flash.events.NetStatusEvent; import flash.media.Video; import flash.utils.setTimeout; public class TestExample extends Sprite { var nc:NetConnection = new NetConnection(); var ns1:NetStream; var ns2:NetStream; var vid:Video = new Video(300,300); var obj:Object = new Object(); public function TestExample() { nc.objectEncoding = 0; nc.addEventListener("netStatus", onNCStatus); nc.connect("rtmp://localhost/FlashVideoApp"); addChild(vid); } function onNCStatus(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": trace("You've connected successfully"); ns1 = new NetStream(nc); ns2 = new NetStream(nc); ns1.client = new CustomClient(); ns1.publish("dummy", "live"); ns2.play("dummy"); ns2.client = new CustomClient(); vid.attachNetStream(ns2); setTimeout(sendHello, 3000); break; case "NetStream.Publish.BadName": trace("Please check the name of the publishing stream" ); break; } } function sendHello():void { ns1.send("myFunction", "hello"); } } } class CustomClient { public function myFunction(event:String):void { trace(event); } }
private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetStream.Publish.Start": var metaData:Object = new Object(); metaData.title = "myStream"; metaData.width = 400; metaData.height = 200; ns.send("@setDataFrame", "onMetaData", metaData); ns.attachCamera( Camera.getCamera() ); ns.attachAudio( Microphone.getMicrophone() ); } }
onMetaData
事件处理函数。onMetaData
事件处理函数不是使用 addEventListener()
注册的,而是一个具有名称 onMetaData
的回调函数,例如:
public function onMetaData(info:Object):void { trace("width: " + info.width); trace("height: " + info.height); }
// Create a NetStream for playing var my_ns:NetStream = new NetStream(my_nc); my_video.attachNetStream(my_ns); // Play the stream record1 my_ns.play("record1", 0, -1, true); // Switch to the stream live1 and play for 5 seconds. // Since reset is false, live1 will start to play after record1 is done. my_ns.play("live1", -1 , 5, false);
//To play at normal speed var my_ns:NetStream = new NetStream(my_nc); my_ns.play("log", 0, -1); //To get the data messages all at once my_ns.play("log", 0, -1, 3);
setDRMAuthenticationCredentials | () | 方法 |
public function setDRMAuthenticationCredentials(userName:String, password:String, type:String):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
设置查看基础加密内容所需要的 DRM 身份验证凭据。
setDRMAuthenticationCredentials()
方法提供的凭据与内容提供程序或代理服务器已知并接受的凭据相匹配。这些凭据与用户获取权限以查看内容时使用的凭据相同。
参数
userName:String — 有效的用户名凭据。 | |
password:String — 与提供的用户名对应的密码凭据。 | |
type:String —
一个字符串,指定提供哪种类型的身份验证凭据。有效值为“drm” 和“proxy” 。默认值为“drm” 。
|
另请参见
togglePause | () | 方法 |
public function togglePause():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
暂停或恢复流的回放。第一次调用此方法时,将暂停播放;下一次调用此方法时,将恢复播放。您可以使用此方法,允许用户通过按某个按钮来暂停或恢复回放。
另请参见
asyncError | 事件 |
flash.events.AsyncErrorEvent
flash.events.AsyncErrorEvent.ASYNC_ERROR
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在异步引发异常(即来自本机异步代码)时调度。当服务器调用客户端上未定义的方法时调度此事件。
AsyncErrorEvent.ASYNC_ERROR
常数定义 asyncError
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false 此属性适用于 ActionScript 3.0 显示对象(在 SWF 文件中)。
|
cancelable
|
false ;没有要取消的默认行为。此属性适用于 SWF 内容中使用 ActionScript 3.0 显示体系结构的显示对象。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 此属性适用于 SWF 内容中使用 ActionScript 3.0 显示体系结构的显示对象。 |
target
| 调度事件的对象。 |
error
| 触发此事件的错误。 |
另请参见
drmAuthenticate | 事件 |
flash.events.DRMAuthenticateEvent
flash.events.DRMAuthenticateEvent.DRM_AUTHENTICATE
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在 NetStream 对象尝试播放使用数字权限管理 (DRM) 加密的内容(播放前需要用户凭据以进行身份验证)时调度。
使用 NetStream 对象的 setDRMAuthenticationCredentials()
方法对用户进行身份验证。如果用户身份验证失败,则应用程序将重新尝试身份验证并为 NetStream 对象调度一个新的 DRMAuthenticateEvent 事件。
DRMAuthenticateEvent.DRM_AUTHENTICATE
常量定义 DRMAuthenticateEvent 对象的 type
属性的值。
此事件具有以下属性:
属性 | 值 |
---|---|
authenticationType
| 指示提供的凭据是用于针对 Flash Media Rights Management Server (FMRMS) 的身份验证,还是用于针对代理服务器的身体验证。 |
bubbles
|
false
|
cancelable
|
false 指示没有要取消的默认行为。
|
header
| 服务器提供的加密内容文件标头。 |
netstream
| 启动此事件的 NetStream 对象。 |
passwordPrompt
| 服务器提供的密码凭据提示。 |
target
| NetStream 对象。 |
urlPrompt
| 服务器提供的要显示的 URL 提示。 |
usernamePrompt
| 服务器提供的用户名凭据提示。 |
另请参见
drmError | 事件 |
flash.events.DRMErrorEvent
flash.events.DRMErrorEvent.DRM_ERROR
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在 NetStream 对象尝试播放数字权限管理 (DRM) 加密的文件的过程中遇到与 DRM 相关的错误时调度。例如,用户身份验证失败时,将调度 DRMErrorEvent 对象。这可能是由于用户没有购买查看内容的权限或者是由于内容提供程序不支持执行查看的应用程序。
DRMErrorEvent.DRM_ERROR
常量定义 drmError
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
errorID
| 分配给问题的数字错误代码。 |
subErrorID
| 指示有关基本问题的更多详细信息的错误代码。 |
target
| NetStream 对象。 |
另请参见
drmStatus | 事件 |
flash.events.DRMStatusEvent
flash.events.DRMStatusEvent.DRM_STATUS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在开始播放数字权限管理 (DRM) 加密的内容时(如果已对用户进行身份验证并授权播放该内容)调度。
DRMStatusEvent 对象包含与凭证有关的信息,如是否可以脱机使用该内容或凭证何时过期而无法再查询该内容。
DRMStatusEvent.DRM_STATUS
常量定义 drmStatus
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
detail
| 说明状态事件上下文的字符串。 |
isAnonymous
| 指示使用 DRM 加密保护的内容是否可用而不需要用户提供身份验证凭据。 |
isAvailableOffline
| 指示使用 DRM 加密保护的内容是否可脱机使用。 |
offlineLeasePeriod
| 可以脱机查看内容的剩余天数。 |
方案
| DRM 状态事件的自定义对象。 |
target
| NetStream 对象。 |
voucherEndDate
| 凭证的绝对到期日期,此后,用户将无法再查看该内容 |
contentData
| 内容的 DRMContentData |
voucher
| 内容的 DRMVoucher 对象。 |
isLocal
| 指示内容是否存储在本地文件系统上 |
另请参见
ioError | 事件 |
flash.events.IOErrorEvent
flash.events.IOErrorEvent.IO_ERROR
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在出现输入或输出错误并导致网络操作失败时调度。
定义ioError
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
errorID
| 与特定错误关联的引用编号(仅限 AIR)。 |
target
| 发生输入/输出错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
netStatus | 事件 |
flash.events.NetStatusEvent
flash.events.NetStatusEvent.NET_STATUS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在 NetStream 对象报告其状态或错误条件时调度。netStatus
事件包含一个 info
属性,该属性是一个包含有关事件特定信息(例如连接尝试成功还是失败)的信息对象。
netStatus
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
info
| 一个对象,具有描述对象的状态或错误情况的属性。 |
target
| 报告其状态的 NetConnection 或 NetStream 对象。 |
另请参见
onCuePoint | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在播放视频文件期间到达嵌入提示点时建立侦听器进行响应。在视频到达某个特定提示点时,您可以使用此侦听器触发代码中的操作,从而使应用程序中的其他操作与视频回放事件实现同步。有关 Flash Media Server 支持的视频文件格式的信息,请参阅 Flash Media Server 文档。
onCuePoint
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述。不能使用 addEventListener()
方法或任何其它 EventDispatcher 方法将 onCuePoint
作为事件进行侦听或处理。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
关联的事件侦听器在调用 NetStream.play()
方法之后、在视频播放头前进之前触发。
可以在视频文件中嵌入以下类型的提示点:
time
属性对应于该关键帧。导航提示点经常被用作书签或入口点,以便用户在视频文件中导航。
onCuePoint
事件对象具有以下属性:
属性 | Description |
---|---|
name
| 将提示点嵌入视频文件时为其指定的名称。 |
parameters
| 为此提示点指定的一个由名称/值对字符串组成的关联数组。任何有效的字符串都可用于参数名或参数值。 |
time
| 提示点在视频文件回放期间的出现时间(以秒为单位)。 |
type
| 到达的提示点的类型:导航提示点或事件提示点。 |
在首次对视频文件进行编码时,或者在 Flash 创作工具中使用“视频导入”向导导入视频剪辑时,您可以在该视频文件中定义提示点。
onMetaData
事件还会在视频文件中检索有关提示点的信息。不过,onMetaData
事件会在视频开始播放之前,获取有关所有提示点的信息。onCuePoint
事件会在回放期间对某个提示点所指定的时间,接收有关该提示点的信息。
通常,要让代码在特定的提示点出现时对它给予响应,请使用 onCuePoint
事件来触发代码中的某个操作。
您可以使用提供给 onMetaData
事件的提示点列表,允许用户在视频流的预定义点处开始播放视频。将提示点的 time
属性的值传递给 NetStream.seek()
方法,以便从该提示点播放视频。
另请参见
onDRMContentData | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.5 |
建立一个侦听器,以便在 AIR 提取媒体文件中嵌入的 DRM 内容元数据时作出响应。
DRMContentData 对象包含获取凭证所需的信息,在播放受 DRM 保护的媒体文件时需要该凭证。使用 DRMManager 类可根据这些信息下载该凭证。
onDRMContentData
实际上是 NetStream.client
对象的一个属性。它不是事件,但之所以在 Events 一节中列出,是因为从本地媒体文件预加载嵌入的数据时它将响应数据事件。有关详细信息,请参阅 NetStream 类的描述。不能使用 addEventListener()
方法或任何其它 EventDispatcher 方法将 onDRMContentData
作为事件进行侦听或处理。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
另请参见
onImageData | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9.0.115.0 |
在 Flash Player 以字节数组形式接收到正在播放的媒体文件中嵌入的图像数据时建立侦听器进行响应。图像数据可以生成 JPEG、PNG 或 GIF 内容。使用 flash.display.Loader.loadBytes()
方法可以将该字节数组加载到显示对象中。
onImageData
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述。不能使用 addEventListener()
方法或任何其他 EventDispatcher 方法侦听或处理 onImageData
事件。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
关联的事件侦听器在调用 NetStream.play()
方法之后、在视频播放头前进之前触发。
onImageData 事件对象包含通过 AMF0 数据通道以字节数组形式发送的图像数据。
Netstream.client
属性来处理 onTextData
和 onImageData
的回调函数。onImageDataHandler()
函数使用 onImageData 事件对象 imageData
来存储该字节数组。而 onTextDataHandler()
函数使用 onTextData 事件对象 textData
来存储各段文本数据(每段数据都是 textData
对象的一个属性)。
您需要在代码中用位置 "yourURL"
的文本或图像元数据替换媒体文件的实际位置。
您也可以使用自定义类处理图像和文本数据。有关详细信息和示例,请参阅文章 Handling metadata and cue points in Flash video(处理 Flash 视频中的元数据和提示点)。
package { import flash.display.*; import flash.net.*; import flash.media.*; import flash.system.*; import flash.events.*; public class OnTextDataExample extends Sprite { public function OnTextDataExample():void { var customClient:Object = new Object(); customClient.onImageData = onImageDataHandler; customClient.onTextData = onTextDataHandler; var my_nc:NetConnection = new NetConnection(); my_nc.connect(null); var my_ns:NetStream = new NetStream(my_nc); my_ns.play("yourURL"); my_ns.client = customClient; var my_video:Video = new Video(); my_video.attachNetStream(my_ns); addChild(my_video); } public function onImageDataHandler(imageData:Object):void { trace("imageData length: " + imageData.data.length); var imageloader:Loader = new Loader(); imageloader.loadBytes(imageData.data); // imageData.data is a ByteArray object. addChild(imageloader); } public function onTextDataHandler(textData:Object):void { trace("--- textData properties ----"); var key:String; for (key in textData) { trace(key + ": " + textData[key]); } } } }
另请参见
onMetaData | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在 Flash Player 接收到正在播放的视频中嵌入的描述性信息时建立侦听器进行响应。有关 Flash Media Server 支持的视频文件格式的信息,请参阅 Flash Media Server 文档。
onMetaData
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述以及 NetStream.client
属性。不能使用 addEventListener()
方法或任何其他 EventDispatcher 方法侦听或处理 onMetaData
事件。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
Flash Video Exporter 实用程序(1.1 版本或更高版本)将视频的持续时间、创建日期、数据速率及其它信息嵌入视频文件本身。不同的视频编码器嵌入不同的元数据组中。
关联的事件侦听器在调用 NetStream.play()
方法之后、在视频播放头前进之前触发。
在多数情况下,流元数据中嵌入的持续时间值接近于实际持续时间,但并不精确。 换言之,当播放头在视频流的结尾处时,此值不会始终与 NetStream.time
属性的值相匹配。
传递到 onMetaData 事件处理函数的事件对象包含每段数据的一个属性。
另请参见
onPlayStatus | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在 NetStream 对象已完全播放流时建立侦听器进行响应。关联的事件对象除了提供由 netStatus
事件返回的信息以外,还提供一些其他信息。您可以在 NetStream 对象从播放列表中的一个流切换到另一个流时(如信息对象 NetStream.Play.Switch
所示),或者在 NetStream 对象播放到结尾时(如信息对象 NetStream.Play.Complete
所示),使用此属性触发代码中的操作。
onPlayStaus
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述。不能使用 addEventListener()
方法或任何其它 EventDispatcher 方法将 onPlayStatus
作为事件进行侦听或处理。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
此事件可返回一个具有以下属性的信息对象:
代码属性 | 级别属性 | 意义 |
---|---|---|
NetStream.Play.Switch
|
"status"
| 订阅者正在从播放列表中的一个流切换到另一个流。 |
NetStream.Play.Complete
|
"status"
| 播放已结束。 |
NetStream.Play.TransitionComplete
|
"status"
| 应用流比特率切换之后,订户将切换到新的流 |
另请参见
onTextData | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9.0.115.0 |
在 Flash Player 接收到正在播放的媒体文件中嵌入的文本数据时建立侦听器进行响应。文本数据采用 UTF-8 格式并可以包含有关基于 3GP Timed Text 规范的格式设置的信息。
onTextData
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述。不能使用 addEventListener()
方法或任何其它 EventDispatcher 方法将 onTextData
作为事件进行侦听或处理。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
关联的事件侦听器在调用 NetStream.play()
方法之后、在视频播放头前进之前触发。
onTextData 事件对象对每段文本数据包含一个属性。
Netstream.client
属性来处理 onTextData
和 onImageData
的回调函数。onImageDataHandler()
函数使用 onImageData 事件对象 imageData
来存储该字节数组。而 onTextDataHandler()
函数使用 onTextData 事件对象 textData
来存储各段文本数据(每段数据都是 textData
对象的一个属性)。
您需要在代码中用位置 "yourURL"
的文本或图像元数据替换媒体文件的实际位置。
您也可以使用自定义类处理图像和文本数据。有关详细信息和示例,请参阅文章 Handling metadata and cue points in Flash video(处理 Flash 视频中的元数据和提示点)。
package { import flash.display.*; import flash.net.*; import flash.media.*; import flash.system.*; import flash.events.*; public class OnTextDataExample extends Sprite { public function OnTextDataExample():void { var customClient:Object = new Object(); customClient.onImageData = onImageDataHandler; customClient.onTextData = onTextDataHandler; var my_nc:NetConnection = new NetConnection(); my_nc.connect(null); var my_ns:NetStream = new NetStream(my_nc); my_ns.play("yourURL"); my_ns.client = customClient; var my_video:Video = new Video(); my_video.attachNetStream(my_ns); addChild(my_video); } public function onImageDataHandler(imageData:Object):void { trace("imageData length: " + imageData.data.length); var imageloader:Loader = new Loader(); imageloader.loadBytes(imageData.data); // imageData.data is a ByteArray object. addChild(imageloader); } public function onTextDataHandler(textData:Object):void { trace("--- textData properties ----"); var key:String; for (key in textData) { trace(key + ": " + textData[key]); } } } }
另请参见
onXMPData | 事件 |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
建立一个侦听器,以便在 Flash Player 接收到特定于正在播放的视频中嵌入的 Adobe 可扩展元数据平台 (XMP) 的信息时进行响应。有关 Flash Media Server 支持的视频文件格式的信息,请参阅 Flash Media Server 文档。
onXMPData
实际上是 NetStream.client
对象的属性。它不是一个事件,之所以列在事件部分,是因为它在流媒体使用 Flash Media Server 时或在 FLV 文件回放过程中响应数据事件。有关详细信息,请参阅 NetStream 类的描述以及 NetStream.client
属性。不能使用 addEventListener()
方法或任何其他 EventDispatcher 方法侦听或处理 onMetaData
事件。相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:
client
属性所引用的对象。
关联的事件侦听器在调用 NetStream.play()
方法之后、在视频播放头前进之前触发。
传递给 onXMPData()
事件处理函数的对象包含一个 data
属性,此属性是一个字符串。此字符串在顶级 UUID 框中生成。(顶级框的 128 位 UUID 为 BE7ACFCB-97A9-42E8-9C71-999491E3AFAC
。)此顶级 UUID 框正好包含一个 XML 文档,该文档以 null 结尾的 UTF-8 字符串形式表示。
另请参见
status | 事件 |
flash.events.StatusEvent
flash.events.StatusEvent.STATUS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在应用程序尝试通过调用 NetStream.play()
方法播放用数字权限管理 (DRM) 加密的内容时调度。状态代码属性的值将为“DRM.encryptedFLV”
。
status
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
code
| 对象状态的描述。 |
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
level
|
消息类别,例如 "status" 、"warning" 或 "error" 。
|
target
| 报告其状态的对象。 |
另请参见
CONNECT_TO_FMS | 常量 |
public static const CONNECT_TO_FMS:String = "connectToFMS"
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
一个静态对象,用作 NetStream 实例的构造函数的参数。它是 NetStream 构造函数中的第二个参数的默认值;对于渐进式媒体播放,应用程序将不使用默认值。若使用此参数,则会导致构造函数建立与 Flash Media Server 实例的连接。
DIRECT_CONNECTIONS | 常量 |
public static const DIRECT_CONNECTIONS:String = "directConnections"
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
创建同级对同级发行者连接。将第二个(可选)参数的此字符串传递给 NetStream 实例的构造函数。利用此字符串,应用程序可以出于向客户端发布音频和视频的目的而创建 NetStream 连接。
videoURL
的变量匹配,在本例中,名为 Video.flv 的 FLV 文件与 SWF 文件在同一个目录中。
在本例中,创建 Video 和 NetStream 对象并调用 Video.attachNetStream()
和 NetStream.play()
方法的代码放在处理函数中。仅当连接到 NetConnection 对象的尝试取得成功时才调用处理函数,即,当 netStatus
事件返回 info
对象(带有一个表示成功的 code
属性)时,才调用该处理函数。建议您在调用 NetStream.play()
之前,等待连接成功。
package { import flash.display.Sprite; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.events.Event; public class NetConnectionExample extends Sprite { private var videoURL:String = "Video.flv"; private var connection:NetConnection; private var stream:NetStream; public function NetConnectionExample() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Stream not found: " + videoURL); break; } } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function connectStream():void { var stream:NetStream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); stream.client = new CustomClient(); var video:Video = new Video(); video.attachNetStream(stream); stream.play(videoURL); addChild(video); } } } class CustomClient { public function onMetaData(info:Object):void { trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate); } public function onCuePoint(info:Object):void { trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type); } }