FLVStream类-检测flv文件类型的工具类

本类是利用flv文件头特征信息来判断文件的真实类型是否为flv文件,不是原来简单地通过文件扩展名来判断了。
MediaEvent类-FLVStream用到的事件类
  1. /**  
  2. * ...  
  3. * @author Kinglong  
  4. * @version 0.1  
  5. */  
  6.   
  7. package com.klstudio.media {   
  8.        
  9.     import flash.events.Event;   
  10.        
  11.     public class MediaEvent extends Event{   
  12.            
  13.         public static const FLV:String = "flv";   
  14.         public static const ERROR:String = "error";   
  15.            
  16.         public function MediaEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false){   
  17.             super(type, bubbles, cancelable);   
  18.         }          
  19.   
  20.     }   
  21.        
  22. }  

FLVStream类
  1. /**  
  2. * ...  
  3. * @author Kinglong  
  4. * @version 0.1  
  5. */  
  6.   
  7. package com.klstudio.media {   
  8.        
  9.     import flash.net.URLStream;   
  10.     import flash.net.URLRequest;   
  11.     import flash.events.*;     
  12.     import flash.utils.ByteArray;   
  13.        
  14.     import com.klstudio.util.StringUtil;   
  15.        
  16.     [Event(MediaEvent.FLV)]   
  17.        
  18.     public class FLVStream extends URLStream {   
  19.         private var _hasClose:Boolean;   
  20.         private var _bytes:ByteArray;   
  21.         private var _flv:Boolean;   
  22.         private var _url:String;   
  23.         public function FLVStream(url:String,close:Boolean=true):void {   
  24.             _url = url;   
  25.             _flv = false;   
  26.             _bytes = new ByteArray();   
  27.             _hasClose = close;               
  28.             addEventListener(ProgressEvent.PROGRESS, progressHandler);   
  29.         }   
  30.            
  31.         public function read():Boolean{            
  32.             if(_url == null || StringUtil.trim(_url).length== 0){   
  33.                 return false;   
  34.             }else{   
  35.                 try{   
  36.                     var request:URLRequest = new URLRequest(_url);   
  37.                     load(request);                     
  38.                 }catch(error:Error){   
  39.                     return false;   
  40.                 }   
  41.             }   
  42.             return true;   
  43.         }   
  44.            
  45.         private function progressHandler(event:ProgressEvent):void{   
  46.             if(bytesAvailable >= 3){   
  47.                 readBytes(_bytes,0,3);   
  48.                 _flv = _bytes.readUTFBytes(3).toLocaleUpperCase() == "FLV";    
  49.                 dispatchEvent(new MediaEvent(MediaEvent.FLV));   
  50.                 if(_hasClose){   
  51.                     close();   
  52.                 }   
  53.                 removeEventListener(ProgressEvent.PROGRESS, progressHandler);   
  54.             }   
  55.         }   
  56.   
  57.            
  58.         public function isFlvFile():Boolean{   
  59.             return _flv;   
  60.         }   
  61.   
  62.     }   
  63.        
  64. }  

FLVStream调用实例
  1. package project.test {     
  2.     import flash.display.*;        
  3.     import com.klstudio.media.*;   
  4.     public class Test10 extends Sprite{   
  5.         private var _fs:FLVStream;   
  6.         public function Test10(){   
  7.             _fs = new FLVStream("http://video-v1.9you.com/421b47ffd946ca083b65cd668c6b17e6/flv/o/v/ovo5b516b.flv");   
  8.             _fs.addEventListener(MediaEvent.FLV,flvHandler);   
  9.             _fs.read();   
  10.         }   
  11.            
  12.         private function flvHandler(event:MediaEvent):void{   
  13.             trace(_fs.isFlvFile());   
  14.         }   
  15.     }      
  16. }   


    当然同样的原理,也可以写一个用来检测swf等其他文件类型了。只要知道文件头的特征信息就可以了。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值