본문 바로가기

[플래시 액션 2.0] FLV 동영상 파일 제어를 위한 NetConnection 클래스에 대해서...

반응형

NetConnection 

NetConnection 클래스는 로컬 드라이브나 HTTP 주소로부터 스트리밍 FLV 파일을 재생할 수 있는 방법을 제공한다.
 
:: 생성자 요약

서명

설명

NetConnection()

NetStream 객체와 함께 사용하여 로컬 스트리밍 비디오(FLV) 파일을 재생할 수 있는 NetConnection 객체를 생성한다.

NetStream 객체와 함께 사용하여 로컬 스트리밍 비디오(FLV) 파일을 재생할 수 있는 NetConnection 객체를 생성한다.
NetConnection 객체를 만든 다음 NetConnection.connect()를 사용하여 실제 연결을 설정한다.

외부 FLV 파일을 재생하는 것은 Flash 문서에 비디오를 포함시키는 것에 비해 성능, 메모리 관리, 비디오와 Flash 프레임 비율의 독립성과 같은 여러 부분에서 많은 장점이 있다.
NetConnection 클래스는 로컬 드라이브나 HTTP 주소로부터 스트리밍 FLV 파일을 재생할 수 있는 방법을 제공한다.
 
:: 메서드 요약

서명

설명

connect(targetURI:String) : Boolean

HTTP 주소 또는 로컬 파일 시스템으로부터 비디오(FLV)를 재생할 수 있는 로컬 연결을연다.

 

  connect(NetConnection.connect 메서드) 

public connect(targetURI:String) : Boolean
HTTP 주소 또는 로컬 파일 시스템으로부터 비디오(FLV)를 재생할 수 있는 로컬 연결을 연다.
 
:: 매개 변수
targetURI:String 이 매개 변수에 대해 null을 전달해야 한다.
 
:: 반환값
Boolean false인 경우 연결이 실패하고 연결을 사용할 수없다. true인 경우 connect() 메서드가 호출될 때 연결이 실패하지 않는다. 그러나 성공적인 연결을 보장하지는 않는다.
 
:: 연습01. 비디오 재생

var connection_nc:NetConnection = new NetConnection();

connection_nc.connect(null);

var stream_ns:NetStream = new NetStream(connection_nc);

my_video.attachVideo(stream_ns);

stream_ns.play("flv/mission_impossible_3.flv");

 

  NetStream 


NetStream 클래스에는 로컬 파일 시스템이나 HTTP 주소로부터 Flash Video(FLV) 파일을 재생할 수 있도록 하는 메서드와 속성이 있다.
NetConnection 객체를 통해 비디오를 스트리밍하려면 NetStream 객체를 사용한다.

외부 FLV 파일을 재생하는 것은 Flash 문서에 비디오를 포함시키는 것에 비해 성능, 메모리 관리, 비디오와 Flash 프레임 비율의 독립성과 같은 여러 부분에서 많은 장점이 있다.

이 클래스에는 파일의 로드 및 재생 진행 상태를 추적하고 재생 동작(정지, 일시 정지 등)을 제어하는 데 사용할 수 있는 다양한 메서드와 속성이 제공된다.
 
:: 속성 요약

속성

설명

bufferLength:Number

[읽기 전용] 현재 버퍼에 있는 데이터의 시간(초)이다.

bufferTime:Number

[읽기 전용] NetStream.setBufferTime()에 의해 버퍼에 지정된 시간(초)이다.

bytesLoaded:Number

[읽기 전용] 플레이어에 로드된 데이터의 바이트 수이다.

bytesTotal:Number

[읽기 전용] 플레이어에 로드되는 파일의 전체 바이트 크기이다.

checkPolicyFile:Boolean

Flash Player에서 FLV 파일 자체를 로드하기 전에 로드되는 FLV 파일의 서버에서 크로스 도메인 정책 파일을 다운로드할지 여부를 지정한다.

currentFps:Number

[읽기 전용] 표시되는 초당 프레임 수이다.

time:Number

[읽기 전용] 재생 헤드의 위치(초)이다.

 

  bufferLength(NetStream.bufferLength 속성) 

public bufferLength : Number [읽기 전용]
현재 버퍼에 있는 데이터의 시간(초)이다. 이 속성을 NetStream.bufferTime과 함께 사용하면 버퍼가 어느 정도 채워졌는지 알 수 있다. 따라서, 데이터가 버퍼에 로드되기를 기다리는 사용자에게 상태를 알려줄 수 있다.
 
