VA-API는 인텔 내장 VGA에서 작동하는 동영상 가속 API입니다.

참고사이트; http://doityourselfhtpc.wordpress.com/2010/09/09/intel-core-i3-h264-gpu-acceleration-using-ubuntu-and-xbmc/

동영상 가속을 위해 VA-API 를 사용할 경우 기존에 패키지 되어 있는 libva의 deb 버전을 그대로 설치하면 터미널에서 vainfo로 가속 코덱을 확인할 경우i965_drv_video.so 를 열 수 없다고 출력됩니다. 그럴 경우 직접 libva 를 빌드하여 패키지 파일을 생성한 후 설치해 주어야 합니다. 먼저 터미널에 아래 명령어를 입력하여 컴파일에 필요한 라이브러리들을 설치합니다.

 sudo apt-get install cdbs libdrm-dev x11proto-xext-dev libxext-dev libxfixes-dev libgl1-mesa-dev automake1.9 

다음 아래의 순서대로 실행합니다.

 wget http://www.splitted-desktop.com/~gbeauchesne/libva/libva_0.31.1-1+sds4.tar.gz
tar -zxpvf libva_0.31.1-1+sds4.tar.gz
cd libva-0.31.1
dpkg-buildpackage -rfakeroot -uc -us
sudo dpkg -i ../libva1_0.31.1-1+sds4_i386.deb
sudo dpkg -i ../libva-driver-i965_0.31.1-1+sds4_i386.deb 

이상없이 컴파일이 되었다면 터미널을 시작한 디렉토리에 4개의 deb 패키지가 생성되어 있습니다. 그럼 이제 이 패키지들을 설치해 줍니다.

 sudo dpkg -i ../libva*.deb 

설치가 끝난 후에 터미널에 vainfo를 입력하면 VGA 카드가 가속할 수 있는 코덱이 아래와 같이 표시됩니다.

 shahn@Notebook:~$ vainfo
libva: libva version 0.31.1-sds1
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/i965_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.31
vainfo: Driver version: i965 Driver 0.1
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple            :	VAEntrypointVLD
VAProfileMPEG2Main              :	VAEntrypointVLD
VAProfileH264Baseline           :	VAEntrypointVLD
VAProfileH264Main               :	VAEntrypointVLD
VAProfileH264High               :	VAEntrypointVLD
shahn@Notebook:~$ 

이제 VA-API를 사용하도록 컴파일된 mplayer로 실행해서 로그 파일을 확인해 보면 아래와 같이 정상적으로 가속되고 있음을 확인할 수 있습니다.

VIDEO: [H264] 1920×800 0bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s)
libva: libva version 0.31.1-sds1
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/i965_drv_video.so
libva: va_openDriver() returns 0
=======================================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
[VD_FFMPEG] VA API accelerated codec.
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
=======================================================================

스마트폰과 타블릿PC, 노트북등의 기기가 널리 보급됨에 따라 외부에서 본인의 컴퓨터에 있는 미디어들을 다운로드 없이 스트리밍 형식으로 재생하는 방법이 각광 받고 있습니다. 게다가 윈도우7부터 포함된 Windows Media Player 12가 자체적으로 스트리밍형식의 라이브러리 공유 기능을 지원해 주목받고 있습니다.[1] 동영상에서는 Air Video, Wowza Media Server, Red5등이 현재 떠오르고 있습니다. 앞서 열거한 프로그램들도 당연히 음악 파일의 스트리밍을 지원하고 있으나 음악 파일만을 스트리밍 하기 원하는 사용자에게는 너무 무겁고 덩치가 큰 프로그램인 것이 사실입니다. (특히 동영상을 실시간 인코딩하여 전송하려면 서버의 사양이 꽤 좋아야 합니다.) 그러나 푸바와 외부 접속을 지원하는 UPnP 컴포넌트를 사용하면 이런 문제점들을 많이 해결할 수 있습니다.

