[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]
댓글 없음:
댓글 쓰기