예제02. 백분율
this.createTextField("buffer_txt",this.getNextHighestDepth(),10,10,300,22);
buffer_txt.html = true;
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
stream_ns.setBufferTime(3);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");
var buffer_interval:Number = setInterval(checkBufferTime, 100, stream_ns);
function checkBufferTime(my_ns:NetStream):Void {
  var bufferPct:Number = Math.min(Math.round(my_ns.bufferLength/my_ns.bufferTime*100), 100);
  var output_str:String = "<textformat tabStops='[100,200]'>";
  output_str += "Length: "+my_ns.bufferLength+"\t"+"Time: "+my_ns.bufferTime+"\t"+"Buffer:"+bufferPct+"%";
  output_str += "</textformat>";
  buffer_txt.htmlText = output_str;
}
 

  setBufferTime(NetStream.setBufferTime 메서드)  

public setBufferTime(bufferTime:Number) : Void
ㆍ스트림을 화면에 표시하기 전에 버퍼에 메시지를 저장할 시간을 지정한다.
ㆍ예를 들어, 스트림의 처음 15초 동안은 확실하게 중단없이 재생되도록 하려면 bufferTime를 15로 설정한다.
ㆍFlash는 15초 분량의 데이터가 버퍼에 채워진 후에만 스트림 재생을 시작한다.
 
매개 변수
bufferTime:Number Flash에서 데이터를 표시하기 전 데이터를 버퍼에 저장할 시간(초)이다. 기본값은 0.1 (10분의 1초)이다.
 

  bufferTime(NetStream.bufferTime 속성) 

public bufferTime : Number [읽기 전용]
ㆍNetStream.setBufferTime()에 의해 버퍼에 지정된 시간(초)이다.
ㆍ기본값은 1 (10분의 1초)이다. 현재 버퍼의 초 수를 확인하려면 NetStream.bufferLength를 사용한다.
 

  bytesLoaded(NetStream.bytesLoaded 속성) 

public bytesLoaded : Number [읽기 전용]
ㆍ플레이어에 로드된 데이터의 바이트 수이다.
ㆍ이 메서드를 NetStream.bytesTotal과 함께 사용하면 버퍼가 어느 정도 채워졌는지 알 수 있다.
ㆍ따라서, 데이터가 버퍼에 로드되기를 기다리는 사용자에게 상태를 알려줄 수 있다.
 
연습03. bytesLoaded
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");
this.createTextField("loaded_txt",this.getNextHighestDepth(),10,10,160,22);
this.createEmptyMovieClip("progressBar_mc",this.getNextHighestDepth());
progressBar_mc.createEmptyMovieClip("bar_mc",progressBar_mc.getNextHighestDepth());
with (progressBar_mc.bar_mc) {
  beginFill(0xFF0000);
  moveTo(0,0);
  lineTo(100,0);
  lineTo(100,10);
  lineTo(0,10);
  lineTo(0,0);
  endFill();
  _xscale = 0;
}
progressBar_mc.createEmptyMovieClip("stroke_mc",progressBar_mc.getNextHighestDepth());
with (progressBar_mc.stroke_mc) {
  lineStyle(0,0x000000);
  moveTo(0,0);
  lineTo(100,0);
  lineTo(100,10);
  lineTo(0,10);
  lineTo(0,0);
}
var loaded_interval:Number = setInterval(checkBytesLoaded, 500, stream_ns);
function checkBytesLoaded(my_ns:NetStream) {
  var pctLoaded:Number = Math.round(my_ns.bytesLoaded/my_ns.bytesTotal*100);
  loaded_txt.text = Math.round(my_ns.bytesLoaded/1000)+" of "+Math.round(my_ns.bytesTotal/1000)+" KB loaded ("+pctLoaded+"%)";
  progressBar_mc.bar_mc._xscale = pctLoaded;
  if (pctLoaded>=100) {
    clearInterval(loaded_interval);
  }
}
 

  bytesTotal(NetStream.bytesTotal 속성) 

public bytesTotal : Number [읽기 전용]
ㆍ플레이어에 로드되는 파일의 전체 바이트 크기이다.
 

  checkPolicyFile (NetStream.checkPolicyFile 속성) 

public checkPolicyFile : Boolean

