'video'에 해당되는 글 2건

  1. 2008.08.17 비디오 프로그래밍 2
  2. 2008.07.06 FLV파일의 스트리밍 흐름과 정보
AS3.0 Cookbook/비디오2008. 8. 17. 11:40
AS3에서는 Video클래스를 제공하여 FLV파일을 제생할 수 있게 한다. 단 FMS서버가 아닌 경우 대부분 프로그래시브한 FLV를 재생한다.

비디오를 재생하기 위해서는 몇가지 클래스와 콜벡함수에 대한 처리를 해주어야 한다.
우선 비디오파일이 있는 서버와의 길을 만들기 위한 NetConnection이 필요하고 이를 관리하고 제어(비디오파일)하는 NetStream 클래스를 만들어야 한다.
이 두개의 클래스로서 외부 비디오 파일과의 연결은 준비가 된 것이다.

NetConnection을 통해 흘러오는 비디오데이터를 NetStream 이 재생을 하게되는데 실제로 화면에 보여주기 위해서는 DisplayObject를 상속받은 녀석이 있어야 한다. 그것이 Video클래스이다.

다른 로더나 사운드관련 클래스들 처럼 서버와의 통신전문 클래스인 NetConnection, 실제 파일의 움직임을 관리하는 NetStream, 이들을 통해 불러들인 데이터를 담아 보여주는 Video클래스 이렇게 3개의 클래스가 기본적으로 설정되어 있어야 하며, 비디오 파일이 NetStream을 통해 흘러들어올 때 콜벡함수 onMetaData()를 호출하게 된다. 이는 자신의 총 재생시간을 duration이라는 변수값으로 호출하기 때문에 클래스에 onMetaData를 설정해 두어야 한다. 그리고 만약 FLV에 큐포인트가 설정되어있다면 onCuePoint()함수도 설정해 두어야 한다.

onMetaData의 정보
width  :  비디오파일의 폭
height  :  비디오파일의 높이
videodatarate  :  비디오 데이터 속도
cuePoints  :  큐포인트의 배열
framerate  :  재생속도
videocodecid  :  비디오 인코딩에 사용된 코덱 버전

duration  :  전체 재생시간
audiodatarate  :  오디오의 kbps(초당 킬로바이트) 속도

canSeekToEnd  :  FLV 파일이 점진적 다운로드 무비 클립의 파일끝까지 검색할 수있는 불리언값
audiodelay  :  영상과 오디오간의 지연시간을 보정한 시간


CuePoint로 설정할 수 있는 값은 4개로 한정되어있다.
name  :  큐포인트 이름
type  :  인코딩시 선택된 event나 navigation
parameters  :  변수와 값
time  :  큐포인트 위치의 시간

parameters에값이 있다면 해당 변수명으로 한 depths 더 들어간다.


* 참고로 앞서 비디오 파일 통신을 설명한 바 있다. 참고자료 보기
Posted by 버터백통
Tip And Tech2008. 7. 6. 14:01
swf에서는 flv파일을 재생할 수 있는 Video객체가 존재한다.
flv파일은 스트리밍이 가능한 파일이다 이는 곧 파일의 일부인 패킷(packet)단위의 데이터만 들어와도 재생할 수 있는 것이다.

* 스트리밍(streaming)
스트리밍의 정의는 파일의 일부만 존재하여도 재생 활용 할수 있는 의미를 갖는다.
현재 swf는 반스트리밍 파일이다 이는 root의 프레임단위 스트리밍이기 때문에 프레임에 모션을 담은 무비클립이나 loader를 통한 애니메이션이 존재한다면 재생 중 이를 다 받고 다음프레임의 정보를 다운로드하게 된다.
그렇기 때문에 모션이나 영상 개발시 프레임구조 또한 중요한 차지를 하게 된다. 이를 제외하고 swf에 포함되는 flv만 놓고 보았을 때는 스트리밍을 지원한다. 이때 파일을 제공하는 서버가 FMS가 아니면 progressive방식으로 스트리밍을 한다. progressive방식은 패킷단위로 저장된 정보순으로 재생을 하며 이를 벗어나서는(스킵) 재생할 수 없다. 하지만 FMS에서 제공하는 flv파일 재생은 nonprogressive가 된다.
nonprogressive는 클라이언트에 저장된 패킷(데이타)이 없더라도 가고자 하는 장면(시간)으로 이동 재생할 수 있는 마치 내 컴퓨터에 파일이 존재하는 것 처럼 사용할 수 있다.

