Net Stream StreamNotFound
I just migrated from ColdFusion MX 7 to ColdFusion 8. The CF7
app is at
http://64.78.60.211/timos/greenEarth/GreenEarth.html.
The CF8 version is at
http://www.timos.com/timos/greenEarth/GreenEarth.html.
These two URLs contain the exact same files. They are both the same
Windows 2003 server.
If you wish to help and have a couple of minutes, browse to
the CF7 app, and look at the video (click photo of a girl named
Severn Suzuki, on the right side, second image down). Then do the
same with the CF8 app and see the error message:
Error #2044: Unhandled NetStatusEvent:. level=error,
code=NetStream.Play.StreamNotFound
Apparently, Flex cannot find the NetStream in the new server.
I have tried putting the FLV file on the same level as the main
HTML page; I have also tried using a complete absolute URL path to
the FLV. Always the same result.
What I find most curious about this is that it all works
fine in my 'localhost', which is now CF8 Developer Edition.
I don't think this is a CF issue, but I am posting this in
both the CF and the Flex forums, in hopes someone can come up with
something else to try.
Any suggestions would be greatly appreciated.
Carlos
Simultaneously with starting this thread, I wrote to my
hosting provider about the problem.
I got a response saying: "We have added Flash Video MIME type
for your new Web server configuration, this should fix the problem
with your video not loading properly".
That did correct the problem.
Between my initial post and the response from my provider, I
also found this Adobe document:
http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_19439&sliceId=1.
So, if you are on a Windows 2003 server and run into this
problem, now you know the solution.
Regards,
Carlos
Similar Messages
-
Net stream glitch when loading external content
I have a program that plays an FLV using netStream and has cue points embedded which trigger the loading of external graphics. If the code for loading the external graphics is commented out the video plays normally. However, if the code to load the external graphics is left in, each time a graphic is loaded the video appears to stop and start. Has anyone experienced similar issues and/or have any suggestions.
FYI, I built the program using a FLVplayback instance on stage and there is no glitch when the images load, but I have a lot of other things built using the nestStream class so I'd prefer to do it that way.In considering kglad's comment about streaming capacity I starting running a brief test whereby the external graphics would be loaded into the flash file and attached using the attachMovie method rather than loaded using the loadMovie method. In doing so, I found the offending code.
The code was borrowed from a previous program that streamed a number of videos of different sizes. To make a long story short, for that project I was setting the video player visibility to false each time a new video loaded and this was done where the loader was given the loadMovie command. Visibility was turned on when the loader issued the onLoadComplete call. So I got exactly what I was asking for a momentary interruption in the visibility of the video. -
Problems setting volume of a net stream
I'm using this actionscript, but the volume doesnt seem to be
set to 0.
Any tips, greatly appreciated.Yes I know setVolume, but I was looking for a solution
without actionscripting.
The sound is not controlled through actionscript but is
integrated in author
environment, so I thought perhaps there is any hidden feature
(in the prioperty
panel?) to configure allowing you to set the volume.
For example if you drag and drop a sound from the library to
the stage, I
would expect a feature in the property panel to setup the
volume but obviously
there is none. -
Like to understand - Stream DataSet (of XML data) to ZIP file?
i have similar kind of requirement where i need to save dataset data in multi part zip file. from this site i got a sample code
.NET - Stream DataSet (of XML data) to ZIP file? but few area is not clear.
the sample code as follows
// get connection to the database
var c1= new System.Data.SqlClient.SqlConnection(connstring1);
var da = new System.Data.SqlClient.SqlDataAdapter()
SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1)
DataSet ds1 = new DataSet();
// fill the dataset with the SELECT
da.Fill(ds1, "Invoices");
// write the XML for that DataSet into a zip file (split into 1mb chunks)
using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
zip.MaxOutputSegmentSize = 1024*1024;
zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) );
zip.Save(zipFileName);
how this word code Ionic they are using dotnet zip library ? tell me what is
Ionic
i guess this line zip.MaxOutputSegmentSize = 1024*1024; means each segment size would be 1mb ? am i right ?
this line is not clear
zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) );
what is the meaning of this (name,stream) stream never declared but how they can use ?
tell me what is the meaning of this line zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); what the code will do reading the above statement.
suppose if the above code save dataset data in 5 separate zip file then what name will be used for each segment?
if possible give me the code which will read all segment file and extract its content in a folder. thanksIonic is a 3rd party library which can be download by click on the shortcut where you got the code. I don't recommend using compiled 3rd part software unless the source code is provided. Codeplex solutions are usually very reliable.
Yes 1024 x 1024 is the 1mbyte size of the stream
The library is using a Linq syntax. So simple Linq uses something like this
.Select(x => x.ToString()) Where x is a variable name that can be any letter(s) you choose. Select is part of an enumeration. It is really just a shortcut instead of using a "FOR" statement.
The line zip is more complicated version of Linq. It is using two parameters (name,stream). I don't think the code actually works and you would have to look at the documentation at the codeplex website.
jdweng -
HTTP dynamic streaming without FMS ?
Hi,
is it possible to use HTTP Streaming without a Flash Media Server ?
Cheers
MarcOK , I did it !
I event get the audio playing with the flex spark videoplayer component.
When I try it the following it is not working :
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="SuperSimpleFLVPlayer()"
>
<fx:Script>
<![CDATA[
import flash.display.Sprite;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.events.FlexEvent;
private var nc:NetConnection;
private var ns:NetStream;
//private var vid:Video;
private var client:Object;
public function SuperSimpleFLVPlayer ():void
// Initialize net stream
nc = new NetConnection();
nc.connect (null); // Not using a media server.
ns = new NetStream(nc);
client = new Object();
ns.client = client;
client.onMetaData = onMetaData_handler;
client.onCuePoint = onCuePoint_handler
// Play video
//vid.attachNetStream ( ns );September Drive by Lightrocker_1.flv
ns.play ( 'http://xx.xx.xx.xx/vod/September_Drive_by_Lightrocker_1/September_Drive_by_Lightrocker_1.f4m' );
//ns.seek( 555.664 );
//MetaData
private function onMetaData_handler ( mdata:Object ):void {
trace (mdata.duration);
private function onCuePoint_handler( item:Object ):void {
trace("cuePoint");
trace(item.name + "\t" + item.time);
]]>
</fx:Script>
</s:Application> -
Hello there all you flash gurus and experts!
I'm trying to learn how to use the VideoJukebox sample that
you can download from:
http://www.adobe.com/support/documentation/en/flash/samples/
My problem is, that I'm adding the child swf (videojukebox)
to my main swf as a videoplayer. When I remove the child the sound
continues to play. I know this is a common problem and that I
should use unload and close the netstream, but some how I can only
do it within the external actionscript code. I even added a button
to the Videojukebox fla, to test if I manage to close the net
stream. That worked ok, but trying to control the VideoJukebox from
the mother swf doesn't work. There are three files involved:
website.swf, videojukebox.swf and videojukebox.as.
This is how I attach the videojukebox.swf to my website.swf:
var container:Sprite = new Sprite();
addChild(container);
var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest("VideoJukebox.swf");
ldr.load(urlReq);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,
loaded);
function loaded(event:Event):void
myMovieClip_mc.addChild(ldr.content);
Then to remove it I use:
button1.addEventListener (MouseEvent.CLICK,do_videoaway);
function do_videoaway(event:Event):void
myMovieClip_mc.removeChild(ldr.content);
I know I should access the NetStream of videojukebox.as
somehow and turn it off before removing the child...
Videojukebox.as uses:
package {
(...first imports all kinds of stuff...)
public class VideoJukebox extends Sprite {
private var meta:Object;
private var nc:NetConnection;
private var ns:NetStream;
private var playlist:XML;
private var t:Timer;
private var uldr:URLLoader;
private var vid:Video;
private var videosXML:XMLList;
This might be really stupid question, but how can I use the
commond ns.close(); from my website.swf???
Using it just like that it gives an error:
1120: Access of undefined property ns.Could it have something to do with the package? Can I enter
the variables outside of the package?
- Still an amateur -
Failed to play (stream ID: 1).
Hi all, I'm trying to simply stream audio from a FCS using
akamai, I can give you the stream if necessary, but for now I'd
prefer to keep it private. I can connect
(NetConnection.Connect.Success), but the net stream then fails.
// CODE
nc = new NetConnection();
nc.onStatus = function(oInfo:Object):Void {
trace("> nc status > " + oInfo.code);
trace("The connection code is: " + oInfo.code);
nc.connect("rtmp-stream-here");
ns = new NetStream(nc);
ns.onStatus = function(oInfo:Object):Void {
trace("> ns status > " + oInfo.code);
trace(">> " + oInfo.description);
ns.setBufferTime(1)
ns.play("test");
// OUTPUT
> nc status > NetConnection.Connect.Success
The connection code is: NetConnection.Connect.Success
> ns status > NetStream.Failed
>> Failed to play (stream ID: 1).
Does anyone know why I'm getting the: Failed to Play (Stream:
1).Hi John,
Form the description of your issue (and from a short investigation) I can deduce that your assets do not have synchronized keyframes. Please try to re-encode them and force a fixed keyframe interval.
Since the switch can be done on keyframe only, and if you do not have a keyframe in the second stream at that position, the playback will stop with an error.
S. -
Network stream using 64-bit and 32-bit VIs on same computer
I have a project where I'm forced to use a VI written in 32-bit LV2012 (because I need mathscript, which isn't supported in 64-bit) to communicate via network streams with a VI written in 64-bit LV2012 (they only version I can use an externally written 64-bit toolkit for my camera communication) on the same PC.
I need a network stream target to run on the 32-bit VI, and a host to run on 64-bit VI.
It kept not working, and finally I checked using the example host.vi and target.vi, and discovered if I open both in either 32-bit or 64-bit, they work, but if I open one in 32-bit and the other in 64-bit it won't connect, giving error -314100 (specified endpoint doesn't exist).
So question: is there any inherent reason this happens, since both 64-bit and 32-bit should support Network Streams? My first obvious alternative would be rewriting the mathscript code in native LV so i can all be on 64-bit VI's, but it's quite big (based on old, proven Matlab script) and that would be a significant effort I don't have time for now.
The reason I'm using net streams is that I also get data from 2x other networked PC's at the same time. Is there an alternative to network streams that can communicate data over a network in real(ish)-time?
Cheers
DanI just tested this and was able to get it to work. Were you running both reader and writer applications on the same computer? If so, I suspect you might be running into context naming issues with multiple application instances running on the same computer. See this link for more info how to specify a context in the URL. I suspect you might find it easier to create your own test VI for this rather than modify the shipping examples.
-
AS3 + FMS2 = problem with "stream" MP3
I use AS3!
I can not get mp3 "duration" (Net Stream)
where event: onID3??????? how it works???? and it works?????
help plz :)My guess is that its to do with your embedding code. Check a)
you have an id attribute assigned to the resulting object tag from
whatever embedding method you use and b) for good measure make sure
its unique in your html page.
Javascript needs to have a valid reference to return the
value from the javascript function back to flash. In my experience
IE is more sensitive to issues here.
If you get stuck post a test page somewhere.
Tools to use to help with javascript debugging and view the
html embed results (e.g. from swfobject or activecontent.js):
In firefox : Firebug
In IE: IE Developer Toolbar , Companion JS, and DebugBar are
all helpful and , combined, get close to Firebug. -
How to stop video from playing?
Hi,
i have a problem that i've already see that is pretty usual, the videoplayer that i have works fine but when i click in a button to go to another page the videoplayer doesn't stop,the audio continues playing even when i'm not on the videoplayer page.
I've already found some solutions in the web but none of them worked,probably because i didn't put them in the right place
The code is a little long:
// ############# CONSTANTS
// time to buffer for the video in sec.
const BUFFER_TIME:Number = 8;
// start volume when initializing player
const DEFAULT_VOLUME:Number = 0.6;
// update delay in milliseconds.
const DISPLAY_TIMER_UPDATE_DELAY:int = 10;
// smoothing for video. may slow down old computers
const SMOOTHING:Boolean = true;
// ############# VARIABLES
// flag for knowing if user hovers over description label
var bolDescriptionHover:Boolean = false;
// flag for knowing in which direction the description label is currently moving
var bolDescriptionHoverForward:Boolean = true;
// flag for knowing if flv has been loaded
var bolLoaded:Boolean = false;
// flag for volume scrubbing
var bolVolumeScrub:Boolean = false;
// flag for progress scrubbing
var bolProgressScrub:Boolean = false;
// holds the number of the active video
var intActiveVid:int;
// holds the last used volume, but never 0
var intLastVolume:Number = DEFAULT_VOLUME;
// net connection object for net stream
var ncConnection:NetConnection;
// net stream object
var nsStream:NetStream;
// object holds all meta data
var objInfo:Object;
// shared object holding the player settings (currently only the volume)
var shoVideoPlayerSettings:SharedObject = SharedObject.getLocal("playerSettings");
// url to flv file
var strSource:String = root.loaderInfo.parameters.playlist == null ? "playlist.xml" : root.loaderInfo.parameters.playlist;
// timer for updating player (progress, volume...)
var tmrDisplay:Timer;
// loads the xml file
var urlLoader:URLLoader;
// holds the request for the loader
var urlRequest:URLRequest;
// playlist xml
var xmlPlaylist:XML;
// ############# STAGE SETTINGS
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
// ############# FUNCTIONS
// sets up the player
function initVideoPlayer():void {
// hide video controls on initialisation
mcVideoControls.visible = false;
// hide buttons
mcVideoControls.btnUnmute.visible = false;
mcVideoControls.btnPause.visible = false;
mcVideoControls.btnFullscreenOff.visible = false;
// set the progress/preload fill width to 1
mcVideoControls.mcProgressFill.mcFillRed.width = 1;
mcVideoControls.mcProgressFill.mcFillGrey.width = 1;
// set time and duration label
mcVideoControls.lblTimeDuration.htmlText = "<font color='#ffffff'>00:00</font> / 00:00";
// add global event listener when mouse is released
stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
// add fullscreen listener
stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullscreen);
// add event listeners to all buttons
mcVideoControls.btnPause.addEventListener(MouseEvent.CLICK, pauseClicked);
mcVideoControls.btnPlay.addEventListener(MouseEvent.CLICK, playClicked);
mcVideoControls.btnStop.addEventListener(MouseEvent.CLICK, stopClicked);
mcVideoControls.btnNext.addEventListener(MouseEvent.CLICK, playNext);
mcVideoControls.btnPrevious.addEventListener(MouseEvent.CLICK, playPrevious);
mcVideoControls.btnMute.addEventListener(MouseEvent.CLICK, muteClicked);
mcVideoControls.btnUnmute.addEventListener(MouseEvent.CLICK, unmuteClicked);
mcVideoControls.btnFullscreenOn.addEventListener(MouseEvent.CLICK, fullscreenOnClicked);
mcVideoControls.btnFullscreenOff.addEventListener(MouseEvent.CLICK, fullscreenOffClicked);
mcVideoControls.btnVolumeBar.addEventListener(MouseEvent.MOUSE_DOWN, volumeScrubberClicked);
mcVideoControls.mcVolumeScrubber.btnVolumeScrubber.addEventListener(MouseEvent.MOUSE_DOWN , volumeScrubberClicked);
mcVideoControls.btnProgressBar.addEventListener(MouseEvent.MOUSE_DOWN, progressScrubberClicked);
mcVideoControls.mcProgressScrubber.btnProgressScrubber.addEventListener(MouseEvent.MOUSE_ DOWN, progressScrubberClicked);
mcVideoControls.mcVideoDescription.btnDescription.addEventListener(MouseEvent.MOUSE_OVER, startDescriptionScroll);
mcVideoControls.mcVideoDescription.btnDescription.addEventListener(MouseEvent.MOUSE_OUT, stopDescriptionScroll);
// create timer for updating all visual parts of player and add
// event listener
tmrDisplay = new Timer(DISPLAY_TIMER_UPDATE_DELAY);
tmrDisplay.addEventListener(TimerEvent.TIMER, updateDisplay);
// create a new net connection, add event listener and connect
// to null because we don't have a media server
ncConnection = new NetConnection();
ncConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
ncConnection.connect(null);
// create a new netstream with the net connection, add event
// listener, set client to this for handling meta data and
// set the buffer time to the value from the constant
nsStream = new NetStream(ncConnection);
nsStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nsStream.client = this;
nsStream.bufferTime = BUFFER_TIME;
// attach net stream to video object on the stage
vidDisplay.attachNetStream(nsStream);
// set the smoothing value from the constant
vidDisplay.smoothing = SMOOTHING;
// set default volume and get volume from shared object if available
var tmpVolume:Number = DEFAULT_VOLUME;
if(shoVideoPlayerSettings.data.playerVolume != undefined) {
tmpVolume = shoVideoPlayerSettings.data.playerVolume;
intLastVolume = tmpVolume;
// update volume bar and set volume
mcVideoControls.mcVolumeScrubber.x = (53 * tmpVolume) + 318;
mcVideoControls.mcVolumeFill.mcFillRed.width = mcVideoControls.mcVolumeScrubber.x - 371 + 53;
setVolume(tmpVolume);
// create new request for loading the playlist xml, add an event listener
// and load it
urlRequest = new URLRequest(strSource);
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, playlistLoaded);
urlLoader.load(urlRequest);
function playClicked(e:MouseEvent):void {
// check's, if the flv has already begun
// to download. if so, resume playback, else
// load the file
if(!bolLoaded) {
nsStream.play(strSource);
bolLoaded = true;
else{
nsStream.resume();
vidDisplay.visible = true;
// switch play/pause visibility
mcVideoControls.btnPause.visible = true;
mcVideoControls.btnPlay.visible = false;
function pauseClicked(e:MouseEvent):void {
// pause video
nsStream.pause();
// switch play/pause visibility
mcVideoControls.btnPause.visible = false;
mcVideoControls.btnPlay.visible = true;
function stopClicked(e:MouseEvent):void {
// calls stop function
stopVideoPlayer();
function muteClicked(e:MouseEvent):void {
// set volume to 0
setVolume(0);
// update scrubber and fill position/width
mcVideoControls.mcVolumeScrubber.x = 318;
mcVideoControls.mcVolumeFill.mcFillRed.width = 1;
function unmuteClicked(e:MouseEvent):void {
// set volume to last used value or DEFAULT_VOLUME if last volume is zero
var tmpVolume:Number = intLastVolume == 0 ? DEFAULT_VOLUME : intLastVolume
setVolume(tmpVolume);
// update scrubber and fill position/width
mcVideoControls.mcVolumeScrubber.x = (53 * tmpVolume) + 318;
mcVideoControls.mcVolumeFill.mcFillRed.width = mcVideoControls.mcVolumeScrubber.x - 371 + 53;
function volumeScrubberClicked(e:MouseEvent):void {
// set volume scrub flag to true
bolVolumeScrub = true;
// start drag
mcVideoControls.mcVolumeScrubber.startDrag(true, new Rectangle(318, 19, 53, 0)); // NOW TRUE
function progressScrubberClicked(e:MouseEvent):void {
// set progress scrub flag to true
bolProgressScrub = true;
// start drag
mcVideoControls.mcProgressScrubber.startDrag(true, new Rectangle(0, 2, 432, 0)); // NOW TRUE
function mouseReleased(e:MouseEvent):void {
// set progress/volume scrub to false
bolVolumeScrub = false;
bolProgressScrub = false;
// stop all dragging actions
mcVideoControls.mcProgressScrubber.stopDrag();
mcVideoControls.mcVolumeScrubber.stopDrag();
// update progress/volume fill
mcVideoControls.mcProgressFill.mcFillRed.width = mcVideoControls.mcProgressScrubber.x + 5;
mcVideoControls.mcVolumeFill.mcFillRed.width = mcVideoControls.mcVolumeScrubber.x - 371 + 53;
// save the volume if it's greater than zero
if((mcVideoControls.mcVolumeScrubber.x - 318) / 53 > 0)
intLastVolume = (mcVideoControls.mcVolumeScrubber.x - 318) / 53;
function updateDisplay(e:TimerEvent):void {
// checks, if user is scrubbing. if so, seek in the video
// if not, just update the position of the scrubber according
// to the current time
if(bolProgressScrub)
nsStream.seek(Math.round(mcVideoControls.mcProgressScrubber.x * objInfo.duration / 432))
else
mcVideoControls.mcProgressScrubber.x = nsStream.time * 432 / objInfo.duration;
// set time and duration label
mcVideoControls.lblTimeDuration.htmlText = "<font color='#ffffff'>" + formatTime(nsStream.time) + "</font> / " + formatTime(objInfo.duration);
// update the width from the progress bar. the grey one displays
// the loading progress
mcVideoControls.mcProgressFill.mcFillRed.width = mcVideoControls.mcProgressScrubber.x + 5;
mcVideoControls.mcProgressFill.mcFillGrey.width = nsStream.bytesLoaded * 438 / nsStream.bytesTotal;
// update volume and the red fill width when user is scrubbing
if(bolVolumeScrub) {
setVolume((mcVideoControls.mcVolumeScrubber.x - 318) / 53);
mcVideoControls.mcVolumeFill.mcFillRed.width = mcVideoControls.mcVolumeScrubber.x - 371 + 53;
// chech if user is currently hovering over description label
if(bolDescriptionHover) {
// check in which direction we're currently moving
if(bolDescriptionHoverForward) {
// move to the left and check if we've shown everthing
mcVideoControls.mcVideoDescription.lblDescription.x -= 0.1;
if(mcVideoControls.mcVideoDescription.lblDescription.textWidth - 133 <= Math.abs(mcVideoControls.mcVideoDescription.lblDescription.x))
bolDescriptionHoverForward = false;
} else {
// move to the right and check if we're back to normal
mcVideoControls.mcVideoDescription.lblDescription.x += 0.1;
if(mcVideoControls.mcVideoDescription.lblDescription.x >= 0)
bolDescriptionHoverForward = true;
} else {
// reset label position and direction variable
mcVideoControls.mcVideoDescription.lblDescription.x = 0;
bolDescriptionHoverForward = true;
function onMetaData(info:Object):void {
// stores meta data in a object
objInfo = info;
// now we can start the timer because
// we have all the neccesary data
if(!tmrDisplay.running)
tmrDisplay.start();
function netStatusHandler(event:NetStatusEvent):void {
// handles net status events
switch (event.info.code) {
// trace a messeage when the stream is not found
case "NetStream.Play.StreamNotFound":
trace("Stream not found: " + strSource);
break;
// when the video reaches its end, we check if there are
// more video left or stop the player
case "NetStream.Play.Stop":
if(intActiveVid + 1 < xmlPlaylist..vid.length())
playNext();
else
stopVideoPlayer();
break;
function stopVideoPlayer():void {
// pause netstream, set time position to zero
nsStream.pause();
nsStream.seek(0);
// in order to clear the display, we need to
// set the visibility to false since the clear
// function has a bug
vidDisplay.visible = false;
// switch play/pause button visibility
mcVideoControls.btnPause.visible = false;
mcVideoControls.btnPlay.visible = true;
function setVolume(intVolume:Number = 0):void {
// create soundtransform object with the volume from
// the parameter
var sndTransform = new SoundTransform(intVolume);
// assign object to netstream sound transform object
nsStream.soundTransform = sndTransform;
// hides/shows mute and unmute button according to the
// volume
if(intVolume > 0) {
mcVideoControls.btnMute.visible = true;
mcVideoControls.btnUnmute.visible = false;
} else {
mcVideoControls.btnMute.visible = false;
mcVideoControls.btnUnmute.visible = true;
// store the volume in the flash cookie
shoVideoPlayerSettings.data.playerVolume = intVolume;
shoVideoPlayerSettings.flush();
function formatTime(t:int):String {
// returns the minutes and seconds with leading zeros
// for example: 70 returns 01:10
var s:int = Math.round(t);
var m:int = 0;
if (s > 0) {
while (s > 59) {
m++; s -= 60;
return String((m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s);
} else {
return "00:00";
function fullscreenOnClicked(e:MouseEvent):void {
// go to fullscreen mode
stage.displayState = StageDisplayState.FULL_SCREEN;
function fullscreenOffClicked(e:MouseEvent):void {
// go to back to normal mode
stage.displayState = StageDisplayState.NORMAL;
function onFullscreen(e:FullScreenEvent):void {
// check if we're entering or leaving fullscreen mode
if (e.fullScreen) {
// switch fullscreen buttons
mcVideoControls.btnFullscreenOn.visible = false;
mcVideoControls.btnFullscreenOff.visible = true;
// bottom center align controls
mcVideoControls.x = (Capabilities.screenResolutionX - 440) / 2;
mcVideoControls.y = (Capabilities.screenResolutionY - 33);
// size up video display
vidDisplay.height = (Capabilities.screenResolutionY - 33);
vidDisplay.width = vidDisplay.height * 4 / 3;
vidDisplay.x = (Capabilities.screenResolutionX - vidDisplay.width) / 2;
} else {
// switch fullscreen buttons
mcVideoControls.btnFullscreenOn.visible = true;
mcVideoControls.btnFullscreenOff.visible = false;
// reset controls position
mcVideoControls.x = 0;
mcVideoControls.y = 330;
// reset video display
vidDisplay.y = 0;
vidDisplay.x = 0;
vidDisplay.width = 440;
vidDisplay.height = 241;
function playlistLoaded(e:Event):void {
// create new xml with loaded data from loader
xmlPlaylist = new XML(urlLoader.data);
// set source of the first video but don't play it
playVid(0, true)
// show controls
mcVideoControls.visible = true;
function playVid(intVid:int = 0, bolPlay = true):void {
if(bolPlay) {
// stop timer
tmrDisplay.stop();
// play requested video
nsStream.play(String(xmlPlaylist..vid[intVid].@src));
// switch button visibility
mcVideoControls.btnPause.visible = true;
mcVideoControls.btnPlay.visible = false;
} else {
strSource = xmlPlaylist..vid[intVid].@src;
// show video display
vidDisplay.visible = true;
// reset description label position and assign new description
mcVideoControls.mcVideoDescription.lblDescription.x = 0;
mcVideoControls.mcVideoDescription.lblDescription.htmlText = (intVid + 1) + ". <font color='#ffffff'>" + String(xmlPlaylist..vid[intVid].@desc) + "</font>";
// update active video number
intActiveVid = intVid;
function playNext(e:MouseEvent = null):void {
// check if there are video left to play and play them
if(intActiveVid + 1 < xmlPlaylist..vid.length())
playVid(intActiveVid + 1);
function playPrevious(e:MouseEvent = null):void {
// check if we're not and the beginning of the playlist and go back
if(intActiveVid - 1 >= 0)
playVid(intActiveVid - 1);
function startDescriptionScroll(e:MouseEvent):void {
// check if description label is too long and we need to enable scrolling
if(mcVideoControls.mcVideoDescription.lblDescription.textWidth > 138)
bolDescriptionHover = true;
function stopDescriptionScroll(e:MouseEvent):void {
// disable scrolling
bolDescriptionHover = false;
// ############# INIT PLAYER
initVideoPlayer();No,im not using flvplayback component (i think).
Heres the video player that i'm using:
http://www.thetechlabs.com/tutorials/xml/expanding-the-as3-videoplayer/ -
Problem in full screen mode air application
Hi All
I am facing some problem in creating an air application. I used fullscreenmode .FULL_SCREEN_INTERACTIVE to maximize the window on load the application was succeeded in some extent. But there is one problem one bottom bar is coming just under the window. can anybody please help me. I am attaching the preview with this.
Thanks and regardsHi M*A*S*H 4077 thanks agan for your reply sending you the total code i used in my project.As I am a new coder my codes are not in abc please try to understand.please have a look and if u want to see my componentcode then also i can send code.component i only used in the video part.
thank you
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:components="components.*"
verticalAlign="top"
backgroundColor="white"
borderStyle="none"
borderThickness="0"
creationComplete="init();"
baseline="0"
paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0"
initialize="service.send()"
applicationComplete="fullscreenmode()"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#CCCCCC, #090909]"
backgroundImage="@Embed(source='assets/background/background.jpg')"
>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import mx.rpc.events.ResultEvent;
import mx.effects.Iris;
import mx.effects.easing.*;
import flash.utils.Timer;
[Bindable]
public var secondsTillDue:int=100;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
public var bol:Boolean;
[Bindable]
private var images:ArrayCollection;
[Bindable]
private var centerpoint:Number;
[Bindable]
private var currentIndex : Number = 0;
public var myTimer:Timer;
[Bindable]
private var mainwidth:Number;
[Bindable]
private var mainheight:Number;
private function init():void {
myTimer=new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER,warnIfClose);
myTimer.start();
// Initialize the uldr variable which will be used to load the external
// playlist XML file.
uldr = new URLLoader();
uldr.addEventListener(Event.COMPLETE, xmlCompleteHandler);
uldr.load(new URLRequest(PLAYLIST_XML_URL));
/* function setFullScreenDisplayState():void{
stage.displayState=stageDisplayState.FULL_SCREEN_INTERACTIVE;
public function warnIfClose(event:TimerEvent):void{
secondsTillDue=secondsTillDue-1;
if(secondsTillDue==90){
lab1.setStyle("hideEffect", fade);
lab1.visible=false;
clockpan.visible=false;
clockpan.includeInLayout=false
clock1.setStyle("hideEffect", fade);
clock1.visible=false;
else if(secondsTillDue==88){
mainbox
imagePart.setStyle("showEffect",fade);
imagePart.visible=true;
imagePart.includeInLayout=false;
else if(secondsTillDue==83){
imagePart.visible=false;
imagePart.setStyle("hideEffect",fade)
videoContainer.visible=true;
playVideo();
private function fullscreenmode():void{
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
mainwidth=stage.width;
mainheight=stage.height;
centerpoint=stage.height/2;
private function serviceHandler(event:ResultEvent):void{
images = event.result.gallery.img;
var timer:Timer = new Timer(15000);
timer.addEventListener(TimerEvent.TIMER,nextImage);
timer.start();
private function nextImage(event:TimerEvent):void{
if (currentIndex < images.length - 1){
currentIndex++;
else {
currentIndex = 0;
import mx.controls.ProgressBarMode;
* The amount of time between calls to update the playhead timer, in
* milliseconds.
private const PLAYHEAD_UPDATE_INTERVAL_MS:uint = 10;
* The path to the XML file containing the video playlist.
private const PLAYLIST_XML_URL:String = "playlist.xml";
* The client object to use for the NetStream object.
private var client:Object;
* The index of the currently playing video.
[Bindable]
private var idx:uint = 0;
* A copy of the current video's metadata object.
private var meta:Object;
private var nc:NetConnection;
private var ns:NetStream;
private var playlist:XML;
private var t:Timer;
private var uldr:URLLoader;
private var vid:Video;
private var videosXML:XMLList;
* The SoundTransform object used to set the volume for the NetStream.
private var volumeTransform:SoundTransform;
* Constructor
private function initApp():void {
// Initialize the uldr variable which will be used to load the external
// playlist XML file.
uldr = new URLLoader();
uldr.addEventListener(Event.COMPLETE, xmlCompleteHandler);
uldr.load(new URLRequest(PLAYLIST_XML_URL));
* Once the XML file has loaded, parse the file contents into an XML object,
* and create an XMList for the video nodes in the XML.
private function xmlCompleteHandler(event:Event):void {
playlist = XML(event.target.data);
videosXML = playlist.video;
main();
* The main application.
private function main():void {
volumeTransform = new SoundTransform();
// Create the client object for the NetStream, and set up a callback
// handler for the onMetaData event.
client = new Object();
client.onMetaData = metadataHandler;
nc = new NetConnection();
nc.connect(null);
// Initialize the NetSteam object, add a listener for the netStatus
// event, and set the client for the NetStream.
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
ns.client = client;
// Initialize the Video object, attach the NetStram, and add the Video
// object to the display list.
vid = new Video();
vid.x = 0;
vid.y = 0;
vid.attachNetStream(ns);
videoContainer.addChild(vid);
// Begin playback of the first video.
//playVideo();
//play video code goes here
// Initialize the Timer object and set the delay to
// PLAYHEAD_UPDATE_INTERVAL_MS milliseconds.
t = new Timer(PLAYHEAD_UPDATE_INTERVAL_MS);
t.addEventListener(TimerEvent.TIMER, timerHandler);
// Configure the positionBar ProgressBar instance and set the mode to
// MANUAL. Progress bar values will be explicitly set using the
// setProgress() method.
//positionBar.mode = ProgressBarMode.MANUAL;
// Configure the volumeSlider Slider component instance. The maximum
// value is set to 1 because the volume in the SoundTransform object
// is set to a number between 0 and 1. The snapInterval and tickInterval
// properties are set to 0.1 which allows users to set the volume to
// 0, 0.1 - 0.9, 1.0 which allows users to increment or decrement the
// volume by 10%.
//volumeSlider.value = volumeTransform.volume;
//volumeSlider.minimum = 0;
//volumeSlider.maximum = 1;
//volumeSlider.snapInterval = 0.1;
//volumeSlider.tickInterval = volumeSlider.snapInterval;
// Setting the liveDragging property to true causes the Slider
// instance's change event to be dispatched whenever the slider is
// moved, rather than when the user releases the slider thumb.
//volumeSlider.liveDragging = true;
//volumeSlider.addEventListener(Event.CHANGE, volumeChangeHandler);
// Configure the various Button instances. Each Button instance uses
// the same click handler.
//playButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
//pauseButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
//stopButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
//backButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
//forwardButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
* Event listener for the volumeSlider instance. Called when the user
* changes the value of the volume slider.
private function volumeChangeHandler():void {
// Set the volumeTransform's volume property to the current value of the
// Slider and set the NetStream object's soundTransform property.
//volumeTransform.volume = volumeSlider.value;
ns.soundTransform = volumeTransform;
* Event listener for the ns object. Called when the net stream's status
* changes.
private function netStatusHandler(event:NetStatusEvent):void {
try {
switch (event.info.code) {
case "NetStream.Play.Start" :
// If the current code is Start, start the timer object.
t.start();
break;
case "NetStream.Play.StreamNotFound" :
case "NetStream.Play.Stop" :
// If the current code is Stop or StreamNotFound, stop
// the timer object and play the next video in the playlist.
t.stop();
playNextVideo();
break;
} catch (error:TypeError) {
// Ignore any errors.
* Event listener for the ns object's client property. This method is called
* when the net stream object receives metadata information for a video.
private function metadataHandler(metadataObj:Object):void {
// Store the metadata information in the meta object.
meta = metadataObj;
// Resize the Video instance on the display list with the video's width
// and height from the metadata object.
vid.width = mainwidth;
vid.height = mainheight;
// Reposition and resize the positionBar progress bar based on the
// current video's dimensions.
//positionBar.move(vid.x, vid.y + vid.height);
//positionBar.width = vid.width;
* Retrieve the current video from the playlist XML object.
private function getVideo():String {
return videosXML[idx].@url;
* Play the currently selected video.
private function playVideo():void {
var url:String = getVideo();
ns.play(url);
* Decrease the current video index and begin playback of the video.
private function playPreviousVideo():void {
if (idx > 0) {
idx--;
playVideo();
// Make sure the positionBar progress bar is visible.
//positionBar.visible = true;
* Increase the current video index and begin playback of the video.
[Bindable]
private var newTime:Number;
private function playNextVideo():void{
if (idx < (videosXML.length() - 1)) {
// If this is not the last video in the playlist increase the
// video index and play the next video.
idx++;
playVideo();
// Make sure the positionBar progress bar is visible.
//positionBar.visible = true;
} else {
// If this is the last video in the playlist increase the video
// index, clear the contents of the Video object and hide the
// positionBar progress bar. The video index is increased so that
// when the video ends, clicking the backButton will play the
// correct video.
idx++;
vid.clear();
init();
//Alert.show("video end")
//positionBar.visible = false;
private function timerHandler(event:TimerEvent):void {
try {
} catch (error:Error) {
]]>
</mx:Script>
<mx:XML id="imagesXML" source="data/images.xml" />
<mx:Zoom id="zoom" />
<mx:Fade id="fadein" duration="1000" alphaFrom="100" alphaTo="0" />
<mx:Fade id="fade" />
<mx:Rotate id="rotate"
angleFrom="-180"
angleTo="0"
easingFunction="Elastic.easeInOut"
duration="2000" />
<mx:VBox id="mainbox" horizontalAlign="left" width="100%" height="100%" verticalScrollPolicy="off" horizontalScrollPolicy="off">
<mx:Panel borderStyle="none"
borderAlpha="0"
cornerRadius= "0"
headerHeight= "0"
backgroundAlpha= "0"
borderThickness="0"
verticalAlign="middle"
top="100"
height="500"
paddingLeft="0"
paddingRight="0"
paddingBottom="0"
verticalScrollPolicy="off"
horizontalScrollPolicy="off"
horizontalAlign="center"
width="{mainwidth-100}"
id="clockpan"
>
<mx:Label text="Current Time : " fontFamily="arial" fontWeight="bold" fontSize="15" id="lab1" color="#FFFFFF"/>
<components:MyWatch formatString="DD/MM/YYYY KK:NN:SS " themeColor="#0D424C" id="clock1"/>
</mx:Panel>
<!--image part start-->
<mx:Panel horizontalAlign="left" id="imagePart" visible="false" includeInLayout="false" borderStyle="none"
borderAlpha="0"
cornerRadius= "0"
headerHeight= "0"
borderThickness="0"
verticalScrollPolicy="off"
paddingLeft="0" paddingBottom="0" paddingRight="0" paddingTop="0"
horizontalScrollPolicy="off"
backgroundAlpha= "0" width="100%" height="100%">
<mx:Image source="assets/images/{images.getItemAt(currentIndex).file}"
showBusyCursor="true" id="imagefile" width="{mainwidth}" maxHeight="{mainheight}" minHeight="{mainheight}" maxWidth="{mainwidth}" minWidth="{mainwidth}" height="{mainheight}" hideEffect="{fadein}" x="0" y="0" maintainAspectRatio="false"/>
<mx:Text text="{images.getItemAt(currentIndex).title}" styleName="title" color="#ffffff" x="0" y="30"/>
</mx:Panel>
<!--image part end-->
<!--image part start-->
<mx:Panel borderStyle="none"
borderAlpha="0"
cornerRadius= "0"
borderThickness="0"
headerHeight= "0" top="0" left="0"
backgroundAlpha= "0" verticalAlign="middle"
verticalScrollPolicy="off"
horizontalScrollPolicy="off"
x="0"
>
<mx:VideoDisplay borderStyle="none" borderThickness="0" visible="false" id="videoContainer"
maintainAspectRatio="false"
/>
</mx:Panel>
<!--image part end-->
<!--<mx:Button label="fullscreen" click="stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;"/>-->
</mx:VBox>
<mx:HTTPService id="service" url="data.xml" result="serviceHandler(event)"/>
</mx:WindowedApplication> -
My scrub bar isn't so percise. When I scrub, the duration is off track. What am I doing wrong? Please help.
PS, it's stream NOT progressive.
// ############# CONSTANTS
// time to buffer for the video in sec.
const BUFFER_TIME:Number = 8;
// start volume when initializing player
const DEFAULT_VOLUME:Number = 0.6;
// update delay in milliseconds.
const DISPLAY_TIMER_UPDATE_DELAY:int = 10;
// smoothing for video. may slow down old computers
const SMOOTHING:Boolean = true;
// ############# VARIABLES
// flag for knowing if flv has been loaded
var bolLoaded:Boolean = false;
// flag for volume scrubbing
var bolVolumeScrub:Boolean = false;
// flag for progress scrubbing
var bolProgressScrub:Boolean = false;
// holds the last used volume, but never 0
var intLastVolume:Number = DEFAULT_VOLUME;
// net connection object for net stream
var ncConnection:NetConnection;
// net stream object
var nsStream:NetStream;
// object holds all meta data
var objInfo:Object;
var dur:Number;
var totalBytes:Number;
//rtmp of server hosting the flv
var FLVServer:String = "rtmp://www.chameleon.com/vids";
//flv file
// Create a new NetConnection instance
var conn:NetConnection = new NetConnection();
// Connect with a null value for progressive FLV files
conn.connect(null);
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
var strSource:String = "6.flv";
// timer for updating player (progress, volume...)
var tmrDisplay:Timer;
// ############# FUNCTIONS
// sets up the player
function initVideoPlayer():void {
// hide buttons
controlPanel.mcVideoControls.btnUnmute.visible = false;
controlPanel.mcVideoControls.btnPause.visible = false;
controlPanel.mcVideoControls.normalS.visible = false;
// set the progress/preload fill width to 1
controlPanel.mcVideoControls.mcProgressFill.mcFillRed.width = 1;
controlPanel.mcVideoControls.mcProgressFill.mcFillGrey.width = 1;
// add global event listener when mouse is released
stage.addEventListener( MouseEvent.MOUSE_UP, mouseReleased);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullscreen);
// ###### PB HIDEN TIMER
stage.addEventListener(MouseEvent.MOUSE_MOVE, cPanel);
function cPanel(event:MouseEvent):void {
controlPanel.gotoAndPlay(1);
controlPanel.mcVideoControls.mcProgressScrubber.btnProgressScrubber.visible = true;
Mouse.show();
// add event listeners to all buttons
controlPanel.mcVideoControls.btnPause.addEventListener(MouseEvent.CLICK, pauseClicked);
controlPanel.mcVideoControls.btnPlay.addEventListener(MouseEvent.CLICK, playClicked);
controlPanel.mcVideoControls.btnStop.addEventListener(MouseEvent.CLICK, stopClicked);
controlPanel.mcVideoControls.btnMute.addEventListener(MouseEvent.CLICK, muteClicked);
controlPanel.mcVideoControls.btnUnmute.addEventListener(MouseEvent.CLICK, unmuteClicked);
controlPanel.mcVideoControls.btnProgressBar.addEventListener(MouseEvent.MOUSE_DOWN, progressScrubberClicked);
controlPanel.mcVideoControls.btnVolumeBar.addEventListener(MouseEvent.MOUSE_DOWN, volumeScrubberClicked);
controlPanel.mcVideoControls.mcProgressScrubber.btnProgressScrubber.addEventListener(MouseEvent.MOUSE_DOWN, progressScrubberClicked);
big_play.addEventListener(MouseEvent.CLICK, BIGPLAY);
controlPanel.mcVideoControls.fullS.addEventListener(MouseEvent.CLICK, FullScreen);
controlPanel.mcVideoControls.normalS.addEventListener(MouseEvent.CLICK, NormalScreen);
// create timer for updating all visual parts of player and add
// event listener
tmrDisplay = new Timer(DISPLAY_TIMER_UPDATE_DELAY);
tmrDisplay.addEventListener(TimerEvent.TIMER, updateDisplay);
// create a new net connection, add event listener and connect
// to null because we don't have a media server
ncConnection = new NetConnection();
ncConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
ncConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
ncConnection.connect(FLVServer);
// set the smoothing value from the constant
vidDisplay.smoothing = SMOOTHING;
controlPanel.mcVideoControls.mcProgressScrubber.durationBubble.visible = false;
// set default volume
controlPanel.mcVideoControls.mcVolumeScrubber.x = (52 * DEFAULT_VOLUME) + 341;
controlPanel.mcVideoControls.mcVolumeFill.mcFillRed.width = controlPanel.mcVideoControls.mcVolumeScrubber.x - 394 + 52;
function onFullscreen(e:FullScreenEvent):void {
// check if we're entering or leaving fullscreen mode
if (e.fullScreen) {
// switch fullscreen buttons
controlPanel.mcVideoControls.fullS.visible = false;
controlPanel.mcVideoControls.normalS.visible = true;
// bottom center align controls
controlPanel.x = (Capabilities.screenResolutionX - 440) / 2;
controlPanel.y = (Capabilities.screenResolutionY - 33);
// size up video display
vidDisplay.height = (Capabilities.screenResolutionY - 33);
vidDisplay.width = vidDisplay.height * 4 / 3;
vidDisplay.x = (Capabilities.screenResolutionX - vidDisplay.width) / 2;
} else {
// switch fullscreen buttons
controlPanel.mcVideoControls.fullS.visible = true;
controlPanel.mcVideoControls.normalS.visible = false;
// reset controls position
controlPanel.x = 0;
controlPanel.y = 330;
// reset video display
vidDisplay.y = 0;
vidDisplay.x = 0;
vidDisplay.width = 440;
vidDisplay.height = 330;
function FullScreen(e:MouseEvent):void {
stage.displayState = "fullScreen";
controlPanel.mcVideoControls.normalS.visible = true;
function NormalScreen(e:MouseEvent):void {
stage.displayState = "normal";
controlPanel.mcVideoControls.fullS.visible = false;
function BIGPLAY(e:MouseEvent):void {
if( bolLoaded) {
nsStream.resume();
// show video display
vidDisplay.visible = true;
// switch play/pause visibility
controlPanel.mcVideoControls.btnPause.visible = true;
controlPanel.mcVideoControls.btnPlay.visible = false;
big_play.visible = false;
function playClicked(e:MouseEvent):void {
// check's, if the flv has already begun
// to download. if so, resume playback, else
// load the file
if( bolLoaded) {
nsStream.resume();
// show video display
vidDisplay.visible = true;
// switch play/pause visibility
controlPanel.mcVideoControls.btnPause.visible = true;
controlPanel.mcVideoControls.btnPlay.visible = false;
big_play.visible = false;
function pauseClicked(e:MouseEvent):void {
// pause video
nsStream.pause();
// switch play/pause visibility
controlPanel.mcVideoControls.btnPause.visible = false;
controlPanel.mcVideoControls.btnPlay.visible = true;
big_play.visible = true;
function stopClicked(e:MouseEvent):void {
// calls stop function
stopVideoPlayer();
big_play.visible = true;
function muteClicked(e:MouseEvent):void {
// set volume to 0
setVolume(0);
// update scrubber and fill position/width
controlPanel.mcVideoControls.mcVolumeScrubber.x = 341;
controlPanel.mcVideoControls.mcVolumeFill.mcFillRed.width = 1;
function unmuteClicked(e:MouseEvent):void {
// set volume to last used value
setVolume(intLastVolume);
// update scrubber and fill position/width
controlPanel.mcVideoControls.mcVolumeScrubber.x = (53 * intLastVolume) + 341;
controlPanel.mcVideoControls.mcVolumeFill.mcFillRed.width = controlPanel.mcVideoControls.mcVolumeScrubber.x - 394 + 53;
function volumeScrubberClicked(e:MouseEvent):void {
// set volume scrub flag to true
bolVolumeScrub = true;
// start drag
controlPanel.mcVideoControls.mcVolumeScrubber.startDrag(true, new Rectangle(341, 19, 53, 0));
function progressScrubberClicked(e:MouseEvent):void {
// set progress scrub flag to true
bolProgressScrub = true;
controlPanel.mcVideoControls.mcProgressScrubber.durationBubble.visible = true;
// start drag
controlPanel.mcVideoControls.mcProgressScrubber.startDrag(true, new Rectangle(0, -6, 630, 0));
function mouseReleased(e:MouseEvent):void {
// set progress/volume scrub to false
bolVolumeScrub = false;
bolProgressScrub = false;
controlPanel.mcVideoControls.mcProgressScrubber.durationBubble.visible = false;
// stop all dragging actions
controlPanel.mcVideoControls.mcProgressScrubber.stopDrag();
controlPanel.mcVideoControls.mcVolumeScrubber.stopDrag();
// update progress/volume fill
controlPanel.mcVideoControls.mcProgressFill.mcFillRed.width = controlPanel.mcVideoControls.mcProgressScrubber.x + 5;
controlPanel.mcVideoControls.mcVolumeFill.mcFillRed.width = controlPanel.mcVideoControls.mcVolumeScrubber.x - 394 + 53;
// save the volume if it's greater than zero
if((controlPanel.mcVideoControls.mcVolumeScrubber.x - 341) / 53 > 0)
intLastVolume = (controlPanel.mcVideoControls.mcVolumeScrubber.x - 341) / 53;
var duration:Number;
function updateDisplay(ev:TimerEvent):void {
// checks, if user is scrubbing. if so, seek in the video
// if not, just update the position of the scrubber according
// to the current time
if(bolProgressScrub)
nsStream.seek( Math.round( controlPanel.mcVideoControls.mcProgressScrubber.x * objInfo.duration / 630 ) )
else
controlPanel.mcVideoControls.mcProgressScrubber.x = nsStream.time * 630 / objInfo.duration;
// set time and duration label
controlPanel.mcVideoControls.lblTimeDuration.htmlText = "<font color='#FFFFFF'>" + formatTime(nsStream.time) + "</font> / " + formatTime(objInfo.duration);
controlPanel.mcVideoControls.mcProgressScrubber.durationBubble.lblTimeDuration.htmlText = "<font color='#FFFFFF'>" + formatTime(nsStream.time) + "</font>";
// update the width from the progress bar. the grey one displays
// the loading progress
controlPanel.mcVideoControls.mcProgressFill.mcFillRed.width = controlPanel.mcVideoControls.mcProgressScrubber.x + 5;
controlPanel.mcVideoControls.mcProgressFill.mcFillGrey.width = nsStream.bytesLoaded * 630 / nsStream.bytesTotal;
// update volume and the red fill width when user is scrubbing
if(bolVolumeScrub) {
setVolume((controlPanel.mcVideoControls.mcVolumeScrubber.x - 341) / 53);
controlPanel.mcVideoControls.mcVolumeFill.mcFillRed.width = controlPanel.mcVideoControls.mcVolumeScrubber.x - 394 + 53;
function onMetaData(info:Object):void {
objInfo = info;
// now we can start the timer because
// we have all the necessary data
if(!tmrDisplay.running)
tmrDisplay.start();
function netStatusHandler(event:NetStatusEvent):void {
// handles net status events
trace( event.info.code );
switch (event.info.code) {
case "NetConnection.Connect.Success":
connectStream();
break;
// trace a messeage when the stream is not found
case "NetStream.Play.StreamNotFound":
trace("Stream not found: " + strSource);
break;
// when the video reaches its end, we stop the player
case "NetStream.Play.Stop":
stopVideoPlayer();
trace('stoped');
break;
function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
function connectStream():void {
nsStream = new NetStream(ncConnection);
nsStream.bufferTime = BUFFER_TIME;
// nsStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nsStream.client = this;
bolLoaded = true;
vidDisplay.attachNetStream(nsStream);
nsStream.seek(5);
nsStream.play(strSource);
nsStream.pause();
// attach net stream to video object on the stage
vidDisplay.attachNetStream(nsStream);
vidDisplay.visible = true;
function stopVideoPlayer():void {
// pause netstream, set time position to zero
nsStream.pause();
nsStream.seek(0);
// in order to clear the display, we need to
// set the visibility to false since the clear
// function has a bug
vidDisplay.visible = false;
// switch play/pause button visibility
controlPanel.mcVideoControls.btnPause.visible = false;
controlPanel.mcVideoControls.btnPlay.visible = true;
function setVolume(intVolume:Number = 0):void {
// create soundtransform object with the volume from
// the parameter
var sndTransform = new SoundTransform(intVolume);
// assign object to netstream sound transform object
nsStream.soundTransform = sndTransform;
// hides/shows mute and unmute button according to the
// volume
if(intVolume > 0) {
controlPanel.mcVideoControls.btnMute.visible = true;
controlPanel.mcVideoControls.btnUnmute.visible = false;
} else {
controlPanel.mcVideoControls.btnMute.visible = false;
controlPanel.mcVideoControls.btnUnmute.visible = true;
function formatTime(t:int):String {
var remainder:Number;
var hours:Number = t / ( 60 * 60 );
remainder = hours - (Math.floor ( hours ));
hours = Math.floor ( hours );
var minutes = remainder * 60;
remainder = minutes - (Math.floor ( minutes ));
minutes = Math.floor ( minutes );
var seconds = remainder * 60;
remainder = seconds - (Math.floor ( seconds ));
seconds = Math.floor ( seconds );
var hString:String = hours < 10 ? "0" + hours : "" + hours;
var mString:String = minutes < 10 ? "0" + minutes : "" + minutes;
var sString:String = seconds < 10 ? "0" + seconds : "" + seconds;
if ( t < 0 || isNaN(t)) return "00:00";
if ( hours > 0 )
return hString + ":" + mString + ":" + sString;
}else
return mString + ":" + sString;
// ############# INIT PLAYER
initVideoPlayer();errr you won't be able to do anything with that......here you go. Don't say I never gave you anything.
package NetConnections.NetStreams{
import flash.net.*;
import flash.events.*;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.media.*;
import flash.net.*;
import NetConnections.NetConnections;
//import UI.BeginAudio;
//import UI.RecordAudio;
//import Main.SendObject;
import fl.controls.ProgressBar;
import fl.controls.ProgressBarDirection;
import fl.controls.ProgressBarMode;
//import fl.controls.NumericStepper;
//import fl.controls.Label;
import flash.utils.Timer;
public class Audio extends Sprite {
//var audioS0:NetStream;
var audioR0:NetStream;
//var btns1:Object;
//var mic0:Microphone;
var rePublishID1:Number;
//var speaker:int=0;
var userName00:*;
var main00:Object;
public var video0:Video;
public var progBar:ProgBar;
//var stepper:NumericStepper;
//var progLabel:Label;
//var divID=1;
var percent;
var customClient0:Object;
//var customClient2:Object;
var duration:Number;
var step:Number;
//public var uvCon:Sprite;
//public var auTrack:Sprite;
//var micAct:Number;
//var scale0:Number;
var oneTime0:int=0;
var oneTime1:int=0;
var audioTime0:int=0;
var yMin:Number;
var yMax:Number;
var yOffset:Number;
var yMin1:Number;
var yMax1:Number;
var yOffset1:Number;
var step1:Number=0;
var step2:Number=0;
var amountLoaded:Number;
var stepper0:Number=0;
var thisButton:String;
var stopScrub:int=0;
var vol:Number =0.75;
var flashID=0;
var tim0:Timer;
//var ID3Meta00:Object;
//var sFX:SoundChannel;
//var soundFactory:Sound;
//var request:URLRequest;
//var mp3ID:int=0;
//var T:int=0;
//var mp3Tim:Timer;
//var inc:Number;
//var inc1;
//var inc2;
//var inc3;
public function Audio(audioR:NetStream,userName0:*,main0:Object):void {
main00=main0;
//ID3Meta00 = ID3Meta;
//mic0=Microphone.getMicrophone();
//mic0.gain =50;
//mic0.rate=11;
//audioS0=audioS;
audioR0=audioR;
userName00 = userName0;
main00=main0;
video0 = new Video(320,240);
progBar = new ProgBar();
progBar.progBar.direction = ProgressBarDirection.RIGHT;
progBar.progBar.mode = ProgressBarMode.POLLED;
yMin = 0;
yMax = main00.progBar.progBar.width - main00.progBar.scrubber.width;
yMin1 = 0;
yMax1 = main00.track0.width - main00.track0.volThumb.width;
main00.progBar.progBar.addEventListener(Event.COMPLETE, CompleteHandler,false,0,true);
main00.play_btn.buttonMode=true;
main00.play_btn.addEventListener(MouseEvent.MOUSE_DOWN,PlayBack);
main00.pause_btn.buttonMode=true;
main00.pause_btn.addEventListener(MouseEvent.MOUSE_DOWN,PausePlayBack);
audioR0.addEventListener(NetStatusEvent.NET_STATUS,DetectEnd,false,0,true);
tim0 = new Timer(1000,0);
tim0.addEventListener(TimerEvent.TIMER,countBuff,false,0,true);
PlayBack();
private function PlayBack(e:MouseEvent=null):void{
main00.pause_btn.x=main00.play_btn.x;
main00.pause_btn.y=main00.play_btn.y;
main00.play_btn.x =main00.pause_btn.x;
main00.play_btn.y =2800;
if(audioTime0==0){
SetAudio(0);
audioTime0=1;
}else{
SetAudio(1);
private function PausePlayBack(e:MouseEvent=null):void{
main00.play_btn.x =main00.pause_btn.x;
main00.play_btn.y =main00.pause_btn.y;
main00.pause_btn.x=main00.play_btn.x;
main00.pause_btn.y=2800;
SetAudio(1);
private function thumbDown(e:MouseEvent):void {
thisButton ="scrubber";
stopScrub=1;
ChangeHandler();
main00.stage.addEventListener(MouseEvent.MOUSE_MOVE, thumbMove);
yOffset = mouseX - main00.progBar.scrubber.x;
private function thumbUp(e:MouseEvent):void {
stopScrub=0;
ChangeHandler();
step1=0;
step2=0;
main00.stage.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMove);
private function thumbMove(e:MouseEvent):void {
main00.progBar.scrubber.x = mouseX - yOffset;
if (main00.progBar.scrubber.x <= yMin) {
main00.progBar.scrubber.x = yMin;
if (main00.progBar.scrubber.x >= yMax) {
main00.progBar.scrubber.x = yMax;
dispatchEvent(new ScrollBarEvent(main00.progBar.scrubber.x / yMax));
e.updateAfterEvent();
private function sbChange(e:ScrollBarEvent):void {
trace(e.currentTarget.name);
//var vol = Math.floor(e.scrollPercent*100)*.01;
if(thisButton=="scrubber"){
//audioR0.seek(step2);
step1 = Math.floor((main00.progBar.scrubber.x/main00.progBar.progBar.width)*duration);
audioR0.seek(step1);
trace(step1);
//main00.progBar.progBar.setProgress(step1,duration);
if(thisButton=="volThumb"){
vol=Math.floor(e.scrollPercent*100)*.02;
trace("+++++++"+main00.track0.volThumb.x);
trace(vol);
if (audioR0 != null) {
var st:SoundTransform = new SoundTransform(vol);
audioR0.soundTransform = st;
//rewind
private function Rewind(e:MouseEvent):void{
audioR0.seek(0);
stepper0=0;
private function FastFD(e:MouseEvent):void{
trace("ok");
var stepper1:Number=Math.floor((main00.progBar.scrubber.x/main00.progBar.progBar.width)*durat ion);
stepper1++;
stepper1=stepper1*2;
if(stepper1>=duration){
stepper1=duration-2;
if(main00.progBar.progBar.percentComplete ==100){
stepper1=duration-2;
progBar.progBar.reset();
audioR0.seek(stepper1);
//volume
private function thumbDown1(e:MouseEvent):void {
thisButton="volThumb";
main00.stage.addEventListener(MouseEvent.MOUSE_MOVE, thumbMove1);
yOffset1 = mouseX - main00.track0.volThumb.x;
private function thumbUp1(e:MouseEvent):void {
main00.stage.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMove1);
private function thumbMove1(e:MouseEvent):void {
main00.track0.volThumb.x = mouseX - yOffset1;
if (main00.track0.volThumb.x <= yMin1) {
main00.track0.volThumb.x = yMin1;
if (main00.track0.volThumb.x >= yMax1) {
main00.track0.volThumb.x = yMax1;
dispatchEvent(new ScrollBarEvent(main00.track0.volThumb.x / yMax));
e.updateAfterEvent();
private function sbChange1(e:ScrollBarEvent):void {
var vol = Math.floor(e.scrollPercent*100)*.01;
var st:SoundTransform = new SoundTransform(vol);
if (audioR0 != null) {
audioR0.soundTransform = st;
private function auTrackMic(e:Event):void {
micAct = Math.floor(mic0.activityLevel);
if (micAct<=0) {
scale0 =0;
} else if (micAct>1&&micAct<=15) {
scale0=0;
} else if (micAct>15&&micAct<=30) {
scale0=0;
} else if (micAct>30&&micAct<=45) {
scale0=8;
} else if (micAct>45&&micAct<=60) {
scale0=8.5;
} else if (micAct>60&&micAct<=75) {
scale0=9;
} else if (micAct>1&&micAct<=80) {
scale0=9.5;
} else if (micAct>1&&micAct<=90) {
scale0=10;
} else if (micAct>90) {
scale0=10.5;
auTrack.scaleX =scale0;
function RemoveProgBar(e:Event):void {
////trace("progbar gone");
if (progBar.parent !=null) {
progBar.parent.removeChild(progBar);
public function metaDataHandler(info:Object):void {
duration =info.duration;
trace("+++++++======="+duration);
if(duration <=1||!duration){
audioR0.close();
main00.progBar.progBar.reset;
main00.progBar.scrubber.x=main00.progBar.progBar.x;
addEventListener(Event.ENTER_FRAME,FlashTastic,false,0,true);
private function FlashTastic(e:Event):void{
trace("flashing");
if(flashID==0){
main00.play_btn.removeEventListener(MouseEvent.MOUSE_DOWN,PlayBack);
main00.pause_btn.removeEventListener(MouseEvent.MOUSE_DOWN,PausePlayBack);
RemoveListeners();
main00.play_btn.enabled=false;
main00.pause_btn.enabled=false;
main00.progBar.progBar.setProgress(100,100);
main00.progBar.progBar.alpha=0;
flashID=1;
}else{
main00.progBar.progBar.alpha=1;
flashID=0;
private function ChangeHandler(event:Event=null):void {
if(main00.play_btn.y ==2800 && main00.pause_btn.y==2800){
main00.play_btn.y =15;
if(main00.progBar.scrubber.x==0 && main00.progBar.progBar==100){
main00.progBar.progBar.reset();
if (oneTime0==0) {
//main00.progBar.progBar.reset();
oneTime0=1;
//amountLoaded = audioR0.time/duration;
//main00.progBar.progBar.width = amountLoaded*218;
if(stopScrub==0){
main00.progBar.scrubber.x = audioR0.time/duration*main00.progBar.progBar.width;
//main00.progBar.scrubber.x = percent;
//seconds//getmetadata
main00.progBar.progBar.setProgress(audioR0.time,duration);
percent = int(main00.progBar.progBar.percentComplete);
if(percent ==100){
main00.progBar.progBar.reset();
main00.progBar.scrubber.x=main00.progBar.progBar.x;
private function Mp3Tim(e:TimerEvent){
if(oneTime1 ==0){
//dur total number of segments
var dur=Math.ceil(soundFactory.length/1000);//number of segments
trace("duration = "+dur);
inc = 1;
oneTime1=1;
inc = (inc++)+1.114;
trace(inc);
dur=Math.ceil(soundFactory.length/1000);//number of segments
progBar.progBar.setProgress(inc,dur);
//the end of MP3 is delayed by 5 seconds to allow for slight changes multiple mp3 length .
if(inc >= dur+5){
Mp3Fin();
function CompleteHandler(e:Event):void {
//oneTime0=0;
progBar.progBar.setProgress(100,100);
function Mp3Fin():void {
mp3Tim.stop();
mp3Tim.reset();
mp3Tim.removeEventListener(TimerEvent.TIMER,Mp3Tim);
dispatchEvent(new Event("TYPE_AUDIOSTOP"));
oneTime0=0;
progBar.progBar.setProgress(100,100);
oneTime1=0;
private function SetListeners():void {
main00.play_btn.enabled = true;
main00.pause_btn.enabled= true;
main00.progBar.scrubber.addEventListener(MouseEvent.MOUSE_DOWN, thumbDown,false,0,true);
main00.progBar.scrubber.enabled=true;
main00.stage.addEventListener(MouseEvent.MOUSE_UP, thumbUp,false,0,true);
main00.track0.volThumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbDown1,false,0,true);
main00.track0.volThumb.buttonMode=true;
main00.track0.volThumb.enabled=true;
main00.stage.addEventListener(MouseEvent.MOUSE_UP, thumbUp1,false,0,true);
addEventListener(ScrollBarEvent.VALUE_CHANGED, sbChange,false,0,true);
main00.rw_btn.addEventListener(MouseEvent.CLICK,Rewind,false,0,true);
main00.rw_btn.buttonMode=true;
main00.rw_btn.enabled=true;
main00.ff_btn.addEventListener(MouseEvent.CLICK,FastFD,false,0,true);
main00.ff_btn.buttonMode=true;
main00.ff_btn.enabled=true;
private function RemoveListeners():void {
main00.progBar.scrubber.removeEventListener(MouseEvent.MOUSE_DOWN, thumbDown);
main00.progBar.scrubber.enabled=false;
main00.stage.removeEventListener(MouseEvent.MOUSE_UP, thumbUp);
main00.track0.volThumb.removeEventListener(MouseEvent.MOUSE_DOWN, thumbDown1);
main00.track0.volThumb.enabled=false;
main00.stage.removeEventListener(MouseEvent.MOUSE_UP, thumbUp1);
removeEventListener(ScrollBarEvent.VALUE_CHANGED, sbChange);
main00.rw_btn.removeEventListener(MouseEvent.CLICK,Rewind);
main00.rw_btn.enabled=false;
main00.ff_btn.removeEventListener(MouseEvent.CLICK,FastFD);
main00.ff_btn.enabled=false;
private function DetectEnd(e:NetStatusEvent=null):void {
//detect end of audio/video file
trace(e.info.code);
if(e.info.code=="NetStream.Play.Start"){
vol=vol;
tim0.start();
if (e.info.code == "NetStream.Buffer.Full") {
removeEventListener(Event.ENTER_FRAME,FlashTastic);
tim0.stop();
SetListeners();
if (e.info.code == "NetStream.Play.Stop") {
audioTime0=0;
main00.play_btn.x =main00.pause_btn.x;
main00.play_btn.y =main00.pause_btn.y;
main00.pause_btn.x=main00.play_btn.x;
main00.pause_btn.y=2800;
if (percent < 100) {
main00.progBar.progBar.reset();
percent = int(main00.progBar.progBar.percentComplete);
main00.progBar.scrubber.x = percent;
RemoveListeners();
main00.call0.removeEventListener("TYPE_TIMER",ChangeHandler);
//dispatchEvent(new Event("TYPE_AUDIOSTOP"));
if(e.info.code=="NetStream.Buffer.Empty"){
main00.progBar.progBar.reset();
main00.progBar.scrubber.x = 0;
step1=0;
private function countBuff(e:TimerEvent):void{
addEventListener(Event.ENTER_FRAME,FlashTastic,false,0,true);
private function SetAudio(btnID) {
var determine = e.num0[0].toString().search(".mp3");
if (determine != -1) {
//play mp3
var url=e.num0[0].toString();
request=new URLRequest(url);
soundFactory=new Sound ;
soundFactory.load(request);
sFX=soundFactory.play();
mp3Tim=new Timer(1000,0);
mp3Tim.addEventListener(TimerEvent.TIMER,Mp3Tim,false,0,true);
mp3Tim.start();
main00.call0.addEventListener("TYPE_TIMER",ChangeHandler,false,0,true);
mp3ID=1;
} else {
//play flv
mp3ID=0;
if(btnID==0){
if(main00.uniqueID!=null){
trace("audio audio");
main00.call0.addEventListener("TYPE_TIMER",ChangeHandler,false,0,true);
audioR0.play(main00.uniqueID);
customClient0 = {onMetaData:metaDataHandler};
audioR0.client= customClient0;
video0.attachNetStream(audioR0);
video0.x=main00.stage.stageWidth/2-video0.width/2;
video0.y=6;
addChild(video0);
removeEventListener(Event.ENTER_FRAME,FlashTastic);
}else{
addEventListener(Event.ENTER_FRAME,FlashTastic,false,0,true);
}else if(btnID==1){
removeEventListener(Event.ENTER_FRAME,FlashTastic);
tim0.removeEventListener(TimerEvent.TIMER,countBuff);
audioR0.togglePause();
else {
trace("ok"+e.num0[0]);
main00.call0.addEventListener("TYPE_TIMER",ChangeHandler,false,0,true);
customClient0 = {onMetaData:metaDataHandler};
audioR0.play(e.num0[0].toString());
audioR0.client= customClient0;
video0.attachNetStream(audioR0);
video0.x=186;
video0.y=245;
addChild(video0);
private function RecAudio(e:RecordAudio) {
var recID = new Date().time;
audioS0.attachAudio(mic0);
audioS0.publish(recID.toString(),"live");
main00.nc1.call("RecordAudio",null,userName00,recID.toString());
class CustomClient0 {
public function onMetaData(info:Object):void {
//trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
public function onCuePoint(info:Object):void {
//trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
public function onPlayStatus(info:Object):void {
//trace("onPlayStatus");
class CustomClient1 {
//trace("info");
public function onMetaData(info:Object):void {
//trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
public function onCuePoint(info:Object):void {
//trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
public function onPlayStatus(info:Object):void {
//trace("onPlayStatus"); -
How do i make a single connection to handle video, audio and chat
I'm developing an application and i want to make one single connection for video(netstream) and chat(sharedObject).
I have one connection for each but i have limited connection availeble in the server so i need to make a single connection to handle the video net stream and chat sharedObject.
I use this urls to connect:
private var serverWebcamURL:String = "rtmp://myserverIP/live";
private var serverChatURL:String = "rtmp://myserverIP/multicast/chat";
What do i have to do to make this work?
Thank You,
Just-MELOL...thanks QTK.
In front of my face! -
F4v in IE 7 fails - no metadata?
Hey all -
I'm having trouble with my new player in IE 7 (it works great in all other browsers, of course).
It seems that in IE 7, it is waiting until the full file downloads in order to get metadata; what this means is that the player itself is not built until after the video fully loads, since it's pulling width and height from the file.
However, f4vs don't seem to work at all. The video player is never built, I'm assuming because no metadata is being sent, and the player is built after the metadata is recieved. But I don't know if that's it - there are no errors thrown in the debugging flash player distribution.
Here's a link to the player:
http://www.tribepictures.com/player/player.html?pageVideo=Daniel_Patents_04_06_09.f4vHere it is - the pertinent code is at the top and at the bottom, the rest is fluff and works fine. Basically, it's instructed to create the netstream. Then, once the netstream has loaded the file, to pull the metadata. From there, it can build the player and start playing.
package resources{
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.LoaderInfo;
import flash.display.Stage;
import flash.display.Shape;
import flash.geom.Rectangle;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.display.StageDisplayState;
public class videoPlayer extends Sprite {
private var ncFLVConnection:NetConnection = new NetConnection();
private var nsVideo:NetStream;
private var videoTitle:String;
private var videoStage:Video;
private var videoHeight:int;
private var videoWidth:int;
private var videoURL:String;
private var AutoPlay:Boolean;
private var totalHeight:int;
private var isPaused:Boolean;
private var client:Object;
private var metaDataLoaded:int;
private var sliderLength:Number;
private var sliderIncrement:Number;
private var theLastTime:Number;
private var videoLength:Number;
private var sliderStartPoint:Number;
private var fullyDownloaded:Boolean;
private var pausedTime:Number;
private var seeked:Boolean;
private var startedYet:Boolean;
public var playBtn:MovieClip;
public var fullscreenmc_mc:MovieClip;
public var current_Time:TextField;
public var total_Time:TextField;
public var videoTitle_txt:TextField;
public var orange:Shape;
public var slider:Sprite;
public var sliderShape:Shape;
public var sliderBar:Sprite;
public var sliderBarShape:Shape;
public var sliderBounds:Rectangle;
public var downloadCompleted:Sprite;
public var downloadCompletedShape:Shape;
public var videoStageClicker:Sprite;
public var videoStageClickerShape:Shape;
public var loading_mc:MovieClip;
public function videoPlayer():void {
trace("videoPlayer loaded");
metaDataLoaded=0;
theLastTime=0;
fullyDownloaded=false;
pausedTime=0;
seeked=false;
startedYet=false;
//FINAL CODE
videoURL=root.loaderInfo.parameters.pageVideo;
AutoPlay=root.loaderInfo.parameters.AutoPlay;
videoTitle=root.loaderInfo.parameters.videoTitle;
//FOR TESTING, COMMENT OUT OTHERWISE!!!!!!
//AutoPlay=false;
//videoURL="personal.flv";
//videoTitle="test";
videoTitle_txt.text=videoTitle;
if (videoTitle_txt.text=="") {
videoTitle_txt.text="Tribe Pictures"
setupANetStream();
centerThatShit(videoTitle_txt);
videoTitle_txt.y=stage.stageHeight-30;
private function setupANetStream():Boolean {
trace("Starting a Net Stream");
ncFLVConnection.connect(null);
nsVideo=new NetStream(ncFLVConnection);
nsVideo.client = new Object();
client = new Object();
nsVideo.client=client;
client.onMetaData=nsMetaDataCallback;
nsVideo.play(videoURL);
nsVideo.togglePause();
return (true);
private function afterMetaData():void {
trace("Added to stage");
loading_mc.stop();
loading_mc.alpha=0;
addChild(videoStage);
centerThatShit(videoStage);
videoStage.attachNetStream(nsVideo);
buildControls();
orangeOutlineMaker();
buildTheVideoClicker();
if (AutoPlay==true) {
nsVideo.resume();
isPaused=false;
playBtn.gotoAndStop(3);
startedYet=true;
trace("Autoplaying");
} else {
isPaused=true;
playBtn.gotoAndStop(1);
trace("Not autoplaying");
playBtn.addEventListener(MouseEvent.MOUSE_DOWN, pauseIt);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, pauseItKey);
private function buildTheVideoClicker():void {
videoStageClicker = new Sprite();
videoStageClickerShape = new Shape();
videoStageClickerShape.graphics.beginFill(0xFFFFFF,0);
trace(videoStage.width+","+videoStage.height);
videoStageClickerShape.graphics.lineTo(videoStage.width,0);
videoStageClickerShape.graphics.lineTo(videoStage.width,videoStage.height);
videoStageClickerShape.graphics.lineTo(0,videoStage.height);
videoStageClickerShape.graphics.lineTo(0,0);
videoStageClicker.addChild(videoStageClickerShape);
addChild(videoStageClicker);
videoStageClicker.x=videoStage.x;
videoStageClicker.y=videoStage.y;
videoStageClicker.addChild(fullscreenmc_mc);
fullscreenmc_mc.x=0+videoWidth-20;
fullscreenmc_mc.y=0+videoHeight-20;
videoStageClicker.addEventListener(MouseEvent.MOUSE_DOWN, fullScreen);
videoStageClicker.addEventListener(MouseEvent.MOUSE_OVER, fullScreenIcon);
videoStageClicker.addEventListener(MouseEvent.MOUSE_OUT, fullScreenIconOut);
trace("Video Clicker created");
private function centerThatShit(obj:Object):Boolean {
obj.y = (obj.stage.stageHeight - obj.height)/2;
obj.x = (obj.stage.stageWidth - obj.width)/2;
trace(obj.name+" centered!");
return (true);
private function buildControls() {
totalHeight=videoHeight+playBtn.height+5;
playBtn.x=videoStage.x;
playBtn.y=videoStage.y+videoHeight+5;
total_Time.x=videoStage.x+videoWidth-60;
total_Time.y=videoStage.y+videoHeight+6.5;
current_Time.x=videoStage.x+videoWidth-120;
current_Time.y=videoStage.y+videoHeight+6.5;
makeDownloadedBar();
makeTheSlider();
downloadCompleted.x=slider.x;
downloadCompleted.y=slider.y;
trace("Controls built.");
return (true);
private function makeDownloadedBar():void {
downloadCompleted = new Sprite();
downloadCompletedShape = new Shape();
downloadCompletedShape.graphics.beginFill(0xFFFFFF,.5);
downloadCompletedShape.graphics.lineTo(1,0);
downloadCompletedShape.graphics.lineTo(1,5);
downloadCompletedShape.graphics.lineTo(0,5);
downloadCompletedShape.graphics.lineTo(0,0);
downloadCompleted.addChild(downloadCompletedShape);
addChild(downloadCompleted);
private function makeTheSlider() {
slider = new Sprite();
sliderShape = new Shape();
sliderLength=videoWidth-170;
trace("Slider Length="+sliderLength);
sliderShape.graphics.lineStyle(1,0xFFFFFF,1,true);
sliderShape.graphics.lineTo(sliderLength,0);
sliderShape.graphics.lineTo(sliderLength,5);
sliderShape.graphics.lineTo(0,5);
sliderShape.graphics.lineTo(0,0);
slider.addChild(sliderShape);
addChild(slider);
slider.x=videoStage.x+40;
slider.y=playBtn.y+12.5;
sliderBar = new Sprite();
sliderBarShape = new Shape();
sliderBarShape.graphics.beginFill(0xFFFFFF,.8);
sliderBarShape.graphics.lineStyle(2,0xFFFFFF,.8,true);
sliderBarShape.graphics.lineTo(5,0);
sliderBarShape.graphics.lineTo(5,20);
sliderBarShape.graphics.lineTo(0,20);
sliderBarShape.graphics.lineTo(0,0);
sliderBar.addChild(sliderBarShape);
sliderBar.x=slider.x;
sliderBar.y=playBtn.y+5;
sliderIncrement=((sliderLength-4)/videoLength);
sliderBounds=new Rectangle(sliderBar.x,sliderBar.y+1,sliderLength,.1);
sliderBar.addEventListener(MouseEvent.MOUSE_DOWN, seekIt);
addChild(sliderBar);
private function orangeOutlineMaker() {
var orange:Shape = new Shape();
orange.graphics.lineStyle(2,0xD47200,1,true);
orange.graphics.lineTo(videoWidth+25,0);
orange.graphics.lineTo(videoWidth+25,totalHeight+25);
orange.graphics.lineTo(0,totalHeight+25);
orange.graphics.lineTo(0,0);
addChild(orange);
orange.y=videoStage.y-12.5;
orange.x=videoStage.x-12.5;
return (true);
private function pauseItKey(evt:KeyboardEvent) {
if (evt.charCode==32) {
switch (isPaused) {
case true :
nsVideo.togglePause();
isPaused=false;
playBtn.play();
break;
case false :
nsVideo.togglePause();
trace(nsVideo.time);
pausedTime=nsVideo.time;
trace(pausedTime);
isPaused=true;
playBtn.play();
break;
private function pauseIt(evt:Event) {
switch (isPaused) {
case true :
nsVideo.togglePause();
isPaused=false;
playBtn.play();
break;
case false :
nsVideo.togglePause();
trace(nsVideo.time);
pausedTime=nsVideo.time;
trace(pausedTime);
isPaused=true;
playBtn.play();
break;
private function fullScreenIcon(evt:MouseEvent) {
trace("Mouse Screen Over");
fullscreenmc_mc.play();
fullscreenmc_mc.alpha=1;
private function fullScreenIconOut(evt:MouseEvent) {
trace("Mouse Screen Out");
fullscreenmc_mc.gotoAndStop(1);
fullscreenmc_mc.alpha=0;
private function seekIt(evt:MouseEvent) {
stage.addEventListener(MouseEvent.MOUSE_UP, playIt);
seeked=true;
nsVideo.pause();
sliderStartPoint=sliderBar.x;
evt.target.startDrag(false,sliderBounds);
private function playIt(evt:MouseEvent) {
trace("MouseUp");
if (isPaused==false) {
seeked=false;
sliderBar.stopDrag();
sliderBar.x=nsVideo.time*sliderIncrement+slider.x;
nsVideo.togglePause();
} else {
seeked=false;
sliderBar.stopDrag();
sliderBar.x=nsVideo.time*sliderIncrement+slider.x;
stage.removeEventListener(MouseEvent.MOUSE_UP, playIt);
private function timeCodeIt(currentTime:Number):String {
var theMinutes:int = new int();
var theSeconds:int = new int();
theMinutes=int(currentTime/60);
theSeconds=int(currentTime%60);
if (theMinutes<10&&theSeconds<10) {
return ("0"+theMinutes+":0"+theSeconds);
} else if (theMinutes>=10 && theSeconds<10) {
return (theMinutes+":0"+theSeconds);
} else if (theMinutes<10 && theSeconds>=10) {
return ("0"+theMinutes+":"+theSeconds);
} else {
return (theMinutes+":"+theSeconds);
private function getTheTime():Number {
var currentVidTime:Number = new Number();
currentVidTime=nsVideo.time;
return (currentVidTime);
private function fullScreen(event:Event):void {
trace("full screen clicked");
if (stage.displayState==StageDisplayState.FULL_SCREEN) {
stage.displayState=StageDisplayState.NORMAL;
} else if (stage.displayState == StageDisplayState.NORMAL) {
stage.displayState=StageDisplayState.FULL_SCREEN;
fullscreenmc_mc.alpha=0;
private function onEnterFrame(evt:Event) {
if (isPaused==false&&seeked==false) {
var theTime:Number = new Number();
theTime=getTheTime();
current_Time.text=timeCodeIt(theTime);
if (int(theTime)>int(theLastTime)) {
sliderBar.x+=sliderIncrement;
trace((sliderBar.x-slider.x)/sliderIncrement);
theLastTime=theTime;
} else if (isPaused==true && seeked==true) {
if (sliderBar.x!=sliderStartPoint) {
var thePercentage:Number = new Number();
thePercentage=(sliderBar.x-slider.x)/sliderLength;
current_Time.text=timeCodeIt(thePercentage*videoLength);
nsVideo.seek(thePercentage*videoLength);
} else if (isPaused==false && seeked==true) {
if (sliderBar.x!=sliderStartPoint) {
thePercentage=(sliderBar.x-slider.x)/sliderLength;
current_Time.text=timeCodeIt(thePercentage*videoLength);
nsVideo.seek(thePercentage*videoLength);
if (fullyDownloaded==false) {
downloadCompleted.width=(nsVideo.bytesLoaded/nsVideo.bytesTotal)*sliderLength;
sliderBounds.width=downloadCompleted.width;
if (sliderBar.x>=(slider.x+sliderLength)) {
sliderBar.x=slider.x+sliderLength;
private function nsMetaDataCallback(mData:Object):void {
if (metaDataLoaded==0) {
videoHeight=mData.height;
videoWidth=mData.width;
videoLength=mData.duration;
trace("metaData loaded, height="+videoHeight+", width="+videoWidth);
videoStage=new Video(videoWidth,videoHeight);
videoStage.name="Player";
total_Time.text=timeCodeIt(mData.duration);
trace("Creating a "+videoWidth+"x"+videoHeight+" player for "+videoURL);
current_Time.text="00:00";
//recurrsion prevention
metaDataLoaded+=1;
afterMetaData(); -
I'm trying to create a spectrum display for microphone
input/playback in ActionScript 3 but can't seem to get it to work.
I understand that the SoundMixer class does not control dynamically
created Sound objects, but surely there is a way around this! Has
anyone done this or have any ideas on how to approach this problem?
I can record and playback the sound using rtmp and net streams just
fine, but can't manage to create any form of sound spectrum from
this sound. I'm at a loss here...
Any suggestions would be appreciated!!I have created the variable and set to 0. However i'm not sure how to get it to add one when an item on the stage is clicked on?? What would this look like?? Any help would be great
Thanks in anticipation
Maybe you are looking for
-
Error while assigning security.
I am trying to make a user able to feed data into forms. I have been able to do that for a couple of forms but this one form is particularly giving me trouble. Everytime I try to use the form with planner priviliges, it throws an error - "*You are tr
-
Materialized View with Joins and Possibilities of Partitioning
Hi, We have a materialized view which has a data to query around 12 gb. The query goes some thing like this. Select a.c1,a.c2,b.c1,b.c2,c.c1,c.c2 from a,b,c where a.c1=b.c1 --and the where condition goes on... --i.e Basically joining 3 diff
-
Elements 10 Organizer does not work anymore
I received the message "Elements Organizer has stopped working" , after I opened for pictures created a new "Tag". Then PSE 10 plunged. This is done regularly now, when I start the Organizer of PSE 10. The editor works fine. My catalog contains aroun
-
How can I get a Pages document embedded into an email? (so that the recipient sees it immediately and does NOT have to open a PDF). Although I know a PDF is universal and would allow anyone (mac or not) to open, read and see my business newsletter, I
-
IPhoto Books... no pix on page to old project
Greetings - Have recently upgraded to iLife'11 and iPhoto 9.1.5. All pictures, events, albums, books, etc seem to be present. however previously made books show no photos placed on pages. Again, entire cache of pix for project remain on side to pick