Flash Player에서 FLV 파일 자체를 로드하기 전에 로드되는 FLV 파일의 서버에서 크로스 도메인 정책 파일을 다운로드할지 여부를 지정한다. 이 플래그는, NetStream을 사용하여 RTMP 에셋을 얻는 경우가 아니라 NetStream을 사용하여 점진적 비디오 다운로드(독립 실행형 FLV 파일)를 수행하려 할 때 적용할 수 있다.
호출하는 SWF 파일의 자체 도메인 밖에 있는 FLV 비디오 파일을 로드하는 경우 BitmapData.draw()를 사용하여 해당 이미지의 내용에 액세스하려면 이 플래그를 true로 설정한다. 로드할 때 checkPolicyFile을 지정하지 않고 이러한 작업을 시도하면 필요한 정책 파일이 아직 다운로드되지 않았으므로 보안 오류가 발생할 수 있다.

checkPolicyFile을 true로 설정하여 NetStream.play()를 호출하면 Flash Player에서는 관련된 크로스 도메인 정책 파일이 다운로드되거나 이러한 정책 파일이 없다는 사실이 확인될 때까지 play() 호출에 지정된객체를 다운로드하지 않는다. Flash Player에서는 우선 이미 다운로드된 정책 파일을 확인한 다음 System.security.loadPolicyFile() 호출에서 지정된 대기 중인 정책 파일을 다운로드하고, 마지막으로 play()에 전달된 URL에 해당하는 기본 위치(해당 URL과 같은 서버의 /crossdomain.xml)에서 정책 파일을 다운로드한다. 모든 경우 지정한 정책 파일이 서버에 있어야 하고, 정책 파일의 위치에 따라 play()에 전달된 URL의 객체에 대한 액세스가 제공되어야 하며, 정책 파일에서 하나 이상의 <allow-access-from> 태그를 통해 호출하는 SWF 파일의 도메인에 의한 액세스가 허용되어야 한다.

checkPolicyFile을 true로 설정하면 Flash Player에서 정책 파일 다운로드가 완료되기까지 기다렸다가 play()에 지정한 주 다운로드를 시작한다. 따라서 필요한 정책 파일이 있어야만 NetStream으로부터 onMetaData 또는 onStatus 이벤트를 수신함과 동시에 정책 파일 다운로드가 완료되고 정책 파일을 사용한 작업을 안전하게 수행할 수 있다.
checkPolicyFile을 true로 설정하였는데 관련 정책 파일이 발견되지 않는 경우 SecurityError 예외를 발생시키는 작업을 시도하면 오류 메시지가 표시된다.
로드하는 비디오에 픽셀 수준으로 액세스할 필요가 없는 경우 checkPolicyFile을 true로 설정하지 않는 것이 좋습니다. 정책 파일을 확인하면 다운로드 시작이 지연되고 네트워크 대역폭이 불필요하게 소비될 수 있어 비효율적이기 때문이다.
서버 쪽 HTTP 리디렉션을 사용할 수 있는 URL에서 FLV 파일을 다운로드하는 경우 checkPolicyFile을 주의하여 사용해야 한다. Flash Player에서는 항상 NetStream.play()에 지정된 최초 URL에 해당하는 정책 파일을 가져옵니다. HTTP 리디렉션으로 인해 다른 URL에서 최종 FLV 파일이 다운로드된 경우, 처음에 다운로드한 정책 파일이 FLV 파일의 최종 URL(보안 결정에서 중요한 URL)에 적용되지 않을 수 있다.
 

  close(NetStream.close 메서드) 

public close() : Void

스트림의 모든 데이터 재생을 중단하고, NetStream.time 속성을 0으로 설정하며, 해당 스트림을 다른 용도로 사용할 수 있도록 한다.
이 명령을 실행하면 HTTP를 사용해 다운로드한 FLV 파일의 로컬 복사본도 삭제된다.
Flash Player는 작성한 FLV 파일의 로컬 복사본을 삭제하지만 비디오 복사본은 브라우저의 캐시 디렉토리에서 유지될 수 있다.
FLV 파일의 캐싱이나 로컬 저장을 전혀 사용하지 않아야 할 경우에는 Flash Media Server를 사용한다.
 
예제04. close
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");
close_btn.onRelease = function() {
  stream_ns.close();
};
 

  currentFps(NetStream.currentFps 속성)  

public currentFps : Number [읽기 전용]

표시되는 초당 프레임 수이다.
FLV 파일을 내보내어 여러 시스템에서 재생되도록 하는 경우, 테스트하는 과정에서 이 값을 검사하면 파일을 내보낼 때 적용할 압축 정도를 결정하는 데 도움이 된다.
 