이 플러그인은 푸바 버전 1.0.0.0 이상에서 작동합니다.

서버 설정

서버로 사용하기 전 라이브러리를 보유하고 있어야 합니다. 라이브러리는 푸바가 작동되고 있는 사이에 자동으로 갱신되므로 한 번 지정해주면 아주 손쉽게 음악 파일들을 관리할 수 있습니다. 또한 클라이언트에서 이미 만들어 놓은 라이브러리 목록을 사용하여 빠른 속도로 접근이 가능합니다.

http://www.foobar2000.org/components/view/foo_upnp 로 이동하여 다운로드 받은 후에 푸바 components 디렉토리내에 압축을 해제 합니다. 그리고 푸바를 실행하여 Preference에 들어가서 Tools 항목 아래에 보면 아래의 스크린샷과 같이 UPnP 항목이 추가되어 있습니다.

스크린샷에 설명되어 있는대로 본인의 서버에 맞게 설정을 합니다. 설정후에는 반드시 방화벽에서 푸바를 예외 설정에 지정해주어야 합니다. 또한 공유기를 사용하고 있다면 설정한 포트를 포트포워딩 해주어야 합니다.

아래는 트랜스코딩에 대한 설정 항목입니다. 만일 클라이언트에서도 푸바를 사용하여 접속한다면 이 설정은 별 필요가 없습니다. 그게 아닐 경우 FLAC, WAV등을 재생 못하는 클라이언트일 경우 MP3로 트랜스코딩하여 전송하거나, MP3라도 클라이언트측의 데이터 요금을 생각해서 좀 더 낮은 비트레이트를 가지는 (가령 320kbps MP3를 192kbps로 재인코딩) MP3로 인코딩하여 전송할 수 있습니다. 설정은 직관적이므로 본인의 필요게 맞게 설정합니다.

그리고 아래가 가장 중요하다고 할 수 있는 외부 접속에 관한 설정입니다. 만일 도메인을 보유하고 있다면 도메인 주소를 입력하고 그렇지 않다면 아이피를 입력하여 줍니다.

클라이언트 설정

서버와 마찬가지로 http://www.foobar2000.org/components/view/foo_upnp 로 이동하여 다운로드 받은 후에 푸바 components 디렉토리내에 압축을 해제 합니다. 클라이언트는 서버측에 접속하여 듣기만 하므로 별다른 설정은 필요없습니다. 아래의 스크린샷과 같이 서버에 접속합니다. 포트는 서버에서 지정한 포트입니다.

그런 후에는 View – UPnP Browser를 클릭하면 접속된 서버가 표시됩니다.
아래 스크린샷과 같이 푸바의 레이아웃 기능을 사용해 UPnP Browser를 바깥으로 빼내서 사용하면 편합니다.[2]

참고로 아이폰등의 스마트폰을 사용하고 있다면 앱으로도 접속이 가능합니다.[3]

<2011.04.17 추가>

만일 위의 add remote foobar2000 UPnP server… 메뉴가 나타나지 않을 경우 먼저 UPnP Browser 메뉴를 선택합니다. 그 후에 빈 공간에서 우클릭을 입력하면 아래와 같이 동일한 메뉴가 나옵니다. 이곳에서 한 번 활성화시키면 앞으로도 위와 같이 View 메뉴에서 컨트롤할 수 있습니다.

  1. MSN 계정을 가지고 있다면 Windows Media Player 12가 설치된 PC에서는 손쉽게 접속이 됩니다. [back]
  2. 푸바를 포터블로 설치하고 레이아웃을 이와 같이 설정해 둔 다음에 서버 접속 설정까지 완료한 후 폴더째 압축해서 본인의 서버에 넣어놓으면 어느 컴퓨터에서나 손쉽게 사용할 수 있습니다. [back]
  3. 아이폰에서는 스트림 서버에 접속할 수 있는 PlugPlayer로 접속이 가능합니다. [back]

