[AS3]流式传输视频文件RTMP(2)
通过将 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");
- }
- }
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例