'Seek'에 해당되는 글 1건

  1. 2008.08.17 비디오의 제어 속성들 6
AS3.0 Cookbook/비디오2008. 8. 17. 13:02
비디오 파일을 제어하기 위해서는 몇가지 속성을 알아야한다. 이러한 속성은 대부분 NetStream()클래스를 통해서 얻게 된다.

우선 전체재생시간은 NetStream이 onMetaData() 콜벡호출시 duration이라는 값으로 알게 된다.
그리고 현재 재생시간을 알기 위해서는 NetStream의 time속성을 통해 현재 재생시간을 알 수 있다.
최초 재생할 파일을 선택하고 재생하는 것은 NetStream의 play()에서 하지만 이 후 정지와 다시 재생은 NetStream의 pause()resume()메서드를 통해 간단하게 구현할 수 있다.
게다가 NetStream에는 seek()라는 메서드를 제공하는 재생할 시간을 입력하면 그 시간과 가장 가까운 비디오 프레임을 재생하게 된다.

* seek시 가까운 프레임 헤더란?
비디오 파일은 시간 압축되어 있는 파일이다. 즉 모든 영상정보를 저장하는것이 아니고 특정 구간마다 거의 움직이지 않는 장면을 한개 저장하고 있다가 조금씩 움직이는 부분의 영상정보를 저장하여 보여준다. 즉 플래시 무비를 만들 때 배경은 1개의 프레임으로 1개의 레이어를 소비하지만 다른 움직이는 것을 여러개의 프레임을 가지고 있다. 이처럼 배경이나 큰 움직임이 있을때만 비디오 프레임이 갱신되고 이후에는 앞서 갱신된 프레임만 보여주기 때문에 정확한 seek위치가 나오질 않는다. 가령 비디오가 시작시 배경만 갱신되고 이후 특정부위만 움직일때 다시 갱신이 없다면 seek하면 제일 처음부터 재생된다는 것이다.

비디오의 사운드를 제어하기 위해서는 NetStream클래스의 속성인 soundTransform에 제어된 soundTransform를 대입한다. 이방법은 SoundChannel과 같은 방법으로 사용한다.

또한 사용자 네트워크가 느린 경우를 생각하여 NetStream에는 bufferTime이라는 속성이 있다. 이는 최초 재생시 또는 중간에 끊김 이후 재생시 설정한 시간동안 데이터를 받고 해당시간이 되면 재생하도록 하는 버퍼타임을 설정한다.

위에서 언급한 속성과 메서드만 있으면 재생/정지 , 프로그래시브바 , skip등 많은 일들을 할 수 있고 이 모든 것은 NetStream()을 통해서 이루어 진다. 아마 어도비에서도 각 클래스를 분담해서 작업했겠지만 사운드도 이처럼 조금 더 제어 클래스에 집중화 되었더라면 하는 아쉬움이 남는다...



위 무비는 재생이 끝나면 Video의 clear()메서드를 통해 화면을 지웠다. 따라서 아래의 무비처럼 재생 종료 후 영상이 남지 않는다. clear()는 removeChild()와 달리 비디오의 현재 재생화면만 지울 뿐 디스플레이 리스트에서 지워지는 것이 아니기 때문에 언제라도 play()가 이루어 지면 화면을 보여주게 된다. 시시콜콜한 소린 왜 했는가면 책(오라일리)에서 이 둘을 같은 개념으로 설명했기에 차이점을 짚어보고 싶었다...
Posted by 버터백통