效果:
Flash: http://www.haishabei.net/work_s/ActionScript3.0/Example/flv_player.swf
代码如下:
复制内容到剪贴板
代码:
package {
/*海莎贝 as3.0实验室 简易版flvPlayer
http://www.haishabei.net/
email:haishabei@sina.com
*/
import flash.display.Sprite;
import flash.events.*;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.URLRequest;
import flash.media.SoundTransform;
import flash.display.Stage;
public class flv_player extends Sprite {
private var videoURL:String ="http://www.haishabei.net/work_s/Fun/flv_mtv/艾微儿(MTV)/video.flv";
private var connection:NetConnection;
private var stream:NetStream;
private var transform_:SoundTransform;
private var sound_yinliang:Sprite;
private var sound_yinliang2:Sprite;
private var yinlian:Array=new Array;
private var _duration:uint;
private var loaded_mp3:Sprite;
private var jindu_mp3:Sprite;
private var plays1:Sprite=new Sprite;
private var plays2:Sprite=new Sprite;
private var plays:Sprite=new Sprite;
private var _playing:Boolean=true;
private var loaded:int;
private var total:int;
private var video:Video= new Video();
public function flv_player() {
graphics.clear();
graphics.beginFill(0x000000);
graphics.drawRect(20,302,350,2);
graphics.endFill();
plays1.graphics.beginFill(0x333333);
plays1.graphics.moveTo(10,4);
plays1.graphics.lineTo(18,8);
plays1.graphics.lineTo(10,12);
plays1.graphics.endFill();
addChild(plays1);
plays1.buttonMode = true;
plays1.x=-5;
plays1.y=295;
plays1.addEventListener(MouseEvent.CLICK,$plays);
plays2.addEventListener(MouseEvent.CLICK,$plays);
plays2.graphics.beginFill(0x333333);
plays2.graphics.drawRect(10,4,2,8);
plays2.graphics.drawRect(14,4,2,8);
plays2.graphics.endFill();
addChild(plays2);
plays2.buttonMode = true;
plays2.x=-5;
plays2.y=295;
plays2.visible=false;
yinlian.push(0.5);
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
connection.connect(null);
sound_yinliang=new Sprite ;
sound_yinliang2=new Sprite ;
sound_yinliang2.graphics.beginFill(0xCCCCCC);
sound_yinliang2.graphics.drawRect(0,0,20,5);
sound_yinliang2.graphics.endFill();
addChild(sound_yinliang2);
sound_yinliang2.x=380;
sound_yinliang2.y=300;
addChild(sound_yinliang);
sound_yinliang.x=380;
sound_yinliang.y=300;
sound_yinliang.graphics.beginFill(0x333333);
sound_yinliang.graphics.drawRect(0,0,10,5);
sound_yinliang.graphics.endFill();
sound_yinliang.addEventListener(MouseEvent.MOUSE_DOWN,$sound_yinliangs);
sound_yinliang2.addEventListener(MouseEvent.MOUSE_DOWN,$sound_yinliangs);
loaded_mp3=new Sprite ;
addChild(loaded_mp3);
loaded_mp3.x=20;
loaded_mp3.y=302;
jindu_mp3=new Sprite ;
addChild(jindu_mp3);
jindu_mp3.x=20;
jindu_mp3.y=302;
function $plays(event:Event) {
stream.togglePause();
if (_playing) {
_playing=false;
plays1.visible=false;
plays2.visible=true;
} else {
plays1.visible=true;
plays2.visible=false;
_playing=true;
}
}
}
private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetConnection.Connect.Success" :
//trace("connectStream");
connectStream();
break;
case "NetStream.Play.StreamNotFound" :
trace("Unable to locate video: " + videoURL);
break;
}
switch (event.info.code) {
case "NetStream.Play.Stop" :
loaded_mp3.graphics.clear();
jindu_mp3.graphics.clear();
stream.close();
plays1.visible=true;
plays2.visible=false;
video.clear();
trace("flv已经播放完毕");
}
}
private function connectStream():void {
stream= new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
video.attachNetStream(stream);
stream.play(videoURL);
stream.pause();
transform_=new SoundTransform ;
transform_.volume=yinlian[yinlian.length - 1];
stream.soundTransform=transform_;
addChild(video);
stream.bufferTime=10;
var client:Object = new Object();
client.onMetaData = onMetaData;
stream.client = client;
video.width=400;
video.height=290;
video.y=5;
addEventListener(Event.ENTER_FRAME, $onEnterFrame);
}
private function onMetaData(data:Object):void {
_duration = data.duration;
}
private function $onEnterFrame(event:Event):void {
var loaded:int=stream.bytesLoaded;
var total:int=stream.bytesTotal;
if (_duration > 0 && stream.time > 0) {
var play_flv_jindu:Number=Math.round(stream.time)/Math.round(_duration);
function $jindu_DOUBLE_CLICK(event:Event) {
var mp3_l2:Number=(mouseX - event.target.x) / event.target.width;
stream.seek(stream.time*mp3_l2);
}
if (loaded>0) {
loaded_mp3.graphics.clear();
loaded_mp3.graphics.beginFill(0xFFFF00);
loaded_mp3.graphics.drawRect(0,0,350 * (loaded / total),2);
loaded_mp3.graphics.endFill();
loaded_mp3.addEventListener(MouseEvent.MOUSE_DOWN,$DOUBLE_CLICK);
}
function $DOUBLE_CLICK(event:Event) {
var mp3_l:Number=(mouseX - event.target.x )/350;
stream.seek(_duration*mp3_l);
}
jindu_mp3.graphics.clear();
jindu_mp3.graphics.beginFill(0xFF6600);
jindu_mp3.graphics.drawRect(0,0,350 * play_flv_jindu,2);
jindu_mp3.graphics.endFill();
jindu_mp3.addEventListener(MouseEvent.MOUSE_DOWN,$jindu_DOUBLE_CLICK);
}
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function asyncErrorHandler(event:AsyncErrorEvent):void {
// ignore AsyncErrorEvent events.
}
private function $sound_yinliangs(event:Event) {
yinlian.push((mouseX - 380) / 20);
transform_.volume=yinlian[yinlian.length - 1];
stream.soundTransform=transform_;
yinlian.splice(0,yinlian.length - 1);
sound_yinliang.graphics.clear();
sound_yinliang.graphics.beginFill(0x333333);
sound_yinliang.graphics.drawRect(0,0,20 * transform_.volume,5);
sound_yinliang.graphics.endFill();
}
}
}---------------------------------------------------------------------------
http://www.haishabei.net/专注于Flash ActionScript Flex RIA学习
[
本帖最后由 haishabei 于 2008-6-20 13:01 编辑 ]