`

Flash流式视频提示点及回调函数

阅读更多

流式传输视频文件

若要流式传输 Flash Media Server 中的文件,可以使用 NetConnection 和 NetStream 类连接到远程服务器实例并播放指定的流。要指定实时消息传递协议 (RTMP) 服务器,请向 
NetConnection.connect()
方法传递所需的 RTMP URL(例如“rtmp://localhost/appName/appInstance”),而不传递 
null
。若要播放指定 Flash Media Server 中的指定实时流或录制流,请为 
NetStream.play()
方法传递一个由 
NetStream.publish()
发布的实时数据的标识名称,或一个要回放的录制文件名称。有关详细信息,请参阅 Flash Media Server 文档。


了解提示点

并非所有 FLV 文件都包含提示点。虽然有在现有 FLV 文件中嵌入提示点的工具,但提示点通常是在 FLV 编码过程中嵌入在 FLV 文件中的。

您可以对 Flash 视频使用几种不同类型的提示点。可以使用 ActionScript 与在创建 FLV 文件时嵌入到 FLV 文件中的提示点进行交互,也可以与用 ActionScript 创建的提示点进行交互。


导航提示点:您可以在编码 FLV 文件时,将导航提示点嵌入到 FLV 流和 FLV 元数据包中。使用导航提示点可以使用户搜索到文件的指定部分。 
事件提示点:您可以在编码 FLV 文件时,将事件提示点嵌入到 FLV 流和 FLV 元数据包中。还可以编写代码来处理在 FLV 回放期间于指定点上触发的事件。 
ActionScript 提示点:使用 ActionScript 代码创建的外部提示点。您可以编写代码来触发这些与视频回放有关的提示点。这些提示点的精确度要低于嵌入的提示点(最高时相差 1/10 秒),因为视频播放器单独跟踪这些提示点。 

由于导航提示点会在指定的提示点位置创建一个关键帧,因此可以使用代码将视频播放器的播放头移动到该位置。您可以在 FLV 文件中设置一些特殊点,让用户搜索这些点。例如,视频可能会具有多个章节或段,在这种情况下您就可以在视频文件中嵌入导航提示点,以此方式来控制视频。

如果您计划创建一个应用程序,希望用户能在其中导航至提示点,则应在编码文件时创建并嵌入提示点,而不应使用 ActionScript 提示点。您应将提示点嵌入到 FLV 文件中,因为这些提示点需要更加精确的处理。有关在 FLV 文件中嵌入提示点的详细信息,请参阅《使用 Flash》中的“嵌入提示点”

您可以通过编写 ActionScript 来访问提示点参数。提示点参数是从 
onCuePoint
回调处理函数接收的事件对象的一部分。

若要在视频到达特定提示点时在代码中触发特定动作,请使用 
NetStream.onCuePoint
事件处理函数。有关详细信息,请参阅为 onCuePoint 和 onMetaData 编写回调方法

为 onCuePoint 和 onMetaData 编写回调方法

当播放器到达特定提示点或收到特定元数据时,您可以在应用程序中触发动作。若要触发此类动作,请使用 
onCuePoint
和 
onMetaData
事件处理函数。必须为这些处理函数编写回调方法,否则,Flash Player 可能会引发错误。例如,以下代码播放 SWF 文档所在文件夹中名为 video.flv 的 FLV 文件:


var nc:NetConnection = new NetConnection();  nc.connect(null);    var ns:NetStream = new NetStream(nc);  ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);  ns.play("video.flv");  function asyncErrorHandler(event:AsyncErrorEvent):void  {      trace(event.text);  }    var vid:Video = new Video();  vid.attachNetStream(ns);  addChild(vid);


上面的代码加载一个名为 video.flv 的本地 FLV 文件并侦听要调度的 
asyncError
(
AsyncErrorEvent.ASYNC_ERROR
)。当本机异步代码中引发异常时调度此事件。在本例中,当 FLV 中包含元数据或提示点信息,并且未定义相应的侦听器时调度此事件。如果您对视频文件的元数据或提示点信息不感兴趣,则可以使用上面的代码处理 
asyncError
事件并忽略错误。如果 FLV 中具有元数据或多个提示点,则会输出以下信息:


错误 #2095: flash.net.NetStream 无法调用回调 onMetaData。  错误 #2095: flash.net.NetStream 无法调用回调 onCuePoint。  错误 #2095: flash.net.NetStream 无法调用回调 onCuePoint。  错误 #2095: flash.net.NetStream 无法调用回调 onCuePoint。


发生错误的原因是 NetStream 对象找不到 
onMetaData
或 
onCuePoint
回调方法。在应用程序中定义这些回调方法有多种方式:


将 NetStream 对象的 client 属性设置为一个 Object 
创建自定义类并定义用于处理回调方法的方法 
扩展 NetStream 类并添加处理回调方法的方法 
扩展 NetStream 类并使其为动态类 
将 NetStream 对象的 client 属性设置为 this 
子主题

将 NetStream 对象的 client 属性设置为一个 Object
创建自定义类并定义用于处理回调方法的方法
扩展 NetStream 类并添加处理回调方法的方法
扩展 NetStream 类并使其为动态类
将 NetStream 对象的 client 属性设置为 this

将 NetStream 对象的 client 属性设置为一个 Object

通过将 
client
属性设置为一个 Object 或设置为 NetStream 的一个子类,可以重新发送 
onMetaData
和 
onCuePoint
回调方法或彻底忽略这些方法。以下示例演示如何使用空的 Object 忽略这些回调方法而不侦听 
asyncError
事件:

 

var nc:NetConnection = new NetConnection  ;
nc.connect(null);
var customClient:Object = new Object  ;
var ns:NetStream = new NetStream(nc);
ns.client = customClient;
ns.play("video.flv");
var vid:Video = new Video  ;
vid.attachNetStream(ns);
addChild(vid);
如果想要侦听 
onMetaData
或 
onCuePoint
回调方法,则需要定义用于处理这些回调方法的方法,如以下代码片断所示:
var customClient:Object = new Object  ;
customClient.onMetaData = metaDataHandler;
function metaDataHandler(infoObject:Object):void {
	trace("metadata");
}
上面的代码侦听 

onMetaData
回调方法并调用 
metaDataHandler()
方法,后者会输出一个字符串。如果 Flash Player 遇到一个提示点,那么即使未定义 
onCuePoint
回调方法,也不会生成错误。


创建自定义类并定义用于处理回调方法的方法

以下代码将 NetStream 对象的 
client
属性设置为一个自定义类 CustomClient,该类为回调方法定义处理函数:

 

var nc:NetConnection = new NetConnection  ;
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = new CustomClient  ;
ns.play("video.flv");
var vid:Video = new Video  ;
vid.attachNetStream(ns);
addChild(vid);

 

 CustomClient 类如下所示:

 

package {
	public class CustomClient {
		public function onMetaData(infoObject:Object):void {
			trace("metadata");
		}
	}
}

 

 CustomClient 类为 

onMetaData
回调处理函数定义一个处理函数。如果遇到一个提示点并调用了 
onCuePoint
回调处理函数,则会调度一个 
asyncError
事件 (
AsyncErrorEvent.ASYNC_ERROR
),显示“flash.net.NetStream 无法调用回调 onCuePoint”。为了防止发生此错误,需要在 CustomClient 类中定义一个 
onCuePoint
回调方法,或者为 
asyncError
事件定义一个事件处理函数。


扩展 NetStream 类并添加处理回调方法的方法

以下代码创建 CustomNetStream 类的一个实例,CustomNetStream 类在后面的代码清单中定义:

 

var ns:CustomNetStream = new CustomNetStream  ;
ns.play("video.flv");
var vid:Video = new Video  ;
vid.attachNetStream(ns);
addChild(vid);
 

以下代码清单定义 CustomNetStream 类,该类扩展 NetStream 类、处理必要的 NetConnection 对象的创建并处理 
onMetaData
和 
onCuePoint
回调处理函数方法:

 

package {
	import flash.net.NetConnection;
	import flash.net.NetStream;
	public class CustomNetStream extends NetStream {
		private var nc:NetConnection;
		public function CustomNetStream() {
			nc = new NetConnection  ;
			nc.connect(null);
			super(nc);
		}
		public function onMetaData(infoObject:Object):void {
			trace("metadata");
		}
		public function onCuePoint(infoObject:Object):void {
			trace("cue point");
		}
	}
}

如果您想要重命名 CustomNetStream 类中的 

onMetaData()
和 
onCuePoint()
方法,可以使用以下代码:

 

package {
	import flash.net.NetConnection;
	import flash.net.NetStream;
	public class CustomNetStream extends NetStream {
		private var nc:NetConnection;
		public var onMetaData:Function;
		public var onCuePoint:Function;
		public function CustomNetStream() {
			onMetaData = metaDataHandler;
			onCuePoint = cuePointHandler;
			nc = new NetConnection  ;
			nc.connect(null);
			super(nc);
		}
		private function metaDataHandler(infoObject:Object):void {
			trace("metadata");
		}
		private function cuePointHandler(infoObject:Object):void {
			trace("cue point");
		}
	}
}
分享到:
评论

相关推荐

    回调函数的意义以及python实现实例

    注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。 当时就犯了老毛病,被一个不是很知道的名词引起了兴趣–...

    flash视频网站核心源代码flvht

    《深入解析Flash视频网站核心源代码FLVHT》 在当今互联网时代,视频内容已经成为信息传播的重要载体。其中,Flash技术曾一度主导了在线视频播放领域,尤其在FLV视频格式的支持上,它构建了一套高效、流畅的播放解决...

    流式视频服务器和客户机的实现.zip

    流式视频技术是互联网上广泛使用的一种媒体传输方式,它使得用户可以实时观看视频而无需等待整个文件下载完成。在本文中,我们将深入探讨流式视频服务器和客户机的实现,以及它们在互联网中的核心作用。 一、流式...

    TCP_Echo流式套接字回射程序

    本项目“TCP_Echo流式套接字回射程序”是针对Windows平台,使用C++语言实现的一个示例,它展示了如何利用TCP流式套接字创建一个回射服务器和客户端。下面将详细介绍这个程序涉及的关键知识点。 1. **TCP协议**:TCP...

    FLASH在线视频播放的解决办法

    通过Flash Communication Server 1.5,用户可以实现FLV格式视频的流式传输,进一步增强了视频的在线播放体验。 综上所述,FLV流媒体格式为在线视频播放提供了一种高效、便捷的解决方案。通过合理的配置和技术支持,...

    TCP_ECHO变长流式套接字回射程序

    windows网络编程,利用流式套接字实现回射服务器和客户端,要求: 基于流式套接字的定长数据接收功能; 基于流式套接字的变长数据接收功能; 基于流式套接字的定长数据回射功能; 基于流式套接字的变长数据回射功能...

    flash看视频.rar

    Flash Video(FLV)是Flash平台专门设计的视频格式,它支持流式传输,能够实现视频的即时播放,无需等待整个文件下载完毕。FLV文件包含音频和视频数据,通过Flash Player插件在网页中播放,极大地提升了用户体验。 ...

    网页中嵌入Flash视频

    2. 流式播放:Flash支持视频的即时播放,无需等待整个文件下载完毕。 缺点: 1. 兼容性问题:随着移动设备的发展,尤其是iOS设备不支持Flash,导致其市场份额逐渐下降。 2. 性能和功耗:Flash运行时可能会消耗大量...

    流式视频服务器和客户机的 实现.pptx

    流式视频服务器和客户机的实现涉及多个关键技术,主要集中在实时传输协议(RTSP)、实时传输协议(RTP)以及用户数据报协议(UDP)的应用上。这些技术是构建流媒体系统的基础,允许高效、实时地传输和播放视频内容。...

    flash视频器播放器代码.rar

    Flash视频格式(FLV)是Adobe Systems为Flash Player开发的一种流式视频格式。FLV文件结构简单,支持流媒体技术,使得用户可以边下载边观看视频,提高了用户体验。在Flash视频播放器中,FLV文件通常与SWF文件(Flash...

    平滑流式处理资料

    平滑流式处理(Smooth Streaming)是一种高效、适应性强的媒体流传输技术,主要用于在线视频播放。该技术由微软公司开发,旨在解决网络带宽不稳定性导致的视频播放卡顿问题,提供高质量的流媒体体验。平滑流式处理...

    计算机网络-流式视频传输

    单文件视频传输: 建立server和client之间的socket连接; 实现server端向client端发送视频文件; 实现client端接收server端发送的文件; 流式视频传输: 实现连续文件传输; 实现视频在线播放

    flash在线视频播放器

    Flash播放器则是一个能够解析并播放SWF(ShockWave Flash)文件的软件,它支持流式传输,能够在视频数据未完全下载时就开始播放,极大地提升了用户的观看体验。 二、Flash流媒体技术 Flash流媒体技术基于RTMP...

    基于FLASH+XML+FMS的视频点播.pdf

    FLV(Flash Video)是由Adobe开发的一种流式视频格式,它支持高效的数据压缩和传输。使用FLV格式的视频文件可以通过FMS实现流式播放,这意味着用户可以在下载完成之前就开始观看视频,从而显著改善了用户体验。 ###...

    flash 视频

    Flash视频文件通常具有扩展名.FLV或.F4V,它们支持流式传输,使得用户可以在视频加载的同时观看,提高了用户体验。然而,随着HTML5的普及和移动设备对Flash的不支持,Flash视频的地位逐渐被HTML5视频格式(如MP4、...

    行业文档-设计装置-基于flash的流式文件系统以及文件读取写入的方法.zip

    在基于Flash的系统中,流式文件系统通常用于音频、视频流服务或数据记录应用。 三、Flash上的文件系统设计 设计Flash上的文件系统时,需要考虑以下关键点: 1. **磨损均衡**:由于Flash的每个单元都有有限的擦写...

    流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流

    流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式推理代码api流式...

    流式视频服务器和客户机的实现.pptx

    流式视频服务器和客户机的实现是现代网络多媒体技术中的一个重要组成部分,主要涉及实时传输协议(RTSP)、实时传输协议(RTP)以及用户数据报协议(UDP)。这些技术为在线视频流、直播和点播服务提供了基础架构。 ...

    流式套接字定长变长接收回射实验报告加源码

    在本实验中,我们主要探讨的是使用C++进行流式套接字编程,特别是关于TCP数据流的定长和变长接收技术,并将其应用于回射程序。这些知识点在现代网络编程中至关重要,因为它们涉及到如何有效地处理网络通信中的数据...

Global site tag (gtag.js) - Google Analytics