2011-01-02 4 views
1

최종 결과에 훨씬 가까워졌습니다. 감사합니다.XML로 선택한 비디오에 비디오 컨트롤을 추가하는 데 어려움이 있습니다. comboBox

두 가지 남은 문제는 이전과 다음에 충돌 할 때 콤보 상자에 표시된 이름이 동기화되지 않는 경우가 있습니다.

또한 비디오 스크러버가 작동하지 않는 것 같습니다.

See it in action

가 DL 소스 파일 (이 링크를 게시하는 포인트가 부족하지 않음)에 위의 링크에 index.zip 추가

import fl.data.DataProvider; 
import flash.net.NetStream; 

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
var ns:NetStream = new NetStream(nc); 
var videosXML:XML = new XML(); 
var loader:URLLoader = new URLLoader(); 
var request:URLRequest = new URLRequest("xml/videos.xml"); 
var videos:Array = new Array({label:"Select a Video",data:""}); 
var client:Object = new Object(); 
var _currentVideoId:int = 0; 
var _isPlaying:Boolean = false; 
var stream:NetStream; 
var videoURL:String; 
var connection:NetConnection; 
var videoInterval = setInterval(videoStatus,100); 
var amountLoaded:Number; 
var meta:Object = new Object(); 
var duration:Number; 

// load the XML 

loader.addEventListener(Event.COMPLETE,loaderOnComplete); 
loader.load(request); 

function loaderOnComplete(event:Event):void 
{ 
    videosXML = new XML(event.target.data); 
    for each (var video:XML in videosXML.video) 
    { 
     videos.push({label:video.name.toString(),data:video.url.toString()}); 
    } 
    moviesCB.dataProvider = new DataProvider(videos); 

    // load the first video 
    initialize_video_player(); 
} 

function initialize_video_player():void 
{ 
    // loads first video in list 
    videoURL = videosXML.video[0].url; 
    connection = new NetConnection(); 
    connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
    connection.connect(null); 
    moviesCB.selectedIndex = _currentVideoId++; 
} 

function playerControls():void 
{ 
    pauseBtn.addEventListener(MouseEvent.CLICK, PauseVideo, false, 0, true); 
    playBtn.addEventListener(MouseEvent.CLICK, PlayVideo, false, 0, true); 
    nextBtn.addEventListener(MouseEvent.CLICK, NextVideo); 
    previousBtn.addEventListener(MouseEvent.CLICK, PreviousVideo); 
} 

function PauseVideo($e:MouseEvent):void 
{ 
    stream.togglePause(); 
} 

function PlayVideo($e:MouseEvent):void 
{ 
    stream.resume(); 
} 

function netStatusHandler(event:NetStatusEvent):void 
{ 
    switch (event.info.code) 
    { 
     case "NetConnection.Connect.Success" : 
     connectStream(); 
     break; 
     case "NetStream.Play.StreamNotFound" : 
     trace("Unable to locate video: " + videoURL); 
     break; 
    } 
} 

function connectStream():void 
{ 
    stream = new NetStream(connection); 
    stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
    stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); 
    theVideo.attachNetStream(stream); 
    playerControls(); 
} 

function securityErrorHandler(event:SecurityErrorEvent):void 
{ 
    trace("securityErrorHandler: " + event); 
} 

function asyncErrorHandler(event:AsyncErrorEvent):void 
{ 
    // ignore AsyncErrorEvent events. 
} 

moviesCB.addEventListener(Event.CHANGE, changeHandler); 

function changeHandler(event:Event):void 
{ 
    if (ComboBox(event.target).selectedItem.data != "") 
    { 
     stream.play(ComboBox(event.target).selectedItem.data); 
     _currentVideoId=moviesCB.selectedIndex; 
     } 
} 

function NextVideo(e:MouseEvent):void 
{ 
    if (_currentVideoId<videosXML.video.length()-1) 
{ 
    _currentVideoId++; 
    loadNewVideo(); 
} 
else 
{ 
    // do nothing, already at maximum videoId 
} 
} 

