2010년 3월 31일 수요일

#FLV 플레이어 완성

[code as3]
package
{
import fl.events.SliderEvent;

import flash.display.Sprite;
import flash.events.*;
import flash.media.Video;
import flash.media.SoundTransform;
import flash.net.NetConnection;
import flash.net.NetStream;

public class Main extends Sprite
{
 public function Main()
 {
  super(); // Sprite 클래스 생성

  configurePlayer(); // player 설정
 }

 private var firstFlag:Boolean = true;

 private var isPlaying:Boolean = false;

 private var isConnection:Boolean = false;

 private var isPause:Boolean = false;

 /**
  *  @private
  *  비디오 파일
  */
 private var videoURL:String = "once.flv";

 /**
  *  @private
  *  비디오 연결
  */
 private var connection:NetConnection;

 /**
  *  @private
  *  비디오 스트림
  */
 private var stream:NetStream;

 /**
  *  @private
  *  비디오 플레이어 설정
  *  
  *  connect() : 로컬 컴퓨터에서 비디오 파일과 연결 중이라면 null로 설정
  *  snapInterval : 볼륨 조절시 값이 증가하거나 감소하는 기준 간격
  */
 private function configurePlayer():void
 {
  connection = new NetConnection(); // 비디오 연결 객체 생성
  connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); // 비디오 연결상태 이벤트 등록
  connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); // 보안오류 이벤트 등록
  connection.connect(null);

  play_mc.addEventListener(MouseEvent.CLICK, playClickHandler); // 재생버튼 이벤트 등록
  pause_mc.addEventListener(MouseEvent.CLICK, pauseClickHandler); // 일시정지 버튼 이벤트 등록
  stop_mc.addEventListener(MouseEvent.CLICK, stopClickHandler); // 정지버튼 이벤트 등록
  slider_comp.addEventListener(SliderEvent.THUMB_DRAG, volumeSliderHandler); // 볼륨조절 이벤트 등록

  slider_comp.maximum = 1; // 볼륨 최대값 설정
  slider_comp.minimum = 0; // 볼륨 최소값 설정
  slider_comp.snapInterval = 0.1; // 0.1만큼 증가 감소
  slider_comp.value = 0.5; // 초기 볼륨값 설정
 }

 /**
  *  @private
  *  비디오 스트림
  *
  *  attachNetStream : 비디오 스트리밍
  */
 private function setStream():void
 {
  stream = new NetStream(connection); // Connection을 통해 객체 생성
  stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); // 연결된 데이터 가져오는 상태 이벤트 등록
  stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); // 비동기적 예외발생 이벤트 등록

  var video:Video = new Video();  // 비디오 객체 생성

  video.x = 30; // 비디오 x좌표
  video.y = 10; // 비디오 y좌표

  video.width = 500; // 비디오 너비
  video.height = 330; // 비디오 높이

  video.attachNetStream(stream); // 읽어온 데이터를 화면에 연결
  addChild(video); // 화면에 표시

  isConnection = true; // 비디오 연결됨
 }

 /**
  *  @private
  *  비디오 연결 상태
  */
 private function netStatusHandler(event:NetStatusEvent):void
 {
  switch(event.info.code)
  {
   case "NetConnection.Connect.Success" :
    setStream(); // 비디오 연결 성공시 호출
    break;

   case "NetStream.Play.StreamNotFound";
    trace("Unable to locate video: " + videoURL);
    break;
  }
 }

 /**
  *  @private
  *  비디오 보안 오류
  */
 private function securityErrorHandler(event:SecurityErrorEvent):void
 {
  trace("sequrityError");
 }

 /**
  *  @private
  *  비디오 비동기적 예외 발생
  */
 private function asyncErrorHandler(event:AsyncErrorEvent):void
 {
  trace("async error");
 }

 /**
  *  @private
  *  비디오 재생
  */
 private function playClickHandler(event:MouseEvent):void
 {
  if(isConnection && firstFlag)
  {
   firstFlag = false;
   stream.play(videoURL); // 비디오 파일 재생

   var st:SoundTransform = stream.soundTransform; // 재생되는 비디오 사운드 정보 넘겨줌
   st.volume = slider_comp.value; // 뵬륨 조절
   stream.soundTransform = st; // 변환된 볼륨 재적용
   isPlaying = true; // 재생상태
  }

  if(isPause && !isPlaying) // 정지 중
  {
   stream.resume(); // 정지했던 비디오 스트림 다시 재생
   isPause = false; // 일시정지상태
   isPlaying = true; // 재생상태
  }
 }

 /**
  *  @private
  *  비디오 일시정지
  */
 private function pauseClickHandler(event:MouseEvent):void
 {
  if(isPlaying && !isPause) // 재생 중
  {
   stream.pause(); // 비디오 정지
   isPlaying = false; // 재생상태
   isPause = true; // 일시정지상태
  }
 }

 /**
  *  @private
  *  비디오 정지
  */
 private function stopClickHandler(event:MouseEvent):void
 {
  stream.pause(); // 비디오 정지
  stream.seek(0); // 처음 재생 상태로 돌아감
  isPlaying = false; // 재생 상태
  isPause = true; // 정지상태
 }

 /**
  *  @private
  *  비디오 볼륨
  */
 private function volumeSliderHandler(event:SliderEvent):void
 {
  var st:SoundTransform = stream.soundTransform; // 재생되는 비디오 사운드 정보 넘겨줌
  st.volume = event.value; // 볼륨 조절
  stream.soundTransform = st; // 변환된 사운드 재적용
 }
}
}
[/code]

 

댓글 없음:

댓글 쓰기