flv 播放器

开始教程
========================第一段分割线=======================================================
1.如果只是要播放FLV的话就比较简单了.有很多教程都有讲.
先导入这三个包
import flash.media.Video;
import flash.net.URLStream;
import flash.net.NetConnection;
然后开始建立播放器
var videoconnection:NetConnection=new NetConnection();//先创建一个NetConnection对象.
videoconnection.connect(null);//connect参数一定是null,不知道为什么,没去研究.将就用着.
var videostream:NetStream =new NetStream(videoconnection);//再建立一个NetStream对象,连接到NetConnection里面去.
var myvideo:Video =new Video();//再建立一个Video对象.
myvideo.attachNetStream(videostream);//Video挂接NetStream,从NetStream那里读内容.
videostream.play("1.flv");//调用NetStream的play属性开始播放.
addChild(myvideo);//将myvideo对象放在场景里
Ctrl+Enter,你就可以看见一个画面在播放窗口的右下方了.
========================第二段分割线=======================================================
2.只看到一个视频在哪里播放,如果场景设置得不够大,还有部分是看不到的.现在我们来简单控制播放窗口
myvideo.x=-260;//播放器的x值,就是横坐标
myvideo.y=-141;//播放器的y值,就是纵坐标
myvideo.width=470;//播放器的宽度
myvideo.height=290;//播放器的高度.
调成自己需要的值.这样的播放器就好看很多了吧!!将width和height两个属性设成跟场景一样大就成全屏了!!哈哈~~~
========================第三段分割线=======================================================
3.控制声音大小.
使用soundtracnsfrom包来控制,还可以控制左右声道.
首先引入import flash.media.SoundTransform包
然后建立声音控制过程.
var soundtrans:SoundTransform =new SoundTransform();//建立SoundTransform对象用来控制声音.
videostream.soundTransform =soundtrans;//将SoundTransform对象附加到videosream对象上.
建立两个按钮,一个代表加音量命名voup,一个代表减音量命名vodown
this.voup.addEventListener(MouseEvent.MOUSE_UP,soundup);//建立增加音量的侦听器
this.vodown.addEventListener(MouseEvent.MOUSE_UP,sounddown);//建立减少音量的侦听器
//因为soundtransfrom.volume属性是从0到1的,如果减0.1的话很容易出问题.所以建立一个变量来存放音量.
var soundvolume:int=10;//用来存放音量大小.默认最大声
function soundup(Event:MouseEvent ):void {//建立增加音量函数
soundvolume+=1;//音量上升10%;
if (soundvolume>10) {//音量超界控制,如果音量超过最大声
   soundvolume=10;//音量还原成最大声
}
soundtrans.volume=soundvolume/10;//将音量值传给volume属性.记得要除以10,要不音量会超出的.
videostream.soundTransform =soundtrans;//将SoundTransform对象附加到videosream对象上.应用新的设置.
}
/*为什么我要用sounvolume变量来控制,不直接用volume属性??其实是可以的,soundtrans.volume-=0.1,这样也没错.但你用trace()来跟踪一下你就会发现一个问题,至少我这里出现了.0.8-0.1=0.7000000000001这钟情况.再看0.50000000001-0.1=0.4,很奇怪吧!!所以为了避免问题我就是用了一个变量来暂存音量大小.
为什么要用int,用number不行吗?用number的话就可以直接附值不用除以10了??这是没错,但是我在用number类型时,也发现上面同样的问题.太具体也不清楚.总之不明白为什么会多出个0.00000000001出来!*/
function sounddown(Enent:MouseEvent):void {//建立减少音量函数
soundvolume-=1;//音量下降10%
if (soundvolume<0) {//音量超界控制,如果音量超过最小声
   soundvolume=0;//将音量还原成最小声,就是无声状态.
}
soundtrans.volume =soundvolume/10;//将音量传给volume属性,小心超界.要除以10
videostream.soundTransform =soundtrans;将SoundTransform对象附加到videosream对象上.应用新的设置.
}
完了,音量控制就这么简单........
========================第四段分割线=======================================================
4.控制暂停,播放,重播.
暂停.videostream.pasue()
继续播放.videostream.resume()
重播比较麻烦.有几种实现办法.这里讲我自己的.
videostream.pause();//先暂停播放
myvideo.clear();//清除视频内容
videostream.seek(0);//再将播放头设置到第0秒,也就是最开始
videostream.resume();//恢复播放.
这样就可以实现重播功能.我是这样写代码的.
建立一个停止按钮命名vstop,建立一个播放按钮.vplay
this.vstop.addEventListener(MouseEvent.MOUSE_UP,videoclose);
this.vplay.addEventListener(MouseEvent.MOUSE_UP,videocountiue);
function videoclose(Event:MouseEvent):void {
videostream.pause();
myvideo.clear();
}
function videocountiue(Event:MouseEvent):void{
videostream.seek(0);
videostream.resume();
}
这样就写完了重播功能,当然也有用到暂停和继续播放的地方.
========================第五段分割线=======================================================
5.接下来是进度条.下载东西怎么可能少了进度呢!!
使用videostream.bytesLoaded和videostream.bytesTotal属性就可以了,很简单
在场景上放一个动态文本命名loadper.
this.loadper.text=videostream.bytesLoaded/videostream.bytesTotal*100+"%";
很简单吧,这样就可以显示下载进度了!!
this.addEventListener(Event.ENTER_FRAME,loadper);//添加ENTER_FRAME的侦听.
function loadper(event:Event):void {//用来计算下载进度的函数
loads=videostream.bytesLoaded/videostream.bytesTotal*100;//计算加载到多少了
this.loadbai.gotoAndStop(loads);//我自己做的进度条.用来显示加载的百分比
   if (loads==100) {//判断是否加载完
   this.removeEventListener(Event.ENTER_FRAME,loadper);//移除加载函数
   videostream.resume();//继续播放视频,也就是开始播放视频,因为我在play("1.flv")之后就马上pause()了.
}
}
========================第六段分割线=======================================================
6.其他注意事项
第一个是videostream.bufferTime=1属性,这个属性是说明当下载了多少秒视频内容后开始播放.也相当于缓冲的概念.
第二个是var videoclient:Object = new Object();
videoclient.onMetaData=onduration;
videostream.client =videoclient;
function onduration(durobject:Object):void {
//myvideo.x=-(durobject.width/2);
//myvideo.y=-(durobject.height/2);
totaltime=durobject.duration;
trace(durobject.framerate);
}
这个object我也不太明白它,不过它却是一个好东西.虽然没这东西会报错.大家看到了里面有视频大小,长度,帧速.
videoclient还有另一个属性是onCuePoint,这个好象还可以输出视频名称.我一直都没用过.
(补充)========================第七段分割线==================================================
7.容错处理
其实也不算是容错处理.因为并没有使用到error包.只是使用了NetStatusEvent类而已.
首先import flash.event.NetStatusEvent;
然后是连我都没想到的NetStream也有侦听器.
videostream.addEventListener(NetStatusEvent.NET_STATUS,catcherror);//建立NetStatusEvent侦听
function catcherror(streamerror:NetStatusEvent):void {//容错处理函数开始
if(2==streamerror.eventPhase)//如果eventPhase=2,至于为什么我后面解释.
{
   videostream.play(false);//在adobe livedoc上面找到的.好象是停止加载流.
};
}
容错处理就这么简单.接下来我来解释一下一些问题.
1.为什么是NetStatusEvent而不是error包??这个我也不知道为什么.只是我在调试的时候发现加载不了,然后就在输出眶(也就是trace()显示的地方)发现了"出现一个未处理的NetStatusEvent",然后就开始用了NetStatusEvent来处理它.
2.为什么要判断eventPhase等于2??你可以尝试一下用trace(streamerror),你看看输出什么东西.反正我是发现eventPhase是等于2,费事用字符串麻烦.我就用了这个来判断是否是找不到视频....
3.那个NetStream.play(false)到底是什么??这个我也不是很清楚.因为在官方的livedoc上搜到的结果.所以就这么用了!!要不你去搜一下,NetStream.close()函数上有这个介绍的.
========================完结了分割线=======================================================
好,有这么多估计大家都可以写一个和我这个差不多的播放器出来的了.教程就到这里.
源代码在附件里,大家自己下来看吧!!
flash是不给本地连到网络上的,所以大家看swf时可能看不到内容.这里我给出一个解决办法.如果flash player访问网络的时候会弹出个东西来让你确定和设置.你点设置.然后找到第三个"全局安全设置",在下面的"始终信任以下位置文件"的右边有一个"编辑多个位置",点一下,选"添加位置".将要访问网络的swf的位置添加进去就可以了!!我的是在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值