'nonprogressive'에 해당되는 글 1건

  1. 2008.07.06 FLV파일의 스트리밍 흐름과 정보
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 버터백통