외부에서도 내부에서와 마찬가지로 서버컴 디렉토리를 네트워크 드라이브로 잡아서 사용할 수 있다면 이루 말할 수 없을 정도로 편리합니다. 이를 구현하기 위해 여러 방법이 존재합니다만 각각의 장단점이 뚜렷해서 기호에 맞게 선택을 해야합니다. 대체적으로 NetDrive, Hamachi, 일부 공유기에 포함되어 있는 VPN 기능, Windows 내장 PPTP VPN, 그리고 이 포스트에서 소개할 OpenVPN 입니다.

먼저 NetDrive는 FTP 프로토콜을 이용하여 본인의 FTP 홈디렉토리를 네트워크 드라이브로 인식시켜주는 프로그램입니다. 무엇보다도 속도가 위에 언급한 4가지 중에 제일 빠릅니다. 서버와 호스트가 모두 100Mbps급 광랜을 사용하고 있다면 블루레이 원본까지 무리없이 그대로 재생하여 볼 수 있습니다. 게다가 개인사용자에게는 무료이고 설치 또한 간단하며 설정은 일반 FTP 접속과 같으므로 사용상에 어려움 또한 없습니다. 다만 결정적인 문제가 안정성입니다. 아무리 서버측 FTP 데몬이 안정적이고 인터넷 환경 또한 좋다고 하더라도 대용량이거나 디렉토리내에 파일 갯수가 많을 경우에는 그대로 프리징이 되어 버리는 경우가 빈번합니다.

Hamachi는 가상의 네트워크를 생성하여 따로 떨어져 있는 컴퓨터들을 하나로 묶어주는 방식입니다. 우리나라에서는 이상하게도 스타의 IPX 접속을 위해 주로 사용되고 있습니다. 속도도 빠르고 인터페이스도 간단한 장점이 있습니다. 그러나 결정적인 단점은 네트워크 중개서버(즉 Hamachi로 생성한 네트워크는 Hamachi를 관리하는 서버에서 관리됩니다.)가 죽어버리면 접속을 하고 싶어도 못하는 웃지못한 상태가 됩니다. 즉 개인대 개인의 접속이 아니라 중간에 Hamachi 서버가 관련이 되어있다는 것입니다.

세번째 공유기에 포함된 VPN 기능은 별도의 VPN 서버 프로그램 설치가 필요없이 공유기 자체에서 지원하므로 공유기 관리 페이지에서 설정해주면 손쉽게 사용이 가능합니다. 그러나 성능 부분에 있어서 말그대로 맛보기 그 이상도 이하도 아닙니다. 속도가 매우 낮아 적은 용량의 문서 정도나 실시간으로 수정하고 불러올 수 있는 정도입니다. SD급 영화를 실시간으로 본다는 것은 물론이거니와 MP3 조차 실시간으로 재생이 안되는 성능입니다.

네번째로 Windows XP 이상에 내장되어 있는 PPTP 방식의 VPN 입니다. 랜카드가 2장이 있다면 클라이언트의 게이트웨이를 원격지의 게이트웨이로 설정하여 서버측의 인터넷 연결 상황을 그대로 이용할 수 있는 장점이 있습니다. 또한 블루레이 원본은 아니더라도 H.264 코덱으로 인코딩된 1080p 정도의 영상은 무리없이 클라이언트에서 재생할 정도의 속도가 보장됩니다. 안정성은 인터넷 환경은 안정적이라면 내부 네트워크를 사용하듯 무척 안정적입니다. 게다가 XP 이상의 윈도우에서는 별도의 프로그램을 인스톨하지 않고 자체 내장된 VPN 접속을 사용하면 되므로 매우 편리합니다. 다만 PPTP 형식을 사용하므로 보안에 취약점이 있으며, 서버측의 게이트웨이를 사용하려면 물리적으로 랜카드가 2장이 있어야 한다는 부담이 있습니다.