function PreviousVideo(e:MouseEvent):void 
{ 
    trace ("previous video with current video of "+_currentVideoId); 
    if (_currentVideoId>0) 
    { 
     _currentVideoId--; 
      loadNewVideo(); 
    } 
    else 
    { 
    // do nothing, already at 0 
    } 
} 

function loadNewVideo():void 
{ 
// because it's not a mouse action, tell the stream what to play 
stream.play(videosXML.video[_currentVideoId].url.toString()); 
// and update the selectedIndex of the ComboBox 
moviesCB.selectedIndex=_currentVideoId; 
} 

function videoStatus() 
{ 
amountLoaded = ns.bytesLoaded/ns.bytesTotal; 
videoLoader.loadBar._width = amountLoaded * 640; 
} 

meta.onMetaData = function(meta:Object) 
{ 
trace(meta.duration); 
} 

ns.client = meta; 

/////// 원래 포스트////////////////////

안녕하세요, 플래시를 만진 지 몇 년이 지났습니다. 아마도 나는 뭔가를 간과하고있을 것입니다. 누구나 코드를보고 멋진 코드를 제안 할 수 있다면.

무슨 일이 일어나고 있는지, XML 파일에서 채워진 비디오를 선택하고 재생합니다.

일시 중지/재생, 정지, 앞으로 및 뒤로 기능을 추가하려고 시도했는데 작동하도록 설정 한 후에도 비디오 슬라이더 (슬라이더)를 추가하고 이전/다음 버튼을 사용하여 이전으로 이동합니다./xml 파일에 나열된 다음 동영상

현재 스테이지에 playButton이라는 컴포넌트 버튼이 있습니다.이 버튼은 일시 중지/재생 기능에 사용하려고합니다. 아래는 내 코드이며, 플레이어 컨트롤은 맨 아래에 있습니다. 감사.

import fl.data.DataProvider; 

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
var ns:NetStream = new NetStream(nc); 
var videosXML:XML = new XML(); 
var loader:URLLoader = new URLLoader(); 
var request:URLRequest= new URLRequest("xml/videos.xml"); 
var videos:Array = new Array({label:"Select a Video",data:""}); 
var client:Object = new Object(); 

theVideo.attachNetStream(ns); 
ns.client = client; 
loader.addEventListener(Event.COMPLETE,loaderOnComplete); 
loader.load (request); 

function loaderOnComplete(event:Event):void{ 
    videosXML = new XML(event.target.data); 
    for each (var video:XML in videosXML.video){ 
     videos.push({label:video.name.toString(),data:video.url.toString()}); 
    } 
    moviesCB.dataProvider = new DataProvider(videos); 
} 

moviesCB.addEventListener(Event.CHANGE, changeHandler); 

function changeHandler(event:Event):void { 
    if(ComboBox(event.target).selectedItem.data != ""){ 
     ns.play(ComboBox(event.target).selectedItem.data); 
    } 
}; 

client.onMetaData = metadataHandler; 
function metadataHandler(md:Object):void{ 
} 

//player controls 
playButton.onRelease = function() { 
    ns.pause(); 
} 
+0

의 stream.bytesLoaded 아니? – redconservatory

+0

별도의 재생 및 일시 중지 단추가 있습니다.이를 통합하는 것이 합리적 일 것입니다. AS를 사용하여 레이블을 변경하는 것이 가능한지, 어떤 종류의 if 문을 추측하고 있습니까? – Chuck

답변

1

내 원래의 질문에 대한 답변은, stream.bytesTotal을 사용하고 있었고, 난 당신의 플레이 버튼 그렇지 않으면 첫 번째 시간을 작동하는 토글 수 있다고 생각 대신 ns.bytesTotal 및 ns.bytesLoaded

1

난 당신이 이렇게 할 생각

playButton.addEventListener(MouseEvent.CLICK, onTogglePlay); 

function onTogglePlay(e:MouseEvent):void { 
    ns.togglePause(); 
} 

당신은 정말 된 NetStatusEvent의 NC에 리스너를 넣고 연결이되면 NetStream을 만들어야합니다 (핸들러가 AS3에서 다른 클릭) 연결.

+1

고마워, 그 해결책의 일부로 끝났다. – Chuck

관련 문제