Dear friends, here is the code I use for the FLV sound player on my site http://www.mp3uz.com/music/
The player is on every “play button” image. Just click on it. I use FLV just to be able to determine the length, duration of the file.
The problem is that songs are not streaming, but playing just after full loading.
Any idea?
package
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.text.TextField;
import flash.events.*;
import flash.net.*;
import flash.media.Video;
import flash.media.SoundTransform;
import flash.utils.*;
public class odsFLVPlayer extends MovieClip
{
private var file:String;
private var nc:NetConnection = new NetConnection();
private var ns:NetStream;
private var flv:Video;
private var loader:URLLoader = new URLLoader();
private var client:Object = new Object();
private var isplaying:Boolean = false;
private var ispaused:Boolean = false;
private var voluming:Boolean;
private var seeking:Boolean;
private var position:Number;
private var trans:SoundTransform;
private var vol:Number;
private var duration:Number;
private var minutes:Number;
private var seconds:Number;
private var timepass:String;
private var timer:uint;
public function odsFLVPlayer():void
{
minutes = 0;
seconds = 0;
position = 0;
vol = 0.5;
init();
}
private function init():void
{
file = "http://media.mp3uz.com/prv/" + root.loaderInfo.parameters.filename;
loader.addEventListener(ProgressEvent.PROGRESS, handleProgress);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
nc.connect(null);
ns = new NetStream(nc);
trace(ns.bufferLength);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, handleAsyncError);
ns.addEventListener(NetStatusEvent.NET_STATUS, netstat);
flv = new Video();
client.onMetaData = onMetaData;
ns.client = client;
flv.attachNetStream(ns);
addChild(flv);
trans = ns.soundTransform;
trans.volume = vol;
ns.soundTransform = trans;
mc_play_pause.gotoAndStop(1);
mc_play_pause.addEventListener(MouseEvent.CLICK, playPauseFLV);
mc_play_pause.addEventListener(MouseEvent.MOUSE_DOWN, startDragSeeker);
}
private function ioErrorHandler(event:Event):void {
trace("ioErrorHandler: " + event);
}
private function handleAsyncError(event:AsyncErrorEvent):void
{
trace(event.text);
}
private function handleProgress(event:ProgressEvent):void
{
mc_progress_bar.width = event.bytesLoaded / event.bytesTotal * 138;
}
private function playPauseFLV(event:MouseEvent):void
{
}
private function onMetaData(data:Object):void
{
duration = data.duration;
trace("BufferTime: " + ns.bufferTime);
}
private function netstat(stats:NetStatusEvent)
{
trace(stats.info.code);
}
private function playHeadMove(event:Event):void
{
if (ns.time < 1)
{
mc_play_pause.x = 4;
} else
{
mc_play_pause.x = Math.floor((139 * ns.time) / duration) + 4;
}
minutes = Math.floor(ns.time / 60);
seconds = Math.floor(ns.time % 60);
if (minutes.toString().length == 1)
{
timepass = "0" + minutes.toString();
} else
{
timepass = minutes.toString();
}
if (seconds.toString().length == 1)
{
timepass += ":0" + seconds.toString();
} else
{
timepass += ":" + seconds.toString();
}
if (voluming == false)
{
screen.text = timepass;
}
}
private function startDragSeeker(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, doDragSeeker);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragSeeker);
mc_play_pause.removeEventListener(Event.ENTER_FRAME, playHeadMove);
}
private function doDragSeeker(event:MouseEvent):void
{
seeking = true;
var posX:uint;
if (event.stageX > 143)
{
posX = 134;
} else if (event.stageX < 13)
{
posX = 4;
} else
{
posX = event.stageX - 9;
}
mc_play_pause.x = posX;
ns.pause();
ns.seek(Math.floor(((mc_play_pause.x - 4) * duration) / 139));
}
private function stopDragSeeker(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDragSeeker);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragSeeker);
if (mc_play_pause.currentFrame == 1)
{
loader.load(new URLRequest(file));
btn_volume.addEventListener(MouseEvent.MOUSE_DOWN, startDragVolume);
}
if (isplaying == false && ispaused == false)
{
isplaying = true;
ispaused = false;
ns.play(file);
mc_play_pause.gotoAndStop(10);
} else if (ispaused == true && isplaying == false && seeking == false)
{
isplaying = true;
ispaused = false;
ns.resume();
trace("Resumed from: " + ns.time.toString());
mc_play_pause.gotoAndStop(10);
} else if (ispaused == true && isplaying == false && seeking == true)
{
ispaused = false;
isplaying = true;
ns.resume();
mc_play_pause.gotoAndStop(10);
} else if (isplaying == true && ispaused == false && seeking == false)
{
isplaying = false;
ispaused = true;
trace("Paused at: " + ns.time.toString());
ns.pause();
mc_play_pause.gotoAndStop(2);
} else if (isplaying == true && ispaused == false && seeking == true)
{
ns.pause();
ns.resume();
}
seeking = false;
mc_play_pause.addEventListener(Event.ENTER_FRAME, playHeadMove);
}
private function setVolume():void
{
trans.volume = vol;
ns.soundTransform = trans;
}
private function startDragVolume(event:MouseEvent):void
{
voluming = true;
stage.addEventListener(MouseEvent.MOUSE_MOVE, doDragVolume);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragVolume);
screen.text = Math.floor(vol * 100).toString() + "%";
}
private function doDragVolume(event:MouseEvent):void
{
var posX:uint;
if (event.stageX > 259)
{
posX = 251;
} else if (event.stageX < 214)
{
posX = 206;
} else
{
posX = event.stageX - 8;
}
btn_volume.x = posX;
vol = (btn_volume.x - 206) / 45;
setVolume();
screen.text = Math.floor(vol * 100).toString() + "%";
}
private function stopDragVolume(event:MouseEvent):void
{
voluming = false;
stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDragVolume);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragVolume);
}
}
}