2009-09-01 3 views
0

Flash를 마지막으로 사용한 이래로 Actionscript 3을 배우는 것이 가장 좋았습니다. 그러나 [Flash Videoplayer tutorial] [1]을 통해 작업하고 있었고 정말 고심하고 있습니다. 내 자신의 필요에 맞게 레이아웃을 변경하십시오.Flash Actionscript 3.0 Videoplayer help

진행률 표시 줄을 13.9 픽셀 아래로 이동하고 오른쪽으로 55.8 픽셀 이동했습니다. 진행률 막대를 176.9 픽셀로 줄였습니다. 문제는 내가 55.8px로 오른쪽으로 점프하는 스크러버를 클릭 할 때입니다. 내가 어딘가에 scrubber가 55.8px에서 시작해야한다고 알 필요가 있지만, 매번 내가 더 많은 문제를 일으키는 것을 시도한다. 누군가 제 코드를 살펴보고 변경해야 할 것이 무엇인지 제안 해주십시오.

친절 감사,

매트

// ########################## 
// ############# 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; 
// url to flv file 
var strSource:String     = "hancock-tsr2_h480p.flv"; 
// timer for updating player (progress, volume...) 
var tmrDisplay:Timer; 

// ########################## 
// ############# FUNCTIONS 
// ########################## 

// sets up the player 
function initVideoPlayer():void { 
    // hide buttons 
    mcVideoControls.btnUnmute.visible = false; 
    mcVideoControls.btnPause.visible = false; 

    // set the progress/preload fill width to 1 
    mcVideoControls.mcProgressFill.mcFillgreen.width = 1; 
    mcVideoControls.mcProgressFill.mcFillGrey.width = 1; 

    // add global event listener when mouse is released 
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased); 

    // 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.btnMute.addEventListener(MouseEvent.CLICK, muteClicked); 
    mcVideoControls.btnUnmute.addEventListener(MouseEvent.CLICK, unmuteClicked); 
    mcVideoControls.mcVolumeScrubber.btnVolumeScrubber.addEventListener(MouseEvent.MOUSE_DOWN, volumeScrubberClicked); 
    mcVideoControls.mcProgressScrubber.btnProgressScrubber.addEventListener(MouseEvent.MOUSE_DOWN, progressScrubberClicked); 

    // 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 
    mcVideoControls.mcVolumeScrubber.x = (52 * DEFAULT_VOLUME) + 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 52; 
    setVolume(DEFAULT_VOLUME); 
} 

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(); 
    } 

    // show video display 
    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    = 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = 1; 
} 

function unmuteClicked(e:MouseEvent):void { 
    // set volume to last used value 
    setVolume(intLastVolume); 

    // update scrubber and fill position/width 
    mcVideoControls.mcVolumeScrubber.x = (53 * intLastVolume) + 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 
} 

function volumeScrubberClicked(e:MouseEvent):void { 
    // set volume scrub flag to true 
    bolVolumeScrub = true; 

    // start drag 
    mcVideoControls.mcVolumeScrubber.startDrag(false, new Rectangle(339.9, 14.1, 59.5, 0)); 
} 

function progressScrubberClicked(e:MouseEvent):void { 
    // set progress scrub flag to true 
    bolProgressScrub = true; 

    // start drag 
    mcVideoControls.mcProgressScrubber.startDrag (false, new Rectangle(55.8, 14.1, 176.9, 0)); 
} 

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.mcFillgreen.width = mcVideoControls.mcProgressScrubber.x + 5; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 

    // save the volume if it's greater than zero 
    if((mcVideoControls.mcVolumeScrubber.x - 341)/53 > 0) 
     intLastVolume = (mcVideoControls.mcVolumeScrubber.x - 341)/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/176.9)) 
    else 
     mcVideoControls.mcProgressScrubber.x = nsStream.time * 176.9/objInfo.duration + 55.8; 

    // 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.mcFillgreen.width = mcVideoControls.mcProgressScrubber.x - 55.8; 
    mcVideoControls.mcProgressFill.mcFillGrey.width = nsStream.bytesLoaded * 176.9/nsStream.bytesTotal; 

    // update volume and the green fill width when user is scrubbing 
    if(bolVolumeScrub) { 
     setVolume((mcVideoControls.mcVolumeScrubber.x - 341)/53); 
     mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 
    } 
} 

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 
    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 stop the player 
     case "NetStream.Play.Stop": 
      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; 
    } 
} 

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"; 
    } 
} 

// ########################## 
// ############# INIT PLAYER 
// ########################## 
initVideoPlayer(); 

답변

0

난 당신이 당신의 코드를 알아 내려고 노력하고 게으른 것, 그것에 대해 이동 방법을 이해하는 것이 확실하지 않다 :)하지만 난 당신이 주목 한 개인적으로 피하는 경향이있는 startDrag 함수를 사용하십시오. 리 brimelow 그가 주위에 방법을 설명 OOP 스크롤바에 대한 아주 좋은 튜토리얼을하고있다. 이것은 비디오와 관련이 없지만 MouseMove 이벤트를 등록 할 필요가있을 때마다이 기술을 사용했습니다. 어쨌든, 나는 정말로 당신의 '점핑'문제를 해결할 것이라고 생각합니다. 기본 아이디어는 가능한 오프셋을 고려하여 마우스 위치에 마우스 위치를 등록한 다음 마우스 이동 이벤트에 리스너를 추가하여 필요한 스크러버 정보를 업데이트하는 것입니다. ...

희망이 도움이됩니다!

점검 http://www.gotoandlearn.com/play?id=71

관련 문제