网络视频会议 二

视频基础知识

视频处理简介

Adobe Flash Player 的一个重要功能是可以使用 ActionScript,以操作其它可视内容(如图像、动画、文本等)的方式显示和操作视频信息。

在 Adobe Flash CS3 Professional 中创建 Flash 视频 (FLV) 文件时,您可以选择视频的外观,包括常用的回放控件。不过,您不一定要局限于可用的选项。使用 ActionScript 可以精确控制视频的加载、显示和回放,这意味着您可以创建自己的视频播放器外观,也可以按照所需的任何非传统方式使用视频。

在 ActionScript 中使用视频涉及多个类的联合使用:

  • Video 类:舞台上的实际视频内容框是 Video 类的一个实例。Video 类是一种显示对象,因此可以使用适用于其它显示对象的同样的技术(比如定位、应用变形、应用滤镜和混合模式等)进行操作。
  • NetStream 类:在加载将由 ActionScript 控制的视频文件时,将使用一个 NetStream 实例来表示该视频内容的源,在本例中为视频数据流。使用 NetStream 实例也涉及 NetConnection 对象的使用,该对象是到视频文件的连接,它好比是视频数据馈送的通道。
  • Camera 类:在通过连接到用户计算机的摄像头处理视频数据时,会使用一个 Camera 实例来表示视频内容的源,即用户的摄像头和它所提供的视频数据。

在加载外部视频时,您可以从标准 Web 服务器加载文件以便进行渐进式下载回放,也可以使用由专门的服务器(如 Adobe 的 Macromedia® Flash® Media Server)传送的视频流。

常见视频任务

本章介绍了以下您将希望执行的与视频相关的任务:

  • 显示和控制屏幕上的视频
  • 加载外部 FLV 文件
  • 处理视频文件中的元数据和提示点信息
  • 捕获和显示从用户摄像头输入的视频

重要概念和术语

  • 提示点:一个可以放在视频文件内特定时刻的标记,例如,可用作书签以便定位到该时刻或提供与该时刻相关联的其它数据。
  • 编码:以一种格式接收视频数据并将其转换为另一种视频数据格式的过程;例如,接收高分辨率的源视频并将其转换为适合于 Internet 传送的格式。
  • 帧:单一的一段视频信息;每一帧都类似于一个代表某一时刻的快照的静止图像。通过按顺序高速播放各个帧,可产生动画视觉效果。
  • 关键帧:包含帧的完整信息的视频帧。关键帧后面的其它帧仅包含有关它们与关键帧之间的差异的信息,而不包含完整的帧信息。
  • 元数据:有关视频文件的信息,可嵌入在视频文件中并可在加载视频时检索。
  • 渐进式下载:当视频文件从标准 Web 服务器传送时,会使用渐进式下载来加载视频数据,这意味着会按顺序加载视频信息。其好处是不必等待整个文件下载完毕即可开始播放视频;不过,它会阻止您向前跳到视频中尚未加载的部分。
  • 流式传输:渐进式下载的一种替代方法,使用流式传输(有时称为“实流”)技术和一台专用视频服务器通过 Internet 传送视频。使用流式传输,用于查看视频的计算机不必一次下载整个视频。为了加快下载速度,在任何时刻,计算机均只需要整个视频信息的一部分。由于使用一台专用服务器来控制视频内容的传送,因此可以在任何时刻访问视频的任何部分,而无需等待其下载完毕后才能进行访问。

完成本章中的示例

学习本章的过程中,您可能想要自己动手测试一些示例代码清单。由于本章是有关在 ActionScript 中使用视频的,因此,本章中的许多代码清单都涉及处理视频对象(可能是在 Flash 创作工具中创建并放置在舞台上的对象,也可能是使用 ActionScript 创建的对象)。测试范例将涉及在 Flash Player 中查看结果,以了解代码对视频的影响。

多数示例代码清单都操作 Video 对象而不显式创建该对象。要测试本章中的这些代码清单,请执行以下操作:

  1. 创建一个空的 Flash 文档。
  2. 在时间轴上选择一个关键帧。
  3. 打开“动作”面板,将代码清单复制到“脚本”窗格中。
  4. 如有必要,请打开“库”面板。
  5. 从“库”面板菜单中,选择“新建视频”。
  6. 在“视频属性”对话框中,输入新视频元件的名称,然后在“类型”字段中选择“视频(受 ActionScript 控制)”。单击“确定”创建一个视频元件。
  7. 将视频元件的一个实例从“库”面板拖动到舞台上。
  8. 使视频实例保持选中状态,在“属性”检查器中,为其指定实例名称。名称应与示例代码清单中视频实例使用的名称相匹配,例如,如果代码清单操作名为 vid 的 Video 对象,则应将舞台实例也命名为 vid
  9. 使用“控制”>“测试影片”运行程序。

    在屏幕上,您将看到按照代码清单所指定的要求操作视频的结果。

