본문내용
적으로 정해진것이니까 그대로 사용하면 되지요.
그런다음... ControllerEvent 를 받아왔습니다. 그래서 event라는 인자로 받았지요? 그런데.. 여기서 우리가 주의해야 할것이 있습니다.
ControllerEvent 이벤트안에는 정말 꽤나 많은 이벤트들이 있습니다. 하나 하나 설명하자니.. 너무 분량이 많고.. 이 부분에 대해서는 JMF 2.0 API Guide를 읽어 보세요. 발생되는 이벤트 들이 정말 많기 때문에.. 전부 외우지는 마시고. 필요할때 마다 찾아보시면 됩니다.
일단 가장 많이 사용하는 이벤트는요.. RealizeCompleteEvent 입니다. 발생한 이벤트가 우리가 원하는 이벤트인가 아닌가를 판별하기 위해서는
if( event instanceof RealizeCompleteEvent )
이런 방법을 사용합니다. 즉, instanceof 를 이용하여 해당 이벤트가 맞다면 if 문 안에서 처리를 해주면 됩니다.
RealizeCompleteEvent ?? 이게 뭡니까...
미디어 파일을 연주하기 위한 player라는 것은 실제 우리가 이용하기 전에 내부적으로 여러 단계를 거치게 됩니다.
이것을 Player State라고 합니다.
Player State
Unrealized - Realizing - Realized - Prefetching - Prefetched - 화면에 보이는 start단계
이와 같이 5단계를 거치게 되지요.
그래서 우리가 직접 화면에서 동영상이나 음악 파일을 보거나 듣기 이전까지 위의 5단계를 거치게 되는 것입니다.
세상에.. 이 많은 내용을 어떻게 다 공부하냐구요?? 하하. 저도 처음에는 엄청 고생했죠.. 자. 차근차근히..
일단 우리가 이용한 RealizeCompleteEvent 가 발생할때 뭘 하는지 살펴봅시다.
RealizeCompteEvent 발생시 할일
우리가 Mpeg, 혹은 다른 음악파일등을 윈도우의 미디어 플레이어 같은 것으로 재생한다고 할때 화면이 나오고.. 화면아래서 ProgressBar가 나타나서 현재 어느정도 재생을 했고, 앞으로 남은 시간이 얼마인가가 표시됩니다. 그리고 오디오의 경우 오디오 볼륨조절, 비디오의 경우 고속재생, 저속재생등을 지정하는 화면이 나타납니다. 바로 그것입니다. JMF에서도 그렇게 시각적으로 비디오 컨트롤과 같은 것을 제공하는데.. 그것을 JMF에서는 VisualComponent와 ControlPanelComponent 라고 합니다. 그래서 우리가 멀티미디어 파일을 재생하기 직전에 화면에 이러한 것들이 화면에 보인다면 보는 사람이 더욱 편하게 볼 수 있겠지요.. 그래서 . 우리가 만들 프로그램에 이와같은 부분을 추가해야합니다. 그럼 어디서 어떻게 추가를 해야하는가.. 바로 player에서 발생하는 이벤트중 Realize가 끝난상태. 즉, RealizeCompleteEvent 가 발생했을때 바로 시각효과를 위한 컴포넌트를 추가할 수 있는 것입니다.
물론 모든 멀티미디어 파일마다 비디오 컴포넌트나 오디오 컴포넌트가 있는 것이 아닙니다. 그래서 , 일단 비디오 컴포넌트와 오디오 컴포넌트를 얻어와서 그것이 null 값이 아닌경우 이를 우리가 원하는 화면에 붙이자는 것이지요
인자를 받아올때는 Component 형을 이용합니다. 그래서
Component component = player.getVisualComponent();
Component component = player.getControlPanelComponent(); 이와 같이 이용하는 것입니다.
그리고 이렇게 얻어진 컴포넌트를 우리가 만든 애플릿에 추가를 해야지요.. 예를들어 버튼을 만들고 애플릿에 추가하는 것처럼요..
add("Center", component);
이와같은 방법으로 추가하면 됩니다.
마지막으로 컴포넌트들을 추가하고 나서.. 화면이 갱신되었다는 것을 알려주어야하죠..
그것이 validate() 입니다.
다시 정리하지만, 멀티미디어 파일의 시각적인 컴포넌트추가는 바로 RealizeCompleteEvent 발생시에 한다는 것을 기억해야 합니다.
애플릿이 시작되는 init()
이 함수에서 애플릿의 레이아웃을 BorderLayout으로 변경했습니다.
그리고, 우리가 재생하기를 원하는 멀티미디어 파일이 존재하는 위치를 알기위해서 URL을 이용했습니다.
마지막으로 Player 클래스를 이용해서 실제 미디어 파일을 연주하는 연주기.. 바로 그 자체인 player를 만들었습니다.
이렇게 만든 player에 이벤트 처리를 추가했구요..
여기서 주의할 점은 이렇게 player를 만들때 반드시 예외처리인 try -- catch 블럭을 이용해야 합니다.
애플릿의 start()
애플릿이 시작될때 player도 시작되도록 player.start() 함수를 호출했습니다.
애플릿의 stop()
애플릿의 실행이 멈추게되면 player도 재생을 멈추기 위해서 player.stop()을 해주었구요.
아참. 여기서 주의할 점은 player가 멈추게 되면 그동안 점유하고 있던 리소스를 풀어주어야 합니다.
왜냐하면 다른 player들이 사용하려고 하는데.. 이미 다른 player가 리소스를 붙잡고 놓아주지 않는다면 다른 player들은 사용하지도 못하겠지요.
예를들어서 하드웨어 디바이스를 이용하는 player같은경우 위와같이 리소스를 꼭 풀어주어야 안전하게 작동합니다.
애플릿의 완전종료 destroy()
이때 player도 역시 완전히 종료하게 됩니다.
결론
간단한 미디어 파일 연주기를 만들어 보았습니다.
프로그램은 간단하지만, 실제로 그 안에서 우리가 알아야 할 내용이 정말 많습니다.
이 부분을 잘 이해하고, 이벤트 처리를 잘 이해한다면 거의 절반은 성공입니다.
그리고, player state라고 해서 실제로 미디어를 재생하기 전까지의 5단계가 있다고 했습니다.
그 부분에 대해서 JMF 2.0 API Guide를 이용해 다시 한번 확인해 주시기 바랍니다.
다음 강좌에서는 위에서 만든 프로그램에 좀더 많은 이벤트 처리를 하고, 각종 이벤트 발생시에 우리가 해야할 일들을 적용한 프로그램과 시각적으로 좀 꾸며진 프로그램에 대해 알아보도록 하겠습니다.
그런다음... ControllerEvent 를 받아왔습니다. 그래서 event라는 인자로 받았지요? 그런데.. 여기서 우리가 주의해야 할것이 있습니다.
ControllerEvent 이벤트안에는 정말 꽤나 많은 이벤트들이 있습니다. 하나 하나 설명하자니.. 너무 분량이 많고.. 이 부분에 대해서는 JMF 2.0 API Guide를 읽어 보세요. 발생되는 이벤트 들이 정말 많기 때문에.. 전부 외우지는 마시고. 필요할때 마다 찾아보시면 됩니다.
일단 가장 많이 사용하는 이벤트는요.. RealizeCompleteEvent 입니다. 발생한 이벤트가 우리가 원하는 이벤트인가 아닌가를 판별하기 위해서는
if( event instanceof RealizeCompleteEvent )
이런 방법을 사용합니다. 즉, instanceof 를 이용하여 해당 이벤트가 맞다면 if 문 안에서 처리를 해주면 됩니다.
RealizeCompleteEvent ?? 이게 뭡니까...
미디어 파일을 연주하기 위한 player라는 것은 실제 우리가 이용하기 전에 내부적으로 여러 단계를 거치게 됩니다.
이것을 Player State라고 합니다.
Player State
Unrealized - Realizing - Realized - Prefetching - Prefetched - 화면에 보이는 start단계
이와 같이 5단계를 거치게 되지요.
그래서 우리가 직접 화면에서 동영상이나 음악 파일을 보거나 듣기 이전까지 위의 5단계를 거치게 되는 것입니다.
세상에.. 이 많은 내용을 어떻게 다 공부하냐구요?? 하하. 저도 처음에는 엄청 고생했죠.. 자. 차근차근히..
일단 우리가 이용한 RealizeCompleteEvent 가 발생할때 뭘 하는지 살펴봅시다.
RealizeCompteEvent 발생시 할일
우리가 Mpeg, 혹은 다른 음악파일등을 윈도우의 미디어 플레이어 같은 것으로 재생한다고 할때 화면이 나오고.. 화면아래서 ProgressBar가 나타나서 현재 어느정도 재생을 했고, 앞으로 남은 시간이 얼마인가가 표시됩니다. 그리고 오디오의 경우 오디오 볼륨조절, 비디오의 경우 고속재생, 저속재생등을 지정하는 화면이 나타납니다. 바로 그것입니다. JMF에서도 그렇게 시각적으로 비디오 컨트롤과 같은 것을 제공하는데.. 그것을 JMF에서는 VisualComponent와 ControlPanelComponent 라고 합니다. 그래서 우리가 멀티미디어 파일을 재생하기 직전에 화면에 이러한 것들이 화면에 보인다면 보는 사람이 더욱 편하게 볼 수 있겠지요.. 그래서 . 우리가 만들 프로그램에 이와같은 부분을 추가해야합니다. 그럼 어디서 어떻게 추가를 해야하는가.. 바로 player에서 발생하는 이벤트중 Realize가 끝난상태. 즉, RealizeCompleteEvent 가 발생했을때 바로 시각효과를 위한 컴포넌트를 추가할 수 있는 것입니다.
물론 모든 멀티미디어 파일마다 비디오 컴포넌트나 오디오 컴포넌트가 있는 것이 아닙니다. 그래서 , 일단 비디오 컴포넌트와 오디오 컴포넌트를 얻어와서 그것이 null 값이 아닌경우 이를 우리가 원하는 화면에 붙이자는 것이지요
인자를 받아올때는 Component 형을 이용합니다. 그래서
Component component = player.getVisualComponent();
Component component = player.getControlPanelComponent(); 이와 같이 이용하는 것입니다.
그리고 이렇게 얻어진 컴포넌트를 우리가 만든 애플릿에 추가를 해야지요.. 예를들어 버튼을 만들고 애플릿에 추가하는 것처럼요..
add("Center", component);
이와같은 방법으로 추가하면 됩니다.
마지막으로 컴포넌트들을 추가하고 나서.. 화면이 갱신되었다는 것을 알려주어야하죠..
그것이 validate() 입니다.
다시 정리하지만, 멀티미디어 파일의 시각적인 컴포넌트추가는 바로 RealizeCompleteEvent 발생시에 한다는 것을 기억해야 합니다.
애플릿이 시작되는 init()
이 함수에서 애플릿의 레이아웃을 BorderLayout으로 변경했습니다.
그리고, 우리가 재생하기를 원하는 멀티미디어 파일이 존재하는 위치를 알기위해서 URL을 이용했습니다.
마지막으로 Player 클래스를 이용해서 실제 미디어 파일을 연주하는 연주기.. 바로 그 자체인 player를 만들었습니다.
이렇게 만든 player에 이벤트 처리를 추가했구요..
여기서 주의할 점은 이렇게 player를 만들때 반드시 예외처리인 try -- catch 블럭을 이용해야 합니다.
애플릿의 start()
애플릿이 시작될때 player도 시작되도록 player.start() 함수를 호출했습니다.
애플릿의 stop()
애플릿의 실행이 멈추게되면 player도 재생을 멈추기 위해서 player.stop()을 해주었구요.
아참. 여기서 주의할 점은 player가 멈추게 되면 그동안 점유하고 있던 리소스를 풀어주어야 합니다.
왜냐하면 다른 player들이 사용하려고 하는데.. 이미 다른 player가 리소스를 붙잡고 놓아주지 않는다면 다른 player들은 사용하지도 못하겠지요.
예를들어서 하드웨어 디바이스를 이용하는 player같은경우 위와같이 리소스를 꼭 풀어주어야 안전하게 작동합니다.
애플릿의 완전종료 destroy()
이때 player도 역시 완전히 종료하게 됩니다.
결론
간단한 미디어 파일 연주기를 만들어 보았습니다.
프로그램은 간단하지만, 실제로 그 안에서 우리가 알아야 할 내용이 정말 많습니다.
이 부분을 잘 이해하고, 이벤트 처리를 잘 이해한다면 거의 절반은 성공입니다.
그리고, player state라고 해서 실제로 미디어를 재생하기 전까지의 5단계가 있다고 했습니다.
그 부분에 대해서 JMF 2.0 API Guide를 이용해 다시 한번 확인해 주시기 바랍니다.
다음 강좌에서는 위에서 만든 프로그램에 좀더 많은 이벤트 처리를 하고, 각종 이벤트 발생시에 우리가 해야할 일들을 적용한 프로그램과 시각적으로 좀 꾸며진 프로그램에 대해 알아보도록 하겠습니다.
소개글