마지막으로 OpenVPN은 Windows 내장 VPN 보다는 약간 속도는 떨어지지만 OpenSSL을 이용하여 보안에 뛰어나며, 가상의 네트워크 장치를 생성하여 랜카드가 1장인 상황에서도 서버측의 게이트웨이를 사용할 수 있도록 설정할 수가 있습니다. 이를 사용하면 포트가 막힌 곳에서 본인의 서버컴에 OpenVPN으로 접속하여 집과 같은 환경으로 인터넷을 사용할 수 있습니다. 게다가 TCP와 UDP 모두 사용가능하고 포트 또한 자유롭게 설정이 가능하여 서버측의 도메인이나 IP를 차단하지 않는 이상 접속에 어려움은 없는 편입니다.

그럼 이제 OpenVPN을 이용하여 서버측의 게이트 웨이를 사용하는 법을 알아보겠습니다. 여기서 OpenVPN의 설치는 다루지 않겠습니다. 구글링만으로도 Windows에서의 OpenVPN 설치에 관한 자료는 아주 많습니다. 이 포스트에서는 클라이언트의 게이트 웨이를 서버측 게이트 웨이로 설정해서 클라이언트가 인터넷 환경을 서버와 같이 이용하는 방법에 대해서만 기재하겠습니다.

먼저 서버측에 설치된 OpenVPN의 config 파일을 편집기로 열어 아래의 두 곳을 찾아서 수정합니다.

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
push “redirect-gateway” 주석을 해제하고 이와같이 입력합니다.

.

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
push “dhcp-option DNS xxx.xxx.xxx.xxx” 서버의 DNS 주소를 확인하여 입력합니다.
push “dhcp-option DNS xxx.xxx.xxx.xxx” DNS주소가 하나 이상이면 이런 식으로 추가하여줍니다.

그리고 제어판에서 네트워크 환경을 열고 본인의 컴퓨터에 장착된 랜카드의 등록정보를 엽니다. 그리고 아래 그림과 같이 고급탭으로 이동하여 ‘다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용’에 체크 합니다. 이 때  컴퓨터에 장착된 네트워크 어댑터가 3개 이상이면 즉 실제 랜카드의 로컬 영역 연결, OpenVPN이 생성한 TAP-Wind32 Adapter외에 또 다른 어댑터가 있으면 그림과 같이 선택 콤보 박스가 나옵니다. 이 곳에서 OpenVPN의 어댑터를 선택하고 확인을 누르면 위와 같이 어댑터 아이콘에 손모양의 공유 표시가 나옵니다.

클라이언트에서 OpenVPN을 실행하기 전 www.whatismyip.com에 접속하여 클라이언트의 현재 아이피를 확인해보겠습니다.

이제 OpenVPN을 재구동시키고 클라이언트 측에서 접속을 하면 됩니다. (클라이언트 설정 파일에서 수정할 사항은 없습니다.) 그리고 다시 whatismyip 에 접속하면 아래와 같이 서버측이 아이피로 바뀐 것을 알 수 있습니다. 그리고 어댑터 정보를 확인하면 OpenVPN 주소로 게이트 웨이가 변경되고 DNS 또한 서버측과 동일하게 변경되어 있음을 확인할 수 있습니다. 단 이렇게 되면 모든 패킷이 서버측으로 갔다가 다시 클라이언트로 오게 되므로 서버의 네트워크 자원을 소모하게 됩니다.

실제적으로 인터넷 환경이 서버측과 동일하게 작동을 하는지 테스트를 해보겠습니다. 클라이언트측이 물려 있는 공유기에서 아래와 같이 네이트온을 차단하면 클라이언트 컴퓨터에서는 네이트온에 접속할 수가 없습니다.

이제 OpenVPN을 실행하고 네이트온을 실행하면 아래와 같이 정상적으로 접속됨을 확인할 수 있습니다. 이를 이용해 클라이언트가 일부 게임에서 차단된 아이피 대역을 사용하고 있는 해외인 경우나 회사의 방화벽내 있는 경우 이를 무시하고 자유롭게 사용할 수 있습니다.