Tengo un componente de reproducción de videos que lee de un xml. Utiliza un buffer. El problema que tengo es que se inicia en reproducción el video y yo quiero que cargue el buffer sin reproducir, que lo haga al aretar el boton de play. Les dejo el código.
Código:
Gracias por todo. //--------------------- Variables ------------------------// var nDownload:Number; var nPlayback:Number; var totalLength:Number; //total length(in secs) of movie playing var currentVideo:Number = 0; var totalVideos:Number; var scrubSpeed:Number = 5; //scrubbing speed when scrub buttons are pressed var paused:Boolean = false; //whether movie is paused or not var movieEnded:Boolean; var aVideos:Array = new Array(); // ---------------------- Load XML -----------------------// var videoXML:XML = new XML(); videoXML.ignoreWhite = true; var rootNode:XMLNode; var currNode:XMLNode; videoXML.onLoad = function():Void { rootNode = this.firstChild; for (var i:Number = 0; i<rootNode.childNodes.length; i++) { currNode = rootNode.childNodes[i]; aVideos.push({source:currNode.attributes["source"], title:currNode.attributes["title"], author:currNode.attributes["author"], year:currNode.attributes["year"]}); } totalVideos = aVideos.length; populateList(); }; videoXML.load("videos.xml"); //------------------------------List Box and Fields-------------------------------// var cList:Object = mcTab.mcPlaylist.cList; cList.vScrollPolicy = "auto"; var listListener:Object = new Object(); cList.addEventListener("change", listListener); listListener.change = function() { var index:Number = cList.selectedIndex; currentVideo = index; populateFields(index); playVideo(aVideos[index].source); }; function populateList():Void { for (var i:Number = 0; i<totalVideos; i++) { cList.addItem(aVideos[i].title); } cList.selectedIndex = currentVideo; populateFields(0); playVideo(aVideos[0].source); } function populateFields(index:Number):Void { tTitle.text = aVideos[index].title; tYear.text = aVideos[index].year; tAuthor.text = aVideos[index].author; } // ---------------- NetConnection and NetStream Objects --------------// var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.setBufferTime(5); mcVideo.oVideo.attachVideo(ns); function playVideo(video:String):Void { movieEnded = false; mcBuffer._visible = true; clearIntervals(); ns.play(video); nDownload = setInterval(downloadProgress, 1000/24); nPlayback = setInterval(playback, 1000/24); } //-----------------------------------onStatus Event Handlers -------------------// ns.onStatus = function(oInfo:Object):Void { trace(oInfo.code); if (oInfo.code == "NetStream.Play.Start") { //trace("movie has started"); } if (oInfo.code == "NetStream.Play.Stop") { //trace("movie ended"); clearInterval(nPlayback); movieEnded = true; mcBuffer._visible = false; } if (oInfo.code == "NetStream.Play.StreamNotFound") { //trace("movie cannot be found"); } if (oInfo.code == "NetStream.Buffer.Full") { mcBuffer._visible = false; } if (oInfo.code == "NetStream.Buffer.Empty" && !movieEnded) { //trace("buffer empty"); mcBuffer._visible = true; //buffer is empty now we need to check if remaining movie time is less buffer requirement var timeRemaining:Number = totalLength-ns.time; if (int(totalLength)>Math.ceil(ns.time)) { ns.setBufferTime(timeRemaining); } else { // go to next movie mcControls.mcNext.onRelease() } } }; ns["onMetaData"] = function (oInfo:Object):Void { totalLength = oInfo.duration; }; //----------------------------- Download Progress --------------------// var nBytesLoaded:Number; var nBytesTotal:Number; var percentageLoaded:Number; function downloadProgress():Void { nBytesLoaded = ns.bytesLoaded; nBytesTotal = ns.bytesTotal; percentageLoaded = nBytesLoaded/nBytesTotal*100; mcProgressBar.mcDownloadBar._xscale = percentageLoaded; if (percentageLoaded == 100) { clearInterval(nDownload); } } //----------------------------------------PLAYBACk PROGRESS ----------------------------------// var percentPlayed:Number; function playback():Void { percentPlayed = ns.time/totalLength*100; tTime.text = (totalLength) ? convertToTime(ns.time, true)+" / "+convertToTime(totalLength) : convertToTime(ns.time, true); mcProgressBar.mcPlayhead._x = percentPlayed*1.5; } /** * Helper function to display time based on seconds * @param secs:Numbers, seconds to convert * @return String, formated time */ function convertToTime(secs:Number, round:Boolean):String { if(round) secs = Math.ceil(secs) var min = int(secs/60); if (min<10) { min = "0"+min; } else if (min>59) { //add hours if neccesary min = min%60; var hours = int(min/60); if (hours<10) { hours = "0"+hours; } if (min<10) { min = "0"+min; } } var segs = int(((secs%60)*100)/100); if (segs<10) { segs = "0"+segs; } return (hours) ? hours+":"+min+":"+segs : min+":"+segs; } //-------------------------- Playback controls and Scrub-------------------// mcControls.mcPlay.onRelease = function():Void { if (paused) { ns.pause(); paused = !paused; } }; mcControls.mcNext.onRelease = function():Void { currentVideo++; if (currentVideo == totalVideos) { currentVideo = 0; } cList.selectedIndex = currentVideo; populateFields(currentVideo); playVideo(aVideos[currentVideo].source); }; mcControls.mcPrevious.onRelease = function():Void { currentVideo--; if (currentVideo<0) { currentVideo = totalVideos-1; } cList.selectedIndex = currentVideo; populateFields(currentVideo); playVideo(aVideos[currentVideo].source); }; mcControls.mcForward.onPress = function():Void { this.onEnterFrame = function():Void { ns.seek(ns.time+scrubSpeed); }; }; mcControls.mcForward.onRelease = function():Void { delete this.onEnterFrame; }; mcControls.mcRewind.onPress = function():Void { this.onEnterFrame = function():Void { ns.seek(ns.time-scrubSpeed); }; }; mcControls.mcRewind.onRelease = function():Void { delete this.onEnterFrame; }; mcControls.mcPause.onRelease = function():Void { ns.pause(); paused = !paused; }; mcProgressBar.mcPlayhead.onPress = function():Void { clearInterval(nPlayback); this.startDrag(true, 0, this._y, mcProgressBar.mcDownloadBar._xscale*1.5, this._y); this.onEnterFrame = function():Void { ns.seek(this._x*totalLength/150); }; }; mcProgressBar.mcPlayhead.onRelease = function():Void { this.stopDrag(); delete this.onEnterFrame; nPlayback = setInterval(playback, 1000/24); }; mcProgressBar.mcPlayhead.onReleaseOutside = mcProgressBar.mcPlayhead.onRelease; //-------------------------- MUTE BUTTON ----------------------------------------------------// var flvSound_mc:MovieClip = _root.createEmptyMovieClip("flvSound_mc", _root.getNextHighestDepth()); flvSound_mc.attachAudio(ns); var soundHolder_sound:Sound = new Sound(flvSound_mc); soundHolder_sound.setVolume(100); mcMute.onRelease = function():Void { if (soundHolder_sound.getVolume() == 100) { soundHolder_sound.setVolume(0); mcMute.gotoAndStop(2); } else { soundHolder_sound.setVolume(100); mcMute.gotoAndStop(1); } }; //-----------------------------------TOOL TIPs For controls--------------------------------------------// mcTip.tText.autoSize = "left"; mcControls.mcPlay.onRollOver = toolTip; mcControls.mcForward.onRollOver = toolTip; mcControls.mcRewind.onRollOver = toolTip; mcControls.mcNext.onRollOver = toolTip; mcControls.mcPrevious.onRollOver = toolTip; mcControls.mcPause.onRollOver = toolTip; mcControls.mcPlay.onRollOut = resetTip; mcControls.mcRewind.onRollOut = resetTip; mcControls.mcForward.onRollOut = resetTip; mcControls.mcNext.onRollOut = resetTip; mcControls.mcPrevious.onRollOut = resetTip; mcControls.mcPause.onRollOut = resetTip; mcControls.mcPlay.onRollOut = resetTip; function toolTip():Void { switch (this) { case _level0.mcControls.mcNext : mcTip.tTip.text = "next"; break; case _level0.mcControls.mcPrevious : mcTip.tTip.text = "previous"; break; case _level0.mcControls.mcForward : mcTip.tTip.text = "forward"; break; case _level0.mcControls.mcRewind : mcTip.tTip.text = "rewind"; break; case _level0.mcControls.mcPlay : mcTip.tTip.text = "play"; break; case _level0.mcControls.mcPause : mcTip.tTip.text = "pause"; break; } this.onEnterFrame = function():Void { mcTip._x = _xmouse; }; } function resetTip():Void { delete this.onEnterFrame; mcTip.tTip.text = ""; } //-------------------------PLAYLIST TAB FUNCTIONALITY ----// mcTab.mcHit.onRollOver = function():Void { mcTab.play(); }; //-----------------------------clear intervals ---------------------// function clearIntervals():Void { clearInterval(nDownload); clearInterval(nPlayback); }