打印

[AS3] 简易flv播放器

效果:
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 编辑 ]
哇,这么好的东西,怎么没人顶呢, 很不错