전 아이폰 유저입니다. 작년 12월말 부터 아이폰을 사용하고 있습니다. 전 많은 어플들을 사용하고 있는데, 얼마 전부터 AirVideo라는 어플을 사용하기 시작했습니다.

AirVideo 어플은 어떤 어플인가?

AirVideo개인 컴퓨터에 서버를 띄워놓고 그 서버를 통해 컴퓨터에 있는 동영상을 스트리밍하여 자신의 아이폰에서 받아 볼 수 있게 해주는 어플입니다. 아이폰에서는 mp4 포맷의 동영상만 재생하기 때문에 아이폰에서 동영상을 보기 위해선 사용자가 직접 동영상을 mp4로 인코딩 해야되기 때문에 불편함이 있었습니다. 하지만 AirVideo서버에서는 자동으로 mp4 포맷으로 인코딩하여 스트리밍 해주기 때문에 사용자가 동영상을 직접 인코딩할 필요가 없습니다. 또한 생각 외로 동영상이 끊기는 일이 거의 없어 호평을 받고 있습니다. '평가용 무료어플을 다운 받을 필요 없이 바로 유료로 질러라'라는 말이 있을 정도입니다.

airvideo-loading-screen

하지만 전 그동안 이 어플을 사용하고 있지 않았습니다. 그 이유는 AirVideo의 개발사인 inmethod에서 제공하고 있는 AirVideo 서버는 공식적으로 Windows, Max OS X만 지원하기 때문입니다. 하지만 집에 있는 PC는 WOL(Wake On Lan)[1] 기능도 없고, 회사 PC는 방화벽 등 네트워크 설정때문에 외부에서 접근이 불가능하여 AirVideo 서버를 사용하기 힘든 환경[2] 이었습니다. 제게 개인 서버가 있긴 하나, 우분투 리눅스가 깔려있기 때문에 공식적인 AirVideo서버를 사용할 수 없었습니다. 또한 설치된 우분투가 서버버전으로 GUI환경이 제공되지 않는 버전이라 와인 등으로 윈도우 바이너리를 돌리기 힘든 환경이었습니다. (혹시 GUI환경이 제공되는 리눅스를 사용하고 계신 분은 윈도우용 바이너리를 리눅스상에서 실행시켜주는 와인을 이용하여 GUI버전의 Window AirVideo 서버를 직접 구동시키실 수 있습니다) 따라서 그 동안 서버를 돌릴 마땅한 환경이 없어서 AirVideo 어플이 좋은건 알고 있엇지만, 사용하지 못하고 있었습니다. 하지만 방법을 찾던 중 리눅스에서 돌아가는 AirVideo 서버 모듈이 있다는 말을 듣고 우분투에 깔아보기로 하였습니다.

airvideo-server-support

AirVideo에 더 자세한 정보를 알고 싶으시면, AirVideo 홈페이지[3]에 가셔서 확인하시기 바랍니다.

AirVideo 서버를 우분투에 설치하자!

AirVideo 서버를 우분투 리눅스에 설치하기 위해서는 서버를 설치하기전, 서버 구동에 필요한 라이브러리 프로그램들을 먼저 설치해야 합니다. 이제 소개될 과정들을 차근차근 따라가시면 큰 어려움 없이 AirVideo 서버를 우분투 리눅스에서 돌리실 수 있을 것 입니다.

1. AirVideo 서버 구동에 필요한 패키지 들을 설치하자!

  1. libx264-dev 최신 버전 설치를 위해 Stéphane Marguet의 PPA 리포지터리를 우분투에 추가한다.
  2. libmp3lame-dev libfaad-dev libx264-dev libmp3lame-dev libfaad-dev mpeg4ip-server faac 패키지 들을 apt-get을 이용하여 설치한다.

AirVideo 서버는 동영상 스트리밍 외에도 인코딩을 하기 때문에 몇 가지 패키지들을 추가로 필요로 합니다. 우분투 리눅스에서는 apt-get 명령어로 큰 어려움 없이 패키지를을 설치 할 수 있습니다. 하지만 한 가지 문제점이 있습니다. 다음 단계에서 설치할 FFmpeg는 libx264-dev를 필요로 하는데, 현재 우분투 리포지터리에 올라와 있는 libx264-dev는 오래된 버전이라 최신버전(2010년)으로 설치해 줘야합니다. 오래된 버전을 설치하면 FFmpeg를 컴파일 할 때 오류를 내뱉게 됩니다. 최신버전이 있는 리포지터리를 우분투에 추가하여 최신 버전의 libx264-dev를 설치 할 수 있도록 합니다.