예제05. 현재 초당 프레임 수
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");
this.createTextField("fps_txt",this.getNextHighestDepth(),10,10,50,22);
fps_txt.autoSize = true;
var fps_interval:Number = setInterval(displayFPS, 500, stream_ns);
function displayFPS(my_ns:NetStream) {
  fps_txt.text = "currentFps (frames per second): "+Math.floor(my_ns.currentFps);
}
 

  NetStream 생성자 

public NetStream(connection:NetConnection)
지정된 NetConnection 객체를 통해 FLV 파일 재생에 사용할 수 있는 스트림을 만든다.
 
매개 변수
connection:NetConnection NetConnection 객체이다.
 
예제04. NetStream
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");
 
:: 이벤트 요약

이벤트

설명

onCuePoint = function(infoObject:Object) {}

FLV 파일 재생 중 포함된 큐 포인트에 도달하면 호출된다.

onMetaData = function(infoObject:Object) {}

Flash Player에서 재생할 FLV 파일에 포함된 설명 정보를 받을 때 호출

onStatus = function(infoObject:Object) {}

상태가 바뀌거나 NetStream 객체에 오류가 발생할 때마다 호출된다.

 
:: 생성자 요약

서명

설명

NetStream(connection:NetConnection)

지정된 NetConnection 객체를 통해 FLV 파일 재생에 사용할 수 있는 스트림을 만든다.

:: 매개 변수
connection:NetConnection NetConnection 객체이다.
ㆍ지정된 NetConnection 객체를 통해 FLV 파일 재생에 사용할 수 있는 스트림을 만든다.
 
:: 메서드 요약

서명

설명

close() : Void

스트림의 모든 데이터 재생을 중단하고, NetStream.time 속성을 0으로 설정하며, 해당 스트림을 다른 용도로 사용할 수 있도록 한다.

pause([flag: Boolean]) : Void

스트림의 재생을 일시 정지하거나 다시 시작한다.

play(name:Object, start:Number, len:Number, reset:Object) : Void

외부 비디오(FLV) 파일의 재생을 시작한다.

seek(offset:Number) : Void

스트림의 시작에서부터 지정된 초 수에 가장 가까운 키프레임을 검색한다.

setBufferTime(bufferTime:Number) : Void

스트림을 화면에 표시하기 전에 버퍼에 메시지를 저장할 시간을 지정한다.

 

  pause(NetStream.pause 메서드) 

public pause([flag:Boolean]) : Void
ㆍ스트림의 재생을 일시 정지하거나 다시 시작한다.
ㆍ매개 변수를 보내지 않고 이 메서드를 처음 호출하면 재생이 일시 정지되고 다음 번에 호출하면 재생을 다시 시작한다.
ㆍ이 메서드를 일시 정지 및 다시 시작 버튼에 첨부할 수도 있다.
 
:: 매개 변수
flag:Boolean [선택 사항] 재생을 일시 정지할 것인지(true) 또는 다시 재생할 것인지(false)를 지정하는 부울 값이다. 이 매개 변수를 생략하면 NetStream.pause()는 전환 스위치처럼 작동한다. 지정된 스트림에 처음 호출되면 재생을 일시 정지하고 다음에 다시 호출되면 재생을 다시 시작한다.
 
예제. 다음 예제는 이 메서드를 사용하는 몇 가지 방법을 나타낸 것이다.
my_ns.pause();// 처음 실행 시 재생이 일시 정지된다.
my_ns.pause(); // 재생이 다시 시작된다.
my_ns.pause(false); // 아무런 영향이 없고 재생이 계속된다.
my_ns.pause(); // 재생이 일시 정지된다.
 

  play(NetStream.play 메서드) 

public play(name:Object, start:Number, len:Number, reset:Object) : Void

외부 비디오(FLV) 파일의 재생을 시작한다. 비디오 데이터를 보려면 Video.attachVideo() 메서드를 호출해야 한다. 비디오와 함께 스트림되는 오디오나 오디오만 포함된 FLV 파일은 자동으로 재생된다.
FLV 파일과 연관된 오디오를 제어하려면 MovieClip.attachAudio()를 사용하여 오디오의 루트를 무비 클립으로 지정한다. 그런 다음, Sound 객체를 만들어 해당 오디오의 일부분을 제어할 수 있다. 자세한 내용은 MovieClip.attachAudio()를 참조하십시오.
FLV 파일을 찾을 수 없으면 NetStream.onStatus 이벤트 핸들러가 호출된다. 현재 재생 중인 스트림을 중지하려면 NetStream.close()를 사용한다.
SWF 파일과 같은 디렉토리 또는 하위 디렉토리에 저장된 로컬 FLV 파일을 재생할 수 있다.
 
