(转载)AS3 HTTPCLIENT读取视频流信息

最近的工作中频繁用到HTTPCLIENT这个类

先放上github的项目地址 https://github.com/gabriel/as3httpclient

原理就是利用socket模拟一个http链接来突破flash player的各种限制

由于是socket连接,所以跨域问题大家还是要好好注意下的

比如原先urlrequest中不能自定义的referer之类的

还有一个妙处就是原先的netstream是不能读取到流的数据,

有时候在流里会藏一些数据,这时候就用到这个类来解决了

这源码是搜索的时候翻到的国外技术,因为原链接已经流失,

俄罗斯战斗民族我又惹不起。。我只好在这里标明我是转载了 =。-

 1 private var ns:NetStream;
 2 private var video:Video;
 3 private var meta:Object;
 4 private var client:HttpClient;
 5 private var filesize:Number = 0;
 6 private var loadedBytes:Number = 0;
 7 private var data:ByteArray = new ByteArray();
 8 private var datadelta:Number = 1024*1024;
 9 private var file:String = "http://your_video_web_url/example.flv";
10
11 private function init():void{
12     var nsClient: Object = {};
13     nsClient.onMetaData = metaDataHandler;
14     var nc:NetConnection = new NetConnection();
15     nc.connect(null);
16     ns = new NetStream(nc);
17     ns.client = nsClient;
18     ns.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
19     ns.addEventListener(IOErrorEvent.IO_ERROR,nsIOErrorHandler);
20     video = new Video();
21     video.attachNetStream(ns);
22     video.smoothing = true;
23     uic.addChild(video);
24     client = new HttpClient();
25     loadData();
26     ns.play(null);
27 }
28 private function loadData():void{
29     var uri:URI = new URI(file);
30     var request:HttpRequest = new Get();
31     var maxdata:Number = loadedBytes+datadelta;
32     if (maxdata>=filesize and filesize>0){
33         request.addHeader(‘Range‘,‘bytes=‘+loadedBytes+‘-‘);
34     } else {
35         request.addHeader(‘Range‘,‘bytes=‘+loadedBytes+‘-‘+maxdata);
36     }
37
38     client.listener.onData = function(e:HttpDataEvent):void
39     {
40         var bytes:ByteArray = new ByteArray();
41         bytes = e.bytes;
42         bytes.position = 0;
43         data.writeBytes(bytes);
44     };
45
46     client.listener.onComplete = function(e:HttpResponseEvent ):void{
47         loadedBytes+=data.length;
48         filesize = Number(e.response.header.getValue(‘Content-Length‘))/1024;
49         ns.appendBytes(data);
50         data.clear();
51         inLoaded = false;
52     };
53
54     client.request(uri,request);
55 }
时间: 2024-10-12 21:07:36

(转载)AS3 HTTPCLIENT读取视频流信息的相关文章

JavaWEB中读取配置信息

第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰, 例子: Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream("/common.properties"); try { prop.load(in); pool = new JedisPool(config, prop.getProperty("pay.redis.url"))

解惑:NFC手机如何轻松读取银行卡信息?

自支付宝钱包8.0推出了NFC新功能,只要将支持NFC功能的手机靠近公交卡.银行卡等带有芯片的IC卡上,可迅速读取卡内余额.卡的信息,还可以给卡进行充值,非常贴心实用. 但是很多网友表示担忧,要是别人用手机紧贴着我的银行卡,那么信息不就轻易泄露了,这样会威胁我的资金安全吗?并有不少伪专家宣称,NFC手机有可能成为黑客的"提款机",可以实现转账操作,风险很大,网友表示很担心.真实情况是什么样的呢?让我从专业的角度,给大家道出内幕. NFC(近场通信,NearFieldCommunicat

iOS通过app读取通讯录信息(整理)

iOS通过app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和AddressBook两个包,并且引入头文件 #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 具体实现如下: -(void)readAllPeoples { //定义通讯录名字为addressbook ABAddressBookRef tmpAddressBook = nil; //根据系统版本

基于C++的WMI应用编程初探-读取BIOS信息

虽然VBScript等脚本语言实现WMI编程更加方便,但有些时候我们还是不得不使用C++来编程,比如说要追求更好的性能或者是一个基于C++的项目中需要这样的功能等等. 下面是用C++实现WMI编程的基本步骤,在这里,我们通过读取BIOS信息来演示如何实现.可以对照参考: http://www.qingfengju.com/article.asp?id=60(通过一个具体实例来理解WMI脚本编程-读取BIOS信息). 1.初始化COM WMI提供的API是基于COM的,所以必须首先执行CoInit

PHP文件操作 之读取目录信息

//定义一个函数 读取目录信息的函数 function dirInfo($dirName) { //判断目录是否存在 if (!file_exists($dirName)) { die('目录不存在!'); } //判断是否是目录 if (!is_dir($dirName)) { die('您所遍历的不是目录!'); } //打开目录 $d = opendir($dirName); //判断打开目录是否成功 if (!$d) { die('打开目录失败!'); } //读取目录 while ($

读取proc信息的可扩展实现

需求 1. 将内存.线程数等信息注册到zk上进行监控 2. 统计信息,为下一步做负载均衡做准备. 实现 本文只解决问题1. 从网上查询了下,这些信息可以从proc文件系统中获取,如果不知道proc的,可以Google下. 网上有读取proc信息的lib——libproc,即 procps, 据说htop等实现就是基于它的. 我下载下来了,include和lib都生成了,好不容易找到一篇教程,结果在 stackoverflow上,见有人说有内存泄露,需要如下方法做. int main(int ar

js读取cookie信息

1. 第一种方式读取cookie信息:用document.cookie.split(“; “)的方式把字符串分割成几个段,然后遍历整个数组 //javascript方法 function getCookie(name){ var arr = document.cookie.split("; "); for(var i=0,len=arr.length;i<len;i++){ var item = arr[i].split("="); if(item[0]==n

EWS API 2.0读取日历信息-读取内容注意事项

[from] http://www.cnblogs.com/love007/archive/2013/06/26/3156852.html 采用模拟账号的方式读取日历信息,注意下日历的内容读取(Body)读取.代码如下:(采用 EWS API 2.0版本) 1.读取内容前必须设置如下属性:否则会提示:You must load or assign this property before you can read its value  Body 如下: //*******************

跟王老师学注解(五):利用反射读取注解信息

跟王老师学注解(五):读取注解信息 主讲教师:王少华   QQ群号:483773664 一.注解被读取 (一)条件 当一个注解类型被定义为运行时注解后,该注解才是运行时可以见,当class文件被装载时被保存在class文件中的注解才会被Java虚拟机所读取. 要把@Retention注解的value成员变量的值设为RetentionPolicy.RUNTIME (二)办法 我们已知所有的注解都是继承的java.lang.Annotation接口,也就是说Annotation是所有接口的父接口.除