참고) 영상(VOD)이나 음원(AOD)처럼 일부 패킷만으로  스트리밍이 가능하여 재생할 수(사용할 수 )있지만 zip , 이미지파일 , hwp , doc등 전체 파일포맷이 다운되어 완성되어 보여져야 하는 파일들은 스트리밍의 개념이 없다. 단 http://www.bytearray.org/에서 제공하는 ASZip같은 경우에는 압축파일이 전송된 양만큼 활용할 수 있다.


아래 그림은 swf에서 flv를 받는 과정을 그려보았다
사용자 삽입 이미지
swf에는 Video라는 객체가 있다. 이 객체는 제공받은 flv파일을 재생하기 위한 viewer인데 제공받기 까지의 과정에 2개의 필수 객체가 필요하다. 우선 어느 서버(경로)로 접근할 때 사용할 길(대역 : 帶域 )인 NetConnection 필요하다. 그리고 이를 관리할 NetStream이 필요하다. 비디오객체에서 필요한 요청을 할 때는 NetStream를 통해서 요청을 하고 NetStream는 NetConnection을 통해 서버에 던진다. 요청받은 일을한 서버는 응답을 NetConnection를 통해 되돌려주고 가만히 앉아서 기다리던 NetStream은 응답이 오자 결과를 자신을 바라 보고 있는 Video객체에 전달하도록 되어있다.

* NetConnection 역할
 - 단순히 서버와의 길을 연결하는 통신선이다

* NetStream(흐름관리자) 역할 
- 자신이 관리할 NetConnection를 정하여 서버에 요청을 하고 응답이 오면 값을 전달하는 객체이다.
- ordering(순서) : 재생 순서(시간)를 지켜서 데이터를 Netconnection을 통해 보내거나 받는다.
- jitter(지터) : 패킷과 패킷사이에 거리(시간차), 거리를 맞추기 위해서 NetStream이 조절한다.

* 비디오 객체
- 흐름을 타고 넘어온 데이터가 최종적으로 화면에 출력하는 객체

위처럼 각 역할을 맡은 객체들이 서로의 역할을 수행하면서 비디오 파일을 가져올 때 해당 파일에 필요한 메타정보를 반드시 가져와야 한다. 가령 비디오파일 확장자를 가지고는 있지만 실제 파일이 이미지나 기타 파일 포맷인지를 재생하기 전에 확인하는 절차가 필요하기 때문이다. 따라서 비디오 객체를 포함하는 클래스에는 public으로 onMetaDataonCuePoint라는 함수를 반드시 만들어 놓아야 한다.

참고) 메타데이타(부가 정보)
- 이미지의 메타데이타는 크게 아래와 같다
  [ 부가정보(이름 , 파일용량 , 가로 , 세로 , 확장자 .. ) ] [ 핵심데이터(블럭) ] [ 핵심데이터(블럭) ]..

- 동영상의 메타데이타도 이미지와 비슷한 정보를 갖는다.
  [ 부가정보(이름 , 파일용량 , 가로 , 세로 , 전체 재생길이 , 코덱...) ] [ 핵심데이터(블럭) ] ....
단 flv만의 부가적 특징이 바로 cuePoint가 있다. 이는 영상 중간 중간에 변수(정보)를 삽입할 수 있다.
따라서 AS3에서는 반드시 onMetaDataonCuePoint를 체크하여야 한다. FMS서버일 때 이러한 cuePoint를 체크하여 서버의 파일의 위치를 찾아가 바로 바로 재생할 수 있도록 하기 위해서 이다.

Posted by 버터백통