매개 변수
name:Object 따옴표로 묶은 재생할 FLV 파일의 이름이다. http:// 및 file:// 형식을 모두 지원한다. file:// 위치는 항상 SWF 파일의 위치에 상대적이다.
start:Number  
len:Number  
reset:Object  
 
예제. NetStream.play()

// 사용자의 컴퓨터에 있는 파일을 재생한다.
my_ns.play("file://joe_user/flash/videos/lectureJune26.flv");

// 서버에 있는 파일을 재생한다.
my_ns.play("http://someServer.someDomain.com/flash/video/orientation.flv");

 

  seek(NetStream.seek 메서드) 

public seek(offset:Number) : Void
ㆍ스트림의 시작에서부터 지정된 초 수에 가장 가까운 키프레임을 검색한다.
ㆍ스트림의 지정된 위치에 도달하면 다시 스트림이 재생된다.
 
매개 변수
offset:Number FLV 파일에서 이동할 근사적인 시간(초) 값이다. 재생 헤드가 offset에 가장 가까운 비디오의 키프레임으로 이동한다.

스트림의 시작으로 돌아가려면 offset으로 0을 전달한다.
스트림의 처음부터 검색하려면 진행할 초 수를 전달한다. 예를 들어, 재생 헤드를 시작 위치로부터 15초 지난 위치로 이동하려면 my_ns.seek(15)으로 지정한다.
현재 위치에서 상대적인 위치를 찾으려면 my_ns.time + n 또는 my_ns.time - n을 전달하여 현재 위치로부터 각각 n초 앞 또는 뒤를 검색한다. 예를 들어, 현재 위치에서 20초 되감으려면 NetStream.seek(NetStream.time - 20)을 사용한다.
 
예제. NetStream.seek()

// 스트림의 시작으로 돌아갑니다.
my_ns.seek(0);

// 스트림의 시작으로부터 30초 지난 위치로 이동한다.
my_ns.seek(30);

// 현재 위치로부터 3분 뒤로 이동한다.
my_ns.seek(my_ns.time-180);

 

  time(NetStream.time 속성) 

public time : Number [읽기 전용]
재생 헤드의 위치(초)이다.
 
연습06. 재생 헤드의 현재 위치를 표시

var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("flv/mission_impossible_3.flv");

stream_ns.onStatus = function(infoObject:Object) {
  statusCode_txt.text = infoObject.code;
};

this.createTextField("time_txt",this.getNextHighestDepth(),10,10,100,22);
time_txt.text = "LOADING";

var time_interval:Number = setInterval(checkTime, 500, stream_ns);
function checkTime(my_ns:NetStream) {
  var ns_seconds:Number = my_ns.time;
  var minutes:Number = Math.floor(ns_seconds/60);
  var seconds = Math.floor(ns_seconds%60);
  if (seconds<10) {
    seconds = "0"+seconds;
  }
  time_txt.text = minutes+":"+seconds;
}

 
예제01. NetConnection & NetStream

fscommand("allowscale", false);

// 사용 변수
var fps_interval:Number;
var videoDuration:Number;
var videoSpace:Number = slideControl_mc.slideBar_mc._width - slideControl_mc.slide_btn._width;
var soundSpace:Number = (soundControl_mc.soundLine_mc._width - soundControl_mc.slide_btn._width)+12;
buffering_txt.autoSize = true;
slideControl_mc.slideBar_mc._width = 0;

// NetConnection 객체 만들기
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
stream_ns.setBufferTime(5);
my_video.attachVideo(stream_ns);
stream_ns.onMetaData = function(infoObject:Object){
  trace("---------- [ FLV 파일 설명 정보 ]-----------");
  for (var propName:String in infoObject){
    trace(propName + " = " + infoObject[propName]);
  }
  videoDuration = infoObject.duration;
}

stream_ns.onStatus = function(infoObject:Object){
  trace("---------- [ FLV 파일 상태 정보]-----------");
  for (var propName:String in infoObject){
    trace(propName + " = " + infoObject[propName]);
  }
  if(infoObject.code == "NetStream.Play.Stop"){
    stopBtn_mc.onRelease();
    trace("FLV 파일 재생 끝");
  }
}

stream_ns.play("flv/mission_impossible_3.flv");
stream_ns.pause(true);