本章中的一些示例代码清单除了包括示例代码以外,还包括类定义。在这些列表中,除了前几步之外,在测试 SWF 之前,还需要创建用在示例中的类。要创建在示例代码清单中定义的类,请执行以下操作:

  1. 请确保已经保存了将用于测试的 FLA 文件。
  2. 从主菜单中选择“文件”>“新建”。
  3. 在“新建文档”对话框的“类型”部分,选择“ActionScript 文件”。单击“确定”创建新的 ActionScript 文件。
  4. 将类定义代码从示例复制到 ActionScript 文档中。
  5. 从主菜单中选择“文件”>“保存”。将该文件保存在 Flash 文档所在的目录中。文件名应与代码清单中的类的名称一致。例如,如果代码清单定义一个名为“VideoTest”的类,则将 ActionScript 文件保存为“VideoTest.as”。
  6. 返回到 Flash 文档。
  7. 使用“控制”>“测试影片”运行程序。

    您将在屏幕上看到示例的结果。

  8. NetStream

  9.  

    flash.net
    public class NetStream
    继承 NetStream Inheritance EventDispatcher Inheritance Object
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9
    NetStream 类通过 NetConnection 对象提供的连接,打开了 Flash Player 与服务器(例如:Adobe 的 Macromedia Flash Media Server 2 或 Adobe Flex)或 Flash Player 与本地文件系统之间的单向流连接。 NetStream 对象类似于 NetConnection 对象中的一个通道;这个通道可以使用 NetStream.publish() 发布音频和/或视频数据,也可以使用 NetStream.play() 订阅已发布的流并接收数据。 您可以发布或播放实时数据及先前录制的数据。 您还可以使用 NetStream 对象向所有已订阅的客户端发送文本消息(请参阅 NetStream.send() 方法)。

    与在 Flash 文档中嵌入视频相比,播放外部 FLV 文件有多个好处,例如更好的性能和内存管理以及独立的视频和 Flash 帧频。 该类提供若干方法和属性,您可以利用这些方法和属性在加载和播放文件时跟踪其进度,以及便于用户控制播放(停止或暂停等)。

    NetStream 类中的一些属性和方法主要用于服务器(例如:Flash Media Server 或 Flex)。 它们可能包含更多的服务器端功能。 有关其它文档,请参阅 Flash Media Server documentation中的 NetStream 类。

    音频流或视频流的一般工作流程。以下步骤总结了发布实时音频和视频所需的一般操作顺序:

    1. 创建一个 NetConnection 对象。
    2. 使用 NetConnection.connect() 方法将应用程序实例连接到服务器。
    3. 创建一个 NetStream 对象,以便通过该连接创建一个数据流。
    4. 使用 NetStream.attachAudio() 方法通过该流捕获和发送音频,使用 NetStream.attachVideo() 方法通过该流捕获和发送视频。
    5. 使用 NetStream.publish() 方法赋予该流唯一的名称,并通过该流将数据发送给服务器,以便其他用户可以接收到该数据。 您还可以在发布数据的时候进行录制,以便用户可以在日后回放该数据。

      订阅此流的 SWF 文件将在调用 play() 时使用传递给 publish() 的名称,并将与发布者调用相同的 NetConnection.connect() 方法。 它们必须调用 Video.attachNetStream() 方法对视频进行流处理,调用 NetStream.play() 方法播放视频。

    查看示例

    另请参见



    公共 属性
      属性 定义方
        bufferLength : Number
    [read-only] 数据当前存在于缓冲区中的秒数。
    NetStream
        bufferTime : Number
    指定在开始显示流之前需要多长时间将消息存入缓冲区。
    NetStream
        bytesLoaded : uint
    [read-only] 已加载到播放器中的数据的字节数。
    NetStream
        bytesTotal : uint
    [read-only] 正加载到播放器中的文件的总大小(以字节为单位)。
    NetStream
        checkPolicyFile : Boolean
    指定 Flash Player 是否应在开始加载 FLV 文件之前,尝试从所加载 FLV 文件的服务器下载跨域策略文件。
    NetStream
        client : Object
    指定在其上调用回调方法的对象。
    NetStream
      Inherited constructor : Object
    对类对象或给定对象实例的构造函数的引用。
    Object
        currentFPS : Number
    [read-only] 每秒显示的帧的数目。
    NetStream
        liveDelay : Number
    [read-only] 在实时(未缓冲的)模式下,数据在订阅流的缓冲区中停留的秒数。
    NetStream
        objectEncoding : uint
    [read-only] 此 NetStream 对象的对象编码(AMF 版本)。
    NetStream
      Inherited prototype : Object
    [static] 对类或函数对象的原型对象的引用。
    Object
        soundTransform : SoundTransform
    在此 NetStream 对象中控制声音。
    NetStream
        time : Number
    [read-only] 播放头的位置(以秒为单位)。
    NetStream

    公共 方法
      方法 定义方
       
    创建可用于通过指定的 NetConnection 对象播放 FLV 文件的流。
    NetStream
      Inherited
    addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
    使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
    EventDispatcher
       
    指定一个通过 NetStream 对象发送的音频流,它来自作为源传递的 Microphone 对象。
    NetStream
       
    attachCamera(theCamera:Camera, snapshotMilliseconds:int = -1):void
    开始从指定的源捕获视频,或者如果 theCamera 被设置为 null,则停止捕获操作。
    NetStream
       
    停止播放流上的所有数据,将 time 属性设置为 0,并使该流可用于其它用途。
    NetStream
      Inherited
    将事件调度到事件流中。
    EventDispatcher
      Inherited
    检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
    EventDispatcher
      Inherited
    指示对象是否已经定义了指定的属性。
    Object
      Inherited
    指示 Object 类的实例是否在指定为参数的对象的原型链中。
    Object
       
    暂停视频流的回放。
    NetStream
       
    play(... arguments):void
    开始回放外部音频或视频 (FLV) 文件。
    NetStream
      Inherited
    指示指定的属性是否存在、是否可枚举。
    Object
       
    publish(name:String = null, type:String = null):void
    将音频流、视频流和文本消息流从客户端发送到服务器(例如:Flash Media Server 2),并可选择在传输期间记录该流。
    NetStream
       
    指定传入的音频是否在流上播放。
    NetStream
       
    指定传入的音频是否将在流上播放。
    NetStream
      Inherited
    removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
    从 EventDispatcher 对象中删除侦听器。
    EventDispatcher
       
    恢复回放暂停的视频流。
    NetStream
       
    seek(offset:Number):void
    搜寻最接近于指定位置(从流的开始位置算起的偏移量,以秒为单位)的关键帧。
    NetStream
       
    send(handlerName:String, ... arguments):void
    在指定的流上向所有订阅客户端发送一条消息。
    NetStream
      Inherited
    设置循环操作动态属性的可用性。
    Object
       
    暂停或恢复流的回放。
    NetStream
      Inherited
    返回指定对象的字符串表示形式。
    Object
      Inherited
    返回指定对象的原始值。
    Object
      Inherited
    检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
    EventDispatcher

    事件
      事件 摘要 定义方
      Inherited Flash Player 获得操作系统焦点并变为活动状态时调度。 EventDispatcher
        在异步引发异常(即来自本机异步代码)时调度。 NetStream
      Inherited Flash Player 失去操作系统焦点并变为非活动状态时调度。 EventDispatcher
        在出现输入或输出错误并导致网络操作失败时调度。 NetStream
        在 NetStream 对象报告其状态或错误条件时调度。 NetStream
        在播放 FLV 文件期间到达嵌入的提示点时进行调用。 NetStream
        在 Flash Player 接收在正播放的 FLV 文件中嵌入的描述性信息时调度。 NetStream
        在 NetStream 对象完全播放完流后调度。 NetStream

    属性详细信息
    bufferLength 属性
    bufferLength:Number  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    数据当前存在于缓冲区中的秒数。 您可以将此属性与 bufferTime 属性一起使用,以评估缓冲区将近填满的程度;例如,向正等待数据加载到缓冲区中的用户显示反馈。


    实现
        public function get bufferLength():Number

    另请参见

    bufferTime 属性  
    bufferTime:Number  [read-write]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    指定在开始显示流之前需要多长时间将消息存入缓冲区。 例如,若要确保流的最初 15 秒无中断播放,请将 bufferTime 设置为 15;Flash Player 将在把 15 秒的数据存入缓冲区后才开始播放该流。

    默认值是 0.1(十分之一秒)。 若要确定当前位于缓冲区中的秒数,请使用 bufferLength 属性。

    注意:若要避免在对预先录制的(非实时)内容进行流处理时发生扭曲,不要将 Netstream.bufferTime 为 0。 对于预先录制的内容,默认情况下 Flash Player 将使用输入缓冲区对媒体数据进行排队并正确播放媒体。 对于预先录制的内容,请使用默认设置或延长缓冲时间。


    实现
        public function get bufferTime():Number
        public function set bufferTime(value:Number):void

    另请参见

    bytesLoaded 属性  
    bytesLoaded:uint  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    已加载到播放器中的数据的字节数。 您可以将此属性与 bytesTotal 属性一起使用,以评估缓冲区将近填满的程度;例如,向正等待数据加载到缓冲区中的用户显示反馈。


    实现
        public function get bytesLoaded():uint

    另请参见

    bytesTotal 属性  
    bytesTotal:uint  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    正加载到播放器中的文件的总大小(以字节为单位)。


    实现
        public function get bytesTotal():uint

    另请参见

    checkPolicyFile 属性  
    checkPolicyFile:Boolean  [read-write]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    指定 Flash Player 是否应在开始加载 FLV 文件之前,尝试从所加载 FLV 文件的服务器下载跨域策略文件。 当对渐进式视频下载(独立的 FLV 文件)使用 NetStream 对象,或者加载的 FLV 文件位于执行调用的 SWF 文件所在的域外部时,应用此属性。 当使用 NetStream 对象获取 RTMP 资源时,忽略此属性。

    当加载的 FLV 文件位于执行调用的 SWF 文件所在的域外部时,将此属性设置为 true,而且应使用 BitmapData.draw() 方法对视频进行像素级访问。 在加载时未将 checkPolicyFile 属性设置为 true 的情况下,如果调用 BitmapData.draw(),可能会收到一个 SecurityError 异常,因为没有下载所需的策略文件。

    如果不需要对正在加载的视频进行像素级访问,则不要将 checkPolicyFile 设置为 true。 检查策略文件会占用网络带宽,并可能延迟下载的开始时间。

    如果将 checkPolicyFile 设置为 true,则调用 NetStream.play() 方法时,Flash Player 必须成功下载一个相关的跨域策略文件,或者必须先确定在开始下载对象(在对 NetStream.play() 的调用中指定)之前,不存在这种策略文件。 为确认是否存在策略文件,Flash Player 将执行以下操作,具体顺序如下:

    1. Flash Player 考虑已经下载的策略文件。
    2. Flash Player 尝试下载在对 Security.loadPolicyFile() 方法的调用中指定的任何待处理的策略文件。
    3. Flash Player 尝试从与传递给 NetStream.play() 的 URL 相对应的默认位置下载策略文件,在与该 URL 所在的同一台服务器上,该默认位置为 /crossdomain.xml

    无论哪种情况,Flash Player 都要求视频服务器上存在一个正确的策略文件,该文件可以提供对传递(根据该策略文件的位置)给 play() 的 URL 处的对象的访问,并允许执行调用的 SWF 所在的域通过一个或多个 <allow-access-from> 标签来访问视频。

    如果将 checkPolicyFile 设置为 true,则 Flash Player 会等到策略文件确认完毕才下载视频。 等待对视频数据执行任何像素级操作(如调用 BitmapData.draw()),直至从 NetStream 对象收到 onMetaDataNetStatus 事件。

    如果将 checkPolicyFile 设置为 true,但未找到相关的策略文件,则您只有执行需要策略文件的操作时,才会接收到错误,然后 Flash Player 会引发 SecurityError 异常。

    如果要从使用服务器端 HTTP 重定向的 URL 下载 FLV 文件,则应谨慎使用 checkPolicyFile。 Flash Player 尝试检索与您在 NetStream.play() 中指定的初始 URL 相对应的策略文件。 如果最终的 FLV 文件由于 HTTP 重定向而来自不同的 URL,则最初下载的策略文件可能不适用于该 FLV 文件的最终 URL,该 URL 对安全决策颇为重要。

    有关策略文件的详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。


    实现
        public function get checkPolicyFile():Boolean
        public function set checkPolicyFile(value:Boolean):void

    另请参见

    client 属性  
    client:Object  [read-write]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    指定在其上调用回调方法的对象。 默认对象为 this,将创建 NetStream 对象。 如果将 client 属性设置为另一个对象,则将对该对象调用回调方法。


    实现
        public function get client():Object
        public function set client(value:Object):void

    引发
    TypeError — 必须将 client 属性设置为非空对象。
    currentFPS 属性  
    currentFPS:Number  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    每秒显示的帧的数目。 如果您正在导出 FLV 文件以在多个系统上播放,则您可以在测试期间检查该值以帮助您确定在导出该文件时要应用多大程度的压缩。


    实现
        public function get currentFPS():Number
    liveDelay 属性  
    liveDelay:Number  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在实时(未缓冲的)模式下,数据在订阅流的缓冲区中停留的秒数。 此属性指定当前的网络传输延迟(延迟时间)。

    此属性主要用于服务器(例如:Flash Media Server);有关详细信息,请参阅类的描述。

    您可以获取此属性的值来粗略估量流的传输质量,并将其传达给用户。


    实现
        public function get liveDelay():Number
    objectEncoding 属性  
    objectEncoding:uint  [read-only]
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    此 NetStream 对象的对象编码(AMF 版本)。 NetStream 对象从关联的 NetConnection 对象继承了它的 objectEncoding 值。 如果 ActionScript 3.0 SWF 文件需要与在 Flash Player 9 之前发布的服务器进行通信,则了解此属性非常重要。 有关详细信息,请参阅 NetConnection 类中 objectEncoding 属性的描述。

    此属性的值取决于流是本地还是远程的。 本地流返回 NetConnection.defaultObjectEncoding 的值。在这些流上,null 被传递给 NetConnection.connect() 方法。 远程流返回与服务器建立的连接的对象编码。通过远程流连接到服务器。

    如果在未建立服务器连接时就尝试读取此属性,或者尝试更改此属性,Flash Player 将引发异常。


    实现
        public function get objectEncoding():uint

    另请参见

    soundTransform 属性  
    soundTransform:SoundTransform  [read-write]
    语言版本 :  ActionScript 3.0
    Player 版本 :  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
    Player 版本 :  Flash Player 9

    播放头的位置(以秒为单位)。


    实现
        public function get time():Number

    另请参见

    构造函数详细信息
    NetStream () 构造函数
    public function NetStream(connection:NetConnection)
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    创建可用于通过指定的 NetConnection 对象播放 FLV 文件的流。

    参数
    connection:NetConnection — 一个 NetConnection 对象。

    引发
    ArgumentError — 未连接 NetConnection 实例。

    另请参见

    方法详细信息
    attachAudio () 方法
    public function attachAudio(microphone:Microphone):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    指定一个通过 NetStream 对象发送的音频流,它来自作为源传递的 Microphone 对象。 此方法仅可用于指定流的发布者。

    此方法主要用于服务器(例如:Flash Media Server);有关详细信息,请参阅类的描述。

    您可以在调用 publish() 方法并真正开始传输之前或之后,调用此方法。 想要收听此音频的订阅者必须调用 NetStream.play() 方法。 您可以通过指定的 Microphone 对象的 soundTransform 属性来控制此音频流的声音属性。

    参数

    microphone:Microphone — 要传输的音频流的源。

    另请参见

    attachCamera () 方法  
    public function attachCamera(theCamera:Camera, snapshotMilliseconds:int = -1):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  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 个快照。 您可以通过以下两种方式来实现:

    • 您可以每隔 5 分钟发出一个 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,则 Flash Player 停止捕获视频,并忽略发送的其它任何参数。
     
    snapshotMilliseconds:int (default = -1) — 指定视频流是连续、单帧,还是用于创建延时拍摄的一系列单帧。
    • 如果省略了此参数,Flash Player 将捕获所有视频,直到将 null 值传递给 attachCamera
    • 如果传递 0,则 Flash Player 仅捕获一个视频帧。 使用此值可传输先前流中的“快照”。 Flash 将无效参数、负参数或非数字参数均解释为 0。
    • 如果传递了正数值,Flash 将捕获一个视频帧,然后将指定长度的停顿作为尾片追加到快照上。 使用此值可实现延时拍摄效果。

    close () 方法  
    public function close():void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    停止播放流上的所有数据,将 time 属性设置为 0,并使该流可用于其它用途。 此命令还会删除已通过 HTTP 下载的 FLV 文件的本地副本。 虽然 Flash Player 会删除它所创建的 FLV 文件的本地副本,但该视频的副本可以永久保存在浏览器的缓存目录中。 如果必须完全阻止缓存或本地存储 FLV 文件的操作发生,请使用 Flash Media Server 2。

    另请参见

    pause () 方法  
    public function pause():void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    暂停视频流的回放。 如果视频已经暂停,则调用此方法将不会执行任何操作。

    另请参见

    play () 方法  
    public function play(... arguments):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    开始回放外部音频或视频 (FLV) 文件。 若要查看视频数据,您必须创建一个 Video 对象并调用 Video.attachNetStream() 方法;与视频一起进行流式处理的音频或只包含音频的 FLV 文件会自动播放。 若要对来自麦克风的音频进行流式处理,请使用 NetStream.attachAudio() 方法,并通过 Microphone 对象控制音频的某些属性。

    若要控制与 FLV 文件关联的音频,您可以使用 DisplayObjectContainer.addChild() 方法将音频路由到播放列表中的某个对象;然后创建 Sound 对象来控制该音频的某些属性。 有关详细信息,请参阅“DisplayObjectContainer.addChild() 方法”。

    如果无法找到 FLV 文件,则调度 netStatus 事件。 若要停止正在播放的流,请使用 close() 方法。

    使用此方法时,请考虑 Flash Player 安全模型。 受信任的本地沙箱或只能与远程内容交互的沙箱中的 SWF 文件可以加载和播放远程沙箱中的 FLV 文件,但如果未经跨域策略文件形式的显式许可,则无法访问该远程 FLV 文件的数据。 还可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。

    有关详细信息,请参阅以下部分:

    参数

    ... arguments — 要播放的 FLV 文件的位置,保存在 URLRequest 对象或一个字符串中。 您可以播放与 SWF 文件存储于同一目录中或存储于其子目录中的本地 FLV 文件;但不能导航到更高级别的目录。


    引发
    SecurityError — 本地不受信任的 SWF 文件无法与 Internet 通信。 您可以通过将此 SWF 文件重新分类为只能与远程内容交互或受信任来消除此限制。
     
    ArgumentError — 至少必须指定一个参数。

    另请参见

    publish () 方法  
    public function publish(name:String = null, type:String = null):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    将音频流、视频流和文本消息流从客户端发送到服务器(例如:Flash Media Server 2),并可选择在传输期间记录该流。 此方法仅可用于指定流的发布者。

    此方法主要用于服务器(例如:Flash Media Server 2);有关详细信息,请参阅类的描述。

    不要使用此方法让客户端播放已发布和录制的流。 而应为该客户端创建一个 NetStream 实例,并调用 play() 方法:

      var subscribeNS:NetStream = new NetStream(myNetConnection);
      subscribeNS.play("streamToPlay");
      

    使用 Flash Media Server 2 录制流时,Flash 会创建一个 FLV 文件,并将其保存在服务器上应用程序目录的子目录中。 每个流都保存在名称与传递给 NetConnection.connect() 方法的 command 参数的应用程序实例名称值相匹配的目录中。 Flash Player 会自动创建这些目录;您不必为每个实例名称都创建一个目录。 例如,以下代码说明如何连接到应用程序的某个特定实例,该实例保存在应用程序目录中名为 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");
      

    下例说明如何连接到同一个应用程序的不同实例,而发出相同的发布命令。 名为 lecture.flv 的文件保存在名为 /yourAppsFolder/lectureSeries/streams/Tuesday 的子目录中。

      var myNC:NetConnection = new NetConnection();
      myNC.connect("rtmp://server.domain.com/lectureSeries/Tuesday");
      var myNS:NetStream = new NetStream(my_nc);
      myNS.publish("lecture", "record");
      

    如果不传递实例名称的值,则该值将与传递给 name 属性的值相匹配,该属性保存在名为 /yourAppsFolder/appName/streams/_definst_(针对“默认实例”)的子目录中。 有关使用实例名称的详细信息,请参阅 NetConnection.connect() 方法。 有关回放 FLV 文件的信息,请参阅 NetStream.play() 方法。

    此方法可调度具有若干个不同信息对象的 netStatus 事件。 例如,如果某个用户在具有指定名称的流上进行发布,则 netStatus 事件将随 NetStream.Publish.BadName 的代码属性一起调度。 有关详细信息,请参阅 netStatus 事件。

    参数

    name:String (default = null) — 标识该流的字符串。 如果传递 false,则发布操作将停止。 订阅此流的客户端必须在调用 NetStream.play() 时仍然传递此名称。 不必在流名称中包含文件扩展名。
     
    type:String (default = null) — 指定如何发布该流的字符串。 有效值为“record”、“append”和“live”。 默认值为“live”。
    • 如果传递“record”,则 Flash Player 将发布并录制实时数据,同时将录制的数据保存到名称与传递给 name 参数的值相匹配的 FLV 文件中。 该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果该文件已经存在,则覆盖该文件。
    • 如果传递“append”,则 Flash Player 将发布并录制实时数据,同时将录制的数据追加到名称与传递给 name 参数的值相匹配的 FLV 文件中,该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果未找到名称与 name 参数相匹配的文件,则创建一个。
    • 如果省略此参数或传递“live”,则 Flash Player 将发布实时数据而不进行录制。 如果存在名称与传递给 name 参数的值相匹配的文件,则删除它。

    另请参见

    receiveAudio () 方法  
    public function receiveAudio(flag:Boolean):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  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
    Player 版本 :  Flash Player 9

    指定传入的音频是否将在流上播放。 此方法仅可用于订阅了指定流的客户端,不可用于流的发布者。

    此方法主要用于服务器(例如:Flash Media Server 2);有关详细信息,请参阅类的描述。

    您可以在调用 NetStream.play() 方法并真正开始接收流之前或之后,调用此方法。 例如,您可以将这些方法附加到某个按钮上,用户可以通过按该按钮来显示或隐藏传入的视频流。

    如果指定的流仅包含视频数据,则将 false 值传递给该方法可以阻止 NetStream.time 进一步递增。

    参数

    flag:Boolean — 指定传入的视频是在指定的流上播放 (true) 还是不播放 (false)。 默认值为 true

    resume () 方法  
    public function resume():void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    恢复回放暂停的视频流。 如果视频已在播放,则调用此方法将不会执行任何操作。

    另请参见

    seek () 方法  
    public function seek(offset:Number):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    搜寻最接近于指定位置(从流的开始位置算起的偏移量,以秒为单位)的关键帧。 到达该位置时,流将恢复播放。

    参数

    offset:Number — 要移至 FLV 文件中的时间近似值(以秒为单位)。 播放头将移至与 offset 最接近的视频关键帧。
    • 若要返回到该流的开始处,请将 0 传递给 offset
    • 若要从流的开始处向前搜寻,应传递将要前进的秒数。 例如,若要将播放头置于距开始处 15 秒的位置,请使用 myStream.seek(15)
    • 若要搜寻当前位置的相对位置,请传递 NetStream.time + nNetStream.time - n 以分别搜索从当前位置前进或后退 n 秒的位置。 例如,若要从当前位置后退 20 秒,请使用 NetStream.seek(NetStream.time - 20).

    视频搜寻的确切位置取决于导出视频时的帧频率 (fps) 设置。 因此,如果以 6 fps 和 30 fps 的帧频率导出同一个视频,并对两个视频对象都使用 myStream.seek(15),则这两个视频将搜寻两个不同的位置。

    另请参见

    send () 方法  
    public function send(handlerName:String, ... arguments):void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在指定的流上向所有订阅客户端发送一条消息。 此方法仅可用于指定流的发布者。

    此方法主要用于服务器(例如:Flash Media Server 2);有关详细信息,请参阅类的描述。

    若要处理并响应消息,请以 myStream.HandlerName 格式创建一个处理函数。

    Flash Player 不对方法或方法的数据、对象原型变量或不可枚举的变量进行序列化处理。 对于显示对象,Flash Player 仅对路径而不对数据进行序列化处理。

    参数

    handlerName:String — 要发送的消息;还有接收消息使用的 ActionScript 处理函数的名称。 处理函数的名称只能为单级形式(即不能是父/子多级形式)并相对于流对象。 不要对处理函数名称使用保留字。 例如,将“close”用作处理函数名称将导致方法失败。
     
    ... arguments — 可以是任何类型的可选参数。 它们经过序列化并通过该连接发送,而接收处理函数则以相同的顺序接收它们。 若某个参数为循环对象(例如:循环的链表),则序列化函数会正确地处理引用。

    另请参见


    示例
    如何使用示例
    下例在同一个文件中设置了两个 NetStream 对象。 一个 NetStream 对象,ns1。 用于调用 send() 方法,另一个为 ns2,用于注册一个 client 对象,该对象可为 send() 调用注册一个处理函数:
      import flash.net.NetConnection;
      import flash.net.NetStream;
      import flash.events.NetStatusEvent;
      import flash.media.Video;
      import flash.utils.setTimeout;
      
      var nc:NetConnection = new NetConnection();
      nc.objectEncoding = 0;
      nc.addEventListener("netStatus", onNCStatus);
      nc.connect("rtmp://www.example.com/MyApp/MyInstance");
      var ns1:NetStream;
      var vid:Video = new Video(300,300);
      addChild(vid);
      var obj:Object = new Object();
      obj.myFunction = function(event:String):void {
       trace(event);
      }
      
      function onNCStatus(event:NetStatusEvent):void {
       if(event.info.code == "NetConnection.Connect.Success") {
        ns1 = new NetStream(nc);
        ns1.play("MyVideo");
        vid.attachNetStream(ns1);
        ns1.client = obj;
        ns1.publish("dummy", "live");
        
        var ns2:NetStream = new NetStream(nc);
        ns2.play("dummy");
        ns2.client = obj;
        
        setTimeout(sendHello, 3000);
       }
      }
      
      function sendHello():void {
        ns1.send("myFunction", "hello");
      }
      
    togglePause () 方法  
    public function togglePause():void
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    暂停或恢复流的回放。 第一次调用此方法时,将暂停播放;下一次调用此方法时,将恢复播放。 您可以使用此方法,允许用户通过按某个按钮来暂停或恢复回放。

    另请参见

    事件详细信息
    asyncError 事件
    事件对象类型: flash.events.AsyncErrorEvent
    AsyncErrorEvent.type property = flash.events.AsyncErrorEvent.ASYNC_ERROR
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在异步引发异常(即来自本机异步代码)时调度。 当服务器调用客户端上未定义的方法时调度此事件。

    AsyncErrorEvent.ASYNC_ERROR 常数定义 asyncError 事件对象的 type 属性值。

    此事件具有以下属性:

    属性
    bubbles false
    cancelable false;没有要取消的默认行为。
    currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
    target 发生网络操作失败的对象。
    error 触发此事件的错误。

    另请参见

    ioError 事件  
    事件对象类型: flash.events.IOErrorEvent
    IOErrorEvent.type property = flash.events.IOErrorEvent.IO_ERROR
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在出现输入或输出错误并导致网络操作失败时调度。

    定义 ioError 事件对象的 type 属性值。

    此事件具有以下属性:

    属性
    bubbles false
    cancelable false;没有要取消的默认行为。
    currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
    target 发生输入/输出错误的网络对象。
    text 要显示为错误消息的文本。
    netStatus 事件  
    事件对象类型: flash.events.NetStatusEvent
    NetStatusEvent.type property = flash.events.NetStatusEvent.NET_STATUS
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在 NetStream 对象报告其状态或错误条件时调度。 netStatus 事件包含一个 info 属性,该属性是一个包含有关事件特定信息(例如连接尝试成功还是失败)的信息对象。

    定义 netStatus 事件对象的 type 属性值。

    此事件具有以下属性:

    属性
    bubbles false
    cancelable false;没有要取消的默认行为。
    currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
    info 一个对象,具有描述对象的状态或错误情况的属性。
    target 报告其状态的 NetConnection 或 NetStream 对象。

    另请参见

    onCuePoint 事件  
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在播放 FLV 文件期间到达嵌入的提示点时进行调用。 您可以在视频到达某个特定提示点时,使用此处理函数触发代码中的操作,从而使应用程序中的其它操作与视频回放事件实现同步。

    此事件主要用于服务器(例如:Flash Media Server 2);有关详细信息,请参阅类的描述。 它不是 Flash Player API 的一部分,只是为了方便起见包含在此语言参考中。 您不能使用 addEventListener() 方法或任何其它的 EventDispatcher 方法来侦听或处理此事件。 相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:

    • NetStream 实例的 client 属性所引用的对象。
    • NetStream 子类的一个实例。 NetStream 是一个密封类,即无法在运行时将属性或方法添加到 NetStream 对象。 然而,您可以创建 NetStream 的子类并在其中定义您的事件处理函数,或者将该子类变为动态的并对子类的实例添加事件处理函数。

    可以在 FLV 文件中嵌入以下几种类型的提示点:

    • 导航提示点,它指定 FLV 文件中的一个关键帧,提示点的 time 属性对应于该关键帧。 导航提示点经常被用作书签或入口点,以便用户在视频文件中导航。
    • 事件提示点,它由时间指定,而不管该时间是否对应于某个特定的关键帧。 事件提示点通常代表视频中的某个时间,到达这个时间时可用于触发其它应用程序事件的情况就会发生。

    onCuePoint 事件对象具有以下属性:

    属性 Description
    name 将提示点嵌入 FLV 文件时赋予提示点的名称。
    parameters 为此提示点指定的一个关联数组,它由名称/值对字符串组成。 任何有效的字符串都可用于参数名或参数值。
    time 提示点在视频文件回放期间的出现时间(以秒为单位)。
    type 到达的提示点的类型:导航提示点或事件提示点。

    您可以在首次对 FLV 文件进行编码时,或者在 Flash 创作工具中使用“视频导入”向导来导入视频剪辑时,在该 FLV 文件中定义提示点。

    onMetaData 事件还会在视频文件中检索有关提示点的信息。 不过,onMetaData 事件会在视频开始播放之前,获取有关所有提示点的信息。 onCuePoint 事件会在回放期间对某个提示点所指定的时间,接收有关该提示点的信息。

    通常,要让代码在特定的提示点出现时对它给予响应,请使用 onCuePoint 事件来触发代码中的某个操作。

    您可以使用提供给 onMetaData 事件的提示点列表,允许用户在视频流的预定义点处开始播放视频。 将提示点的 time 属性的值传递给 NetStream.seek() 方法,以便从该提示点播放视频。

    另请参见

    onMetaData 事件  
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在 Flash Player 接收在正播放的 FLV 文件中嵌入的描述性信息时调度。

    此特殊事件主要用于服务器(例如:Flash Media Server);有关详细信息,请参阅类的描述。 从技术角度而言,它不是 Flash Player API 的一部分,只是为了方便起见包含在此语言参考中。 您不能使用 addEventListener() 方法或任何其它的 EventDispatcher 方法来侦听或处理此事件。 相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:

    • NetStream 实例的 client 属性所引用的对象。
    • NetStream 子类的一个实例。 NetStream 是一个密封类,即无法在运行时将属性或方法添加到 NetStream 对象。 然而,您可以创建 NetStream 的子类并在其中定义您的事件处理函数,或者将该子类变为动态的并对子类的实例添加事件处理函数。

    Flash Video Exporter 实用程序(1.1 版本或更高版本)将视频的持续时间、创建日期、数据速率及其它信息嵌入视频文件本身。 不同的视频编码器嵌入不同的元数据组中。

    此事件在调用 NetStream.play() 方法之后、在视频播放头前进之前触发。

    在多数情况下,FLV 元数据中嵌入的持续时间值接近实际持续时间,但是并不精确。 换言之,当播放头在视频流的结尾处时,此值不会始终与 NetStream.time 属性的值相匹配。

    另请参见

    onPlayStatus 事件  
    语言版本 :  ActionScript 3.0
    Player 版本 :  Flash Player 9

    在 NetStream 对象完全播放完流后调度。 此处理函数将返回信息对象,这些信息对象提供 netStatus 事件返回的信息之外的其它信息。 您可以在 NetStream 对象从播放列表中的一个流切换到另一个流时(如信息对象 NetStream.Play.Switch 所示),或者在 NetStream 对象播放到结尾时(如信息对象 NetStream.Play.Complete 所示),使用此处理函数触发代码中的操作。 若要响应此事件,必须创建一个函数来处理服务器所发送的信息对象。

    此事件主要用于服务器(例如:Flash Media Server);有关详细信息,请参阅类的描述。 它不是 Flash Player API 的一部分,只是为了方便起见包含在此语言参考中。 您不能使用 addEventListener() 方法或任何其它的 EventDispatcher 方法来侦听或处理此事件。 相反,您必须定义一个回调函数,并将其直接附加到以下对象之一:

    • NetStream 实例的 client 属性所引用的对象。
    • NetStream 子类的一个实例。 NetStream 是一个密封类,即无法在运行时将属性或方法添加到 NetStream 对象。 然而,您可以创建 NetStream 的子类并在其中定义您的事件处理函数,或者将该子类变为动态的并对子类的实例添加事件处理函数。

    此事件可返回一个具有以下属性的信息对象:

    代码属性 级别属性 意义
    NetStream.Play.Switch "status" 订阅者正在从播放列表中的一个流切换到另一个流。
    NetStream.Play.Complete "status" 播放已结束。

    另请参见


    以下示例将 Video 对象与 NetConnection 和 NetStream 类一同使用,以加载和播放 FLV 文件。 若要运行此示例,需要一个 FLV 文件,其名称和位置与传递给 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);
        }
    }




http://u.huoban001.com/space.php
原文地址:https://www.cnblogs.com/zpq521/p/1661523.html