·您当前的位置:主页 > 技术教程 > AS2与AS3技术 >

[AS3]流式传输视频文件RTMP

时间:2011-12-20 16:47自由&free
若要流式传输 Flash Media Server 中的文件,可以使用 NetConnection 和 NetStream 类连接到远程服务器实例并播放指定的流。要指定实时消息传递协议 (RTMP) 服务器,请向 NetConnection.connect() 方法传递所需的 RTMP URL

  流式传输视频文件

  若要流式传输 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 文件:

  1. var nc:NetConnection = new NetConnection();  
  2. nc.connect(null);  
  3.  
  4. var ns:NetStream = new NetStream(nc);  
  5. ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);  
  6. ns.play("video.flv");  
  7. function asyncErrorHandler(event:AsyncErrorEvent):void  
  8. {  
  9. trace(event.text);  
  10. }  
  11.  
  12. var vid:Video = new Video();  
  13. vid.attachNetStream(ns);  
  14. 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

相关链接:

[AS3]AS3.0与Red5之间的参数传递(rtmp流媒体)
[AS3]RTMP播放器运用实例
[AS3]RTMP流媒体协议在视频系统中应用的优势
[AS3]RTMP协议的分析与研究
[AS3]as3服务端FMS常用方法属性参考 
[AS3]FMS播放器连接fms的几种返回状态
RTMP协议与RTMP视频播放器的应用
flex播放器代码支持rtmp协议
关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE,RTMFP,AMF协议的介绍
[AS3]rtmp协议MP4(f4v)格式视频VOD点播实现过程
[AS3]极酷阳光V2版RTMP流媒体播放器实例演示与介绍

热门文章推荐

请稍候...