// FLV 파일 재생 시작, 일시정지 제어
playControl_mc.onRelease = function(){
  if(this._currentframe == 1){
    videoPlay();
  }else{
    videoPause();
  }
}

// FLV 파일 재생 멈춤 제어
stopBtn_mc.onRelease = function(){
  clearInterval(fps_interval);
  stream_ns.seek(0);
  stream_ns.pause(true);
  playTime_txt.text = "0:00' / 0:00'";
  playControl_mc.gotoAndStop(1);
  slideControl_mc.slide_btn._x = 0;
  slideControl_mc.slideBar_mc._width = 0;
}

// FLV 파일 재생
function videoPlay():Void{
  fps_interval = setInterval(videoControl,100,stream_ns);
  stream_ns.pause(false);
  playControl_mc.gotoAndStop(2);
}

// FLV 파일 일시정지
function videoPause():Void{
  playControl_mc.gotoAndStop(1);
  clearInterval(fps_interval);
  stream_ns.pause(true);
}

// FLV 파일이 재생될 때 플레이어 제어하기
function videoControl(my_ns:NetStream):Void{
  // 버퍼링(buffering) 출력
  var bufferPct:Number = Math.min(Math.round(my_ns.bufferLength/my_ns.bufferTime*100),100);
  buffering_txt.text = "BufferLength: "+my_ns.bufferLength+" BufferTime: "+my_ns.bufferTime+" Buffer:"+bufferPct+"% Current FPS : "+Math.floor(my_ns.currentFps);
  // 총 재생 시간 출력
  var totalMinutes:Number = Math.floor(videoDuration/60);
  var totalSeconds:Number = Math.floor(videoDuration%60);
  totalSeconds = (totalSeconds<10) ? "0"+totalSeconds:totalSeconds;
  // 현재 재생 시간 출력
  var minutes:Number = Math.floor(my_ns.time/60);
  var seconds:Number = Math.floor(my_ns.time%60);
  seconds = (seconds<10) ? "0"+seconds:seconds;
  playTime_txt.text = minutes+":"+seconds+"' / "+ totalMinutes+":"+totalSeconds+"'";
  // 재생 슬라이드 바 제어
  var currentPct:Number = my_ns.time/videoDuration;
  slideControl_mc.slide_btn._x = Math.floor(videoSpace * currentPct);
  slideControl_mc.slideBar_mc._width = slideControl_mc.slide_btn._x;
}

// 슬라이드 바 제어
slideControl_mc.slide_btn.onPress = function(){
  startDrag(this,false,0,0,videoSpace,0);
  videoPause();
  slideControl_mc.slideBar_mc.onEnterFrame = function(){
    this._width = slideControl_mc.slide_btn._x;
  }
}

// 슬라이드 바 제어
slideControl_mc.slide_btn.onRelease = slideControl_mc.slide_btn.onReleaseOutside = function(){
  stopDrag();
  delete slideControl_mc.slideBar_mc.onEnterFrame;
  videoPlay();
  var currentTime:Number = videoDuration * (slideControl_mc.slide_btn._x/videoSpace);
  stream_ns.seek(currentTime);
}

// 사운드 제어
this.createEmptyMovieClip("sound_mc", this.getNextHighestDepth());
sound_mc.attachAudio(stream_ns);
var audio_sound:Sound = new Sound(sound_mc);
var currentVolume:Number;

// 사운드 on, off 제어
soundControl_mc.soundOnOff_mc.onRelease = function(){
  if(this._currentframe == 1){
    audio_sound.setVolume(0)
    this.gotoAndStop(2);
  }else{
    audio_sound.setVolume(currentVolume);
    this.gotoAndStop(1);
  }
}

// 사운드 볼륨 제어
soundControl_mc.slide_btn.onPress = function(){
  startDrag(this,false,12,0,soundSpace,0);
  soundControl_mc.soundSlideBar_mc.onEnterFrame = function(){
    this._width = soundControl_mc.slide_btn._x-12;
    if(soundControl_mc.soundOnOff_mc._currentframe == 1){
      currentVolume = Math.floor(((soundControl_mc.slide_btn._x-12)/soundSpace)*100);
      audio_sound.setVolume(currentVolume);
    }
  }
}

// 사운드 볼륨 제어
soundControl_mc.slide_btn.onRelease = soundControl_mc.slide_btn.onReleaseOutside = function(){
  stopDrag();
  delete soundControl_mc.soundSlideBar_mc.onEnterFrame;
}

반응형