Game Programming/XNA

XNA :: XNA Game Studio 4.0 # 6 - 비디오 출력

VallistA2015. 4. 22. 15:54

 

 

 

 

XNA에서는 오디오가 아닌, 비디오 출력도 지원한다.

물론 비디오 출력도 WMV (Window Media Video) 확장자만 지원하지만, 그래도 띄울수 있다는게 어디인가!

 

XNA에서는 가장 큰 문제점이 있는데, 자기가 사용하려는 동영상이나 오디오 소스가 DRM 처리가 되어있다면 사용하지 못한다.

그래서 정 쓰고싶다면 DRM 처리가 되어 있는 소스에 한해서 DRM 제거 프로그램이나 직접 만들어서 처리를 해주어야 한다.

큰 문제점을 안고 있지만 더욱 괜찮은 게임을 구현하기 위해서는 필수적인 선택이 아닐까 생각한다.

(물론 FFMPEG를 사용하면 다른 확장자나 DRM 관련해서 문제를 생각할 필요가 없지만 FFMPEG는 상당히 어렵고 까다로우므로 섣불리 했다가 멘탈이 붕괴될 수도 있다.)

 

우리는 동영상을 띄워볼텐데, 동영상을 화면 크기에 딱 맞게 뿌려보도록 할 것이다.

 

소스부터 보도록 하자.

 

 

여태껏 했던 것 중에 가장 소스가 길 것이다.

그래도 굉장히 쉽게 뿌릴 수 있다.

 

먼저 필수적으로 동영상을 렌더링 하기위해서는 어떤 과정을 거치는지를 알아야 한다.

동영상 자체도 사실은 애니메이션의 일종이라 생각하면 쉽다.

 

1. 띄워줄 동영상을 가져온다

2. 동영상을 디코딩 한다. (코드로 바꾸는 과정)

3. 디코딩된 동영상을 프레임 단위로 재 해석 한다.

4. 프레임 단위로 만들어진 텍스쳐를 프레임에 맞게 계속 텍스쳐를 가져와서 넣어준다.

5. 그리고 렌더링에서 Texture2D에 넣어서 같이 만들어주면 된다.

 

이러한 과정을 거치지만, XNA는 그러한 과정이 필요없이 함수로 제공하므로 함수를 사용해주면 된다.

 

처음으로 볼 곳은 Initialize 와 LoadContent 인데 별로 볼 것은 없다.

 

 

여기서 중요한 것은 아까도 언급했듯 동영상 파일은

 

1. DRM 이 걸려있으면 안된다

2. DRM 이 걸려있으면 해제를 해주는 프로그램이나 다른 방법으로 풀어주어야 한다.

3. WMV 파일만 가능하다.

 

이 3가지를 유의하면서 출력할 동영상을 Content 안에 넣어주고 해주어야 한다.

 

그 다음, 가장 중요한 Render 쪽을 보도록 하자

 

 

SpriteBatch는 예전 글에 썻듯 "도화지" 이다.

위에 말한 것 처럼 우리는 프레임에 맞게 텍스쳐로 분할 시켰으며,

그 과정에서 나오는 텍스쳐들을 도화지에 뿌려주어야 하므로 SpriteBatch가 필요하다.

 

즉 60프레임의 영상이 있고, 이게 1분동안의 상영시간을 가진다면 3600장의 텍스쳐가 만들어 진다는 것이다.

그 잘라놓은 프레임을 가져오는 함수가 존재한다. 바로 아래의 소스이다.

 

 

이 구문은 비디오 플레이어의 GetTexture를 사용해서 분할된 프레임을 가져온다.

시간이 재생됨에따라 다음 프레임이 재생이 되서 텍스쳐를 가져오게 되며 우리는 그것을 draw하여 뿌려주게 된다.

 

물론 Video도 Stop및 Pause, Resume등이 존재하며 사운드 채널도 정지 재생등이 존재한다.

이 것은 한번 찾아보도록 하자.

 

 

p.s

 video 를 사용하려면 using Microsoft.Xna.Framework.Media; 를 해주어야하는데, 이렇게 등록을 해주어도 오류가 날 것이다.

 이 오류를 해결하려면 video를 참조에서 등록해주어야 한다.

 Microsoft.Xna.Framework.Media가 있는 곳은 XNA GameStudio를 다운로드 받은 위치에 존재한다.

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment