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

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

时间:2011-12-20 16:47自由&free
通过将 client 属性设置为一个 Object 或设置为 NetStream 的一个子类,可以重新发送 onMetaData 和 onCuePoint 回调方法或彻底忽略这些方法。以下示例演示如何使用空的 Object 忽略这些回调方法而不侦听 asyncErro

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

  1. var nc:NetConnection = new NetConnection();  
  2. nc.connect(null);  
  3.  
  4. var customClient:Object = new Object();  
  5.  
  6. var ns:NetStream = new NetStream(nc);  
  7. ns.client = customClient;  
  8. ns.play("video.flv");  
  9.  
  10. var vid:Video = new Video();  
  11. vid.attachNetStream(ns);  
  12. addChild(vid); 

  如果想要侦听 onMetaData 或 onCuePoint 回调方法,则需要定义用于处理这些回调方法的方法,如以下代码片断所示:

  1. var customClient:Object = new Object();  
  2. customClient.onMetaData = metaDataHandler;  
  3. function metaDataHandler(infoObject:Object):void  
  4. {  
  5. trace("metadata");  

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

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

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

  1. var nc:NetConnection = new NetConnection();  
  2. nc.connect(null);  
  3.  
  4. var ns:NetStream = new NetStream(nc);  
  5. ns.client = new CustomClient();  
  6. ns.play("video.flv");  
  7.  
  8. var vid:Video = new Video();  
  9. vid.attachNetStream(ns);  
  10. addChild(vid); 

CustomClient 类如下所示:

  1. package  
  2. {  
  3. public class CustomClient  
  4. {  
  5. public function onMetaData(infoObject:Object):void  
  6. {  
  7. trace("metadata");  
  8. }  
  9. }  

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

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

  1. var ns:CustomNetStream = new CustomNetStream();  
  2. ns.play("video.flv");  
  3.  
  4. var vid:Video = new Video();  
  5. vid.attachNetStream(ns);  
  6. addChild(vid); 

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

  1. package  
  2. {  
  3. import flash.net.NetConnection;  
  4. import flash.net.NetStream;  
  5. public class CustomNetStream extends NetStream  
  6. {  
  7. private var nc:NetConnection;  
  8. public function CustomNetStream()  
  9. {  
  10. nc = new NetConnection();  
  11. nc.connect(null);  
  12. super(nc);  
  13. }  
  14. public function onMetaData(infoObject:Object):void  
  15. {  
  16. trace("metadata");  
  17. }  
  18. public function onCuePoint(infoObject:Object):void  
  19. {  
  20. trace("cue point");  
  21. }  
  22. }  

  如果您想要重命名 CustomNetStream 类中的 onMetaData() 和 onCuePoint() 方法,可以使用以下代码:

  1. package  
  2. {  
  3. import flash.net.NetConnection;  
  4. import flash.net.NetStream;  
  5. public class CustomNetStream extends NetStream  
  6. {  
  7. private var nc:NetConnection;  
  8. public var onMetaData:Function;  
  9. public var onCuePoint:Function;  
  10. public function CustomNetStream()  
  11. {  
  12. onMetaData = metaDataHandler;  
  13. onCuePoint = cuePointHandler;  
  14. nc = new NetConnection();  
  15. nc.connect(null);  
  16. super(nc);  
  17. }  
  18. private function metaDataHandler(infoObject:Object):void  
  19. {  
  20. trace("metadata");  
  21. }  
  22. private function cuePointHandler(infoObject:Object):void  
  23. {  
  24. trace("cue point");  
  25. }  
  26. }  

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器