관리 메뉴

nkdk의 세상

AS3.0의 비디오의 이해 본문

My Programing/ActionScript

AS3.0의 비디오의 이해

nkdk 2008. 3. 9. 22:27
일단 비디오 관련 클래스는 크게 2파트 입니다.
Flash Core API에서 제공하는 Video 클래스와
컴포넌트에서 제공하는 VideoPlayer 클래스 입니다.

Video 클래스는 videoPlayer를 사용하기 편하도록 컴포넌트화 한 것입니ㅏㄷ.

중요 개념

큐포인트
flv 파일 내에 특정 위체에 마커를 사입하는 것을 큐포인트라고 한다. 그곳에서 Navigatin, event, 액션스크립트로 제어가 가능하다.

메타데이터
정보 데이터를 이야기 한다. 재생 전에 필요한 정보를 싣고 있는 것입니다.

Progressive download
다운 받고 있을 때에는 플레이의 위치를 이동시키지 못하게 할 때 하는 기술입니다.

Streaming
위에 것과 약간은 다르지만 비슷합니다. 특정 위치로 이동할때 약간의 버퍼링이 소요 되기도 합니다.

포함 FLV와 외부 링크 FLV
외부 링크 FLV를 사용하면 싱크나 재생 부분에서 좀 더 자연스러운 것을 기대 할 수 있습니다.

자 그럼 간단한 예제 나갑니다.

var connection:NetConnection = new NetConnection();
connection.connect(null);
var stream:NetStream = new NetStream(connection);

stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);

function asyncErrorHandler(event:AsyncErrorEvent):void {
}

function netStatusHandler(event:NetStatusEvent):void{
trace(event.info.code);
}

/////


var video:Video = new Video();
video.attachNetStream(stream);
video.x=100;
video.y=100;
video.alpha=0.5;
stream.play("sheep.flv");
stage.addChild(video);

다음과 같이 클래스를 하나 만들었고요.
flv 역시 보안샌드 박스로 관리 되는 녀석이니까 관리 하는 방법은 뭐 알아서 해 주시고요.

아 그리고 플래시 미디어 서버는 접속 주소는 다음과 같습니다.

protocol:[//host][:port]/appname/[instanceName]
예) rtmp://server.domain.com/lectureSeries/Monday 등으로
하면 됩니다.

Camera클래스

카메라 클래스를 사용하는 방법은 NetStream 클래스에 attachCamera 메서드를 사용하거나 직접적으로 호출하면 됩니다.

var cam:Camera = Camera.getCamera();
if (cam!=null) {
var vid:Video = new Video();
vid.attachCamera(cam);
stage.addChild(vid);
}

이렇게 하면 장치 디바이스와 맞물려 있음으로 getCamera메서드를 이용한다. 웹캠이 연결된 상태라면 정상적으로 실행이 될 것이다.

if(Camera.names.length == 0)
{ trace("User has no cameras installed.");
return;
}
var cam:Camera = Camera.getCamera(); // get default camera

camera.names 를 통해 설치된 카메라의 이름 목록을 얻을 수 있다.
여러가지 컴퓨터가 설치 되어 있을 시에는
var car:Camera = Camera.getCamera(Camera.names[0]); 이런식으로
선택이 가능하다.

카메라는 사용자가 허가를 해주어야 가능하다.
해당 이벤트를 등록함으로 다음과 같이 하어야 한다.

var cam:Camera = Camera.getCamera();
if(cam==null) {return;}

cam.addEventListener(StatusEvent.STATUS, statusHandler);
var vid:Video = new Video();
vid.attachCamera(cam);
stage.addChild(vid);

function statusHandler(event:StatusEvent):void
{
switch(event.code)
{
case "Camera.Muted":
trace("User clicked Deny.");
break;
case "Camera.Unmuted":
trace("User Clicked accept.");
break;
}
}

muted 인 경우 deny accept인 경우 허가 인 경우입니다.

카메라의 해상도 조절
setMode(width:int, height:int, fpss:Number, favorArea:Boolean = true):void 와 강이 설정 할 수 있습니다.

퀄리티 조절
setQuality(bandwidth:int, quality:int):void

그 외에도 keyFrame에 Interval 이라던지 motion 레벨 loopback 등도 설정 할 수 있습니다.

내용이 길기 때문에 2부에서..^^