최신버전의 libx264-dev를 설치하기 위해 다음과 같은 명령어로 해당 버전이 올라와 있는 Stéphane Marguet의 PPA를 추가 합니다.

    sudo add-apt-repository ppa:user_id/ppa
    sudo apt-get update

위 명령어에 대한 자세한 정보를 알고 싶으시다면, PPA 관련 사이트에서 확인하도록 합시다. 이 사이트에서 PPA를 추가하기 위한 자세한 설명에 대한 페이지(https://launchpad.net/+help/soyuz/ppa-sources-list.html)를 직접 참고하셔도 됩니다.

이제 최신 버전의 libx264-dev가 설치된 리포지터리를 추가하였으므로, 아래와 같은 명령어로 필요한 패키지들을 설치합시다.

    sudo apt-get install libmp3lame-dev libfaad-dev libx264-dev libmp3lame-dev libfaad-dev mpeg4ip-server faac

필요한 패키지들이 자동으로 설치가 됩니다.

2. 동영상 인코딩에 필요한 FFmpeg 를 설치하자!

  1. 커스터마이징 되어 있는 FFmpeg 소스파일을 AirVideo 홈페이지에서 다운받는다.
  2. 서버에 올려 컴파일하여 ffmpeg 실행 파일을 만든다.
  3. ffmpeg 파일의 퍼미션(755)과 소유자/그룹 조정을 하여 적당한 폴더에 복사한다.

앞에서 말씀드렸다시피, AirVideo서버에서 mp4로 인코딩하기 위해 FFmpeg라는 프로그램이 필요합니다. AirVideo 서버 내부에서 FFmpeg 프로그램을 호출을 하는 형태로 되어있는데, 공식적으로 지원하는 Windows, OS X 서버에서도 이 프로그램을 사용합니다.

그런데 여기서 주의해야할 점은, AirVideo서버가 사용하는 FFmpeg는 AirVideo서버를 위해 커스터마이징 된 버전이라는 점 입니다. 따라서 FFmpeg 에서 제공하는 정식버전을 사용하면 안되고, inmethod사의 홈페이지에서 커스터마이징된 버전을 다운받아 사용해야합니다.

AirVideo 라이센스 페이지(http://www.inmethod.com/air-video/licenses.html)의 You can download the complete source code used to build FFMpeg here.에서 다운로드 받으시면 됩니다. 다운 받으면 압축파일이 있는데, 이 압축파일과 압축파일 안에 있는 아카이브를 모두 풀어 서버의 아무 폴더에 업로드를 시킵니다.

소스파일이므로 컴파일 하여 사용해야 합니다. 다음과 같은 명령어로 FFmpeg 를 컴파일하여 실행 파일을 만들어 냅니다. 전 컴파일할 때 꽤 오래 걸렸으며, 15분 정도 걸렸다는 분도 있습니다. 아래 명령어들은 서버 설정에 따라 다르겠지만 보통은 root 권한으로 수행되어야 합니다.

    ./configure --enable-pthreads --disable-shared --enable-static --enable-gpl --enable-libx264 --enable-libmp3lame --enable-libfaad --disable-decoder=aac
    make

ffmpeg라는 파일이 생성되었을 것입니다. 이 파일이 실행파일입니다. 이 파일의 권한은 chmod 명령어를 이용하여 755로 줘야하고, 소속 그룹 및 사용자를 chown명령어를 이용하여 root:root 로 설정하여 줍니다. 사용자마다 다르겠지만 전 이 실행파일을 /usr/bin 폴더 안에 넣었습니다.

한 가지 팁을 더 설명드리자면, configure 할 대 libx264-dev가 오래된 버전이라는 에러메세지가 나오면 Stéphane Marguet의 PPA가 제대로 추가되었는지 확인하고 libx264-dev를 다시 설치해 주시기 바랍니다.

3. AirVideo 서버를 설치하고 설정 파일을 설정하자!

  1. AirVideoServerLinux.jar 파일과 test.properties 파일을 다운받아 서버에 올린다.
  2. test.properties파일을 자신의 서버에 맞게 수정한다.
  3. 적당한 계정으로 java -jar AirVideoServerLinux.jar test.properties 하여 서버를 실행한다.

이제 AirVideo 서버를 설치할 준비가 모두 끝났습니다. 이제 AirVideo서버를 본격적으로 시작해 봅시다. AirVideo포럼의 한 포스팅(http://www.inmethod.com/forum/posts/list/60/34.page#3935)에서 AirVideoServer.jar 파일과 test.properties 파일을 다운 받습니다. AirVideoServer.jar 는 AirVideo 리눅스용 서버를 돌리기 위한 jar파일이며, java 머신으로 실행되어야 합니다. 따라서 서버에 JRE 혹은 JDK가 설치되어 있어야 합니다. iPad를 지원하는 Alpha 버전은 http://inmethod.com/air-video/download/linux/alpha2/AirVideoServerLinux.jar 에서 다운 받을 수 있다고 합니다만, Alpha 버전에 대한 자세한 사항은 잘 모르겠습니다.

위 두 파일을 서버에 올립니다. 기본적으로 AirVideo서버는 root계정이 아닌 특정 유저의 권한으로 실행되는 것이 좋습니다. 왜냐면 AirVideo에서 스트리밍을 위해 참조하는 동영상 폴더와 동영상들이 AirVideo의 계정과 같아야 하기 때문입니다. 같지 않다면, 동영상들을 읽어오지 못하거나 자신의 사용자/사용자 그룹으로 파일의 설정을 바꿔버럽니다. 따라서 알맞게 권한과 사용자 그룹, 사용자를 설정합니다.

이제 test.properties 파일을 바꿔봅시다. test.properties 파일에서 바꿀 설정 값들은 다음과 같습니다.

path.ffmpeg : 앞 단계에서 컴파일하여 생성된 FFmpeg 실행파일인 ffmpeg의 경로입니다. 서버에 따라 값이 다르므로, 직접 확인하여 설정하셔야 합니다. 제 경우는 ffmpeg파일을 /usr/bin 폴더에 옮겨놓있기 때문에, /usr/bin/ffmpeg 였습니다. path.mp4creator : mp4creator 프로그램의 경로입니다. 'whereis mp4creator' 명령어를 통해서 프로그램이 설치된 경로를 찾아 알맞게 수정합니다. path.faac : faac 프로그램의 경로입니다. 'whereis facc' 명령어를 통해서 프로그램이 설치된 경로를 찾아 알맞게 수정합니다. password : 서버의 비밀번호를 설정합니다. 설정하게 되면 AirVideo어플로 서버에 접속하게 되면 비밀번호를 요청하게 되므로, 보안상 필요한 경우 설정합니다. folders : AirVideo 서버에서 참조할 동영상 폴더를 지정합니다. <폴더 1>:<폴더 1위치>, <폴더 2>:<폴더 2위치>와 같은 형식으로 지정하시면 됩니다.

설정이 끝났다면, 아래 명령어를 통해 AirVideo 실행이 가능합니다.

    java -jar AirVideoServerLinux.jar test.properties

만약 제대로 실행이 안된다면 나오는 메세지를 보고 수정을 하시거나, 특별한 메세지가 없는 경우, ffmpeg 등 프로그램이 제대로 설치되었나, 혹은 path값이 제대로 맞는지, 실행권한은 있는지 확인해보시기 바랍니다.

이제 아이폰의 AirVideo 어플에서 서버의 IP값을 넣어 제대로 접속되는지 확인합니다. 리눅스 서버 버전의 경우 PIN을 통한 접속은 지원하지 않으므로 꼭 IP를 쳐서 접속하여야 합니다.

4. 기타 몇 가지 알아두면 좋은 사실들

컴퓨터가 켜질 때 자동으로 AirVideo서버를 구동시키기 위해선 다음과 같은 내용의 /etc/init/airvideo.conf 파일을 생성해주시면 됩니다. 파일 소유권은 root:root로 하시면 됩니다.

    start on runlevel [2345]
    stop on shutdown
    respawn
    exec sudo -H -n -u {계정명} LANG=ko_KR.UTF-8 /usr/bin/java -jar {jar파일경로}/AirVideoServerLinux.jar {설정파일경로}/test.properties

위에서 계정명은 동영상 파일의 소유자로 해주시면 됩니다. 위와 같이 설정하면 서버가 명시된 계정의 권한으로 구동되게 됩니다. 이제 서버를 껏다 켜도 AirVideo서버가 자동으로 실행됩니다. 수동으로 서버의 실행/종료를 하기 위해서는 다음과 같은 명령어를 이용하시면 됩니다.

    sudo start airvideo
    sudo stop airvideo

서버는 반드시 동영상 폴더의 소유자와 같은 계정으로 구동되로록 합니다. 그렇지 않은 경우 동영상이 목록에 제대로 표시가 안되거나 동영상의 소유자가 맘대로 바뀌어버리게 되므로 주의합니다.

AirVideo 어플에서 폴더 혹은 동영상이 제대로 표시가 안된다면 서버에서 지원하는 LANG 변수 문제입니다. LANG 변수가 반드시 UTF-8(제 경우에는 ko_KR.UTF-8)로 되어있어야 합니다. 혹 EUC-KR등 다른 값으로 설정되어 있는 경우에는 동영상 혹은 폴더 목록이 제대로 표시되지 않는 것 같습니다. 전 기본값이 UTF-8로 설정되어 있어 별 문제가 없었지만 혹시 EUC-KR로 설정되어 있는 경우에는 쉘 스크립트를 이용하여 UTF-8 환경에서 서버를 구동시키도록 합시다.

AirVideo의 리눅스 버전의 서버는 소개된 버전으로는 port 변경이 불가능 합니다. 무조건 기본 포트(45631)로 열리게 되고, 혹시 해당 포트가 열려져 있다면 포트 번호를 하나 증가(45632)시켜서 서버를 구동시킵니다. 만약 해당 포트로도 이미 열려있다면 번호를 하나 더 증가(45633)시켜서  서버를 구동시킵니다. 최대 45개 까지 증가시켜 여는 것으로 보입니다. 하지만 전 서버 소스를 변경하여 포트를 지정하여 열 수 있도록 변경하여 사용하고 있습니다. 이 방법으로 제 서버에는 AirVideo 서버를 여러개의 포트로 여러 대 구동시켜 여러 사람이 사용하고 있습니다. 이 방법에 대해선 추후 포스팅을 통해 소개하도록 하겠습니다.

서버를 구동시키는 계정의 home폴더에는 숨긴폴더로 .air-video-server 폴더가 생깁니다. 이 안에는 서버가 필요한 정보들을 저장하게 되는데, 각 동영상의 썸네일 정보를 포함한 각종 정보 등을 저장합니다. 이런 방법을 사용하는 이유는 다음에 서버가 다시 구동되어도 이런 정보를 다시 추출하기 위해 또 다른 작업을 하지 않게 하여 더 빠른 속도를 추구하기 위함입니다. 그리고 당연하지만, 설정파일을 바꾼 후 서버에 적용하기 위해선 서버를 재시작해야 합니다.

제 홈서버는 아톰 d510에 메모리는 4GB입니다. 그리고 OS는 우분투 2.6.31-14 서버버전입니다. 이번에 설치한 서버를 통해 WIFI로 동영상을 봤을 때, 초반 버퍼링은 평균수준이었고, 중간에 끊기는 현상은 없었습니다. 3G의 경우 버퍼링이 좀 길었고 가끔씩 끊기는 경우가 있었지만, 특별히 문제될 정도는 아니었습니다. 특히 이미 인코딩된 동영상을 스트리밍받는 경우 초반 버퍼링의 시간은 많이 단축되었습니다. 이 정도의 서버로 이 정도 퍼포먼스면 상당히 만족스럽습니다.

좀 더 자세한 AirVideo 리눅스 서버 설치와 관련된 정보는 아래를 참조해 주시기 바랍니다.

[1] Window가 설치된 PC에 AirVideo를 설치하여 시용하기 위해선 PC가 항상켜져있어야 하지만 전력소모가 심합니다. 아니면 WOL기능이 있어 필요할때만 인터넷상에서 PC를 켤 수 있어야 하는데 제 PC에는 그런 기능이 없습니다. [2] 원래 PIN번호로 사용할 수 있어야 한다고 하는데, 실제로는 불가능했습니다. 이유는 모르겠지만 회사 운영팀의 네트워크 설정 때문이 아닌가 생각합니다. [3] 유료 어플은 2.99 달러에 판매되고 있습니다. 평가용무료어플은 목록에 최대 3개의 동영상밖에 안보입니다.