DVD Playing HOWTONathan Rowlan, nkr@helo.orgv0.1.7 19 May 2000 번역:2000년5월28일한능균(nkhahn@yahoo.com)리눅스에서 DVD 영화 타이틀을 상영하는 방법에 대한 설명을 편안하게 따라하기 바란다. 1. 소개1.1 목적이 문서의 목적은 리눅스에서 DVD 영화 타이틀을 상영하는 방법을 단계별로 설명하기 위함이다. 최대한 명확하게 설명하려고 했지만, 몇 가지는 혼동스럽거나 오류가 있을 것이다. 이에 대해 나에게 알려주면 수정하도록 하겠다. 어떤 질문이라도 있으면, livid-dev 메일링 리스트에 가입하여 livid-dev-subscribe@linuxvideo.org 로 이메일을 보내기 바란다. 1.2 문서 최신 버젼들이 하우투 문서는 html과 tex를 포함하여 다양한 형태로 접할 수 있다. 최신 버젼의 문서는 나의 사이트( http://helo.org/dvd/howto/) 에서 언제든지 가져갈 수 있다. 가급적이면 가장 최신 버전의 하우투 문서를 가져가기를 강력히 추천한다. 왜냐하면 이 하우투 문서는 굉장히 자주 갱신되기 때문이다. 1.3 저작권과 등록상표들이 설명서는 전부 또는 일부를 무료로 복제할 수 있다. 다만, 다음 사항을 준수하여야 한다.
상기의 규칙들은 학술적인 목적일 경우에는 예외가 적용된다: 저자에게 편지써서 문의하기 바란다. 이러한 규제들은 우리들을 저자로서 보호하려는 것이지 배우고자 하는 사람 또는 가르치는 사람들을 규제하려는 것이 아니다. 이 문서에 있는 모든 소스 코드( 이 문서가 쓰여진 SGML 제외)는 GNU General Public License 하에 위치한다. GNU General Public License는 the GNU archive 에서 익명 FTP로 얻을 수 있다. 1.4 감사의 말OMS 저자들과 많은 시간과 노력을 프로젝트에 바쳐온 LiviD 개발자들에게 감사의 말을 전한다. 또한 이 하우투 문서를 더욱 좋게 만들도록 의견을 보내준 사람들에게도 역시 감사의 말을 전한다. 이 하우투 문서 대부분의 구성 및 형식은 Mark F. Komarinski의 HOWTO-HOWTO ( http://www.linuxdoc.org/) 를 참조하였다. 1.5 번역 문서내가 접수한 모든 번역문서는 http://helo.org/dvd/howto/trans/ 에 저장해 놓았다. 혹시 이 하우투 문서를 다른 언어로 번역하고자 한다면, nkr@helo.org 로 이메일을 보내주기 바란다. 2. 요구사항이 하우투 문서는 여러분이 다음과 같이 준비가 되어있다고 전제한다:
3. 파일들우선 무엇보다도 MTRR(Memory Type Range Register)과 DVD ioctl을 지원하는 커널을 구해야 한다. MTRR은 커널 2.2.11 이후 버전에는 포함(내가 틀렸다면 지적해 주기 바람)되어 있으므로, DVD ioctl을 얻기 위해서는 여러분의 커널을 업데이트할 필요가 있을지도 모른다. 두 가지 방법이 있는데, 개발 버전 커널(v2.3.x)을 다운로드 받거나, 안정된 배포 버전(v2.2.x)으로 패치하는 방법이다. 패치 파일은 http://www.kernel.dk/에서, 커널 파일은 ftp://ftp.kernel.org/의 여러 미러 사이트에서 구할 수 있다. 다음으로, LiViD 유틸리티 파일들이 필요하다. 다음과 같이 두 가지 방법이 있다:
다음과 같이 쉘명령을 사용해서 유틸리티 파일들을 구한다: # mkdir ~/livid # cd ~/livid # export CVSROOT=:pserver:anonymous@cvs.linuxvideo.org:/cvs/livid # cvs login (Logging in to anonymous@cvs.linuxvideo.org) CVS password: anonymous의 패스워드는 없다. 그냥 엔터키만 누른다. # cvs -z3 co -P nist ac3dec oms mpeg2dec 해당 디렉토리로 파일들이 모두 다운로드 될것이다.
다음 사이트에서 찾을 수 있다: http://linuxvideo.org/developer/data/livid.tar.gz 4. 설치4.1 커널만일 여러분이 개발 버전 커널(2.3.x)을 가지고 있으면, 이미 DVD Ioctl 지원이 가능한 것이므로, MTRR 지원이 커널 구성 파일에 들어있음을 확인하면 된다. 그리고 나서 늘상 하듯이 커널 컴파일과 설치를 하면 된다. 기존의 커널을 패치하고 싶으면, 다음 사이트로 간다. http://www.kernel.dk/그리고 기존 커널에 맞는 적절한 패치를 다운로드 한다. 만일 여러분의 커널을 설치하고, 패치하는 방법을 모른다면 다음의 하우투 문서를 반드시 읽어보기 바란다: http://howto.tucows.com/LDP/HOWTO/Kernel-HOWTO.html 4.2 LiViD 유틸리티들LiViD 유틸리티를 설치하려면, 여러분 시스템의 /etc/ld.so.conf 파일안에 /usr/local/lib등의 경로가 기록되어있음을 반드시 확인할 필요가 있다. 다음의 과정을 따라하면, 여러분의 시스템에 LiViD 유틸리티를 컴파일 및 설치하게 될 것이다. 만일 문제가 발생하면 "문제점들"을 참조하기 바란다.
ac3dec: # cd ~/livid/ac3dec # ./configure # make # make install oms: # cd ~/livid/oms # ./autogen.sh # ./configure # make # make install mpeg2dec: # cd ~/livid/mpeg2dec # ./autogen.sh # make # make install 이제 필수적인 LiViD 유틸리티들이 설치되어있을 것이다. oms는 DVD 데이터를 전송하기위한 몇가지 특별한 fifo 파이프들을 필요로 한다. 이 파이프들은 다음의 명령으로 만들 수 있다(단, 기존에 없을 경우에만):
# mkfifo /tmp/video # mkfifo /tmp/audio 마지막으로 한 가지가 더 남아있다. oms는 /dev/dvd가 여러분의 DVD 드라이브가 존재하는 곳(예를들면, /dev/hdb1 또는 /dev/scd0)에 심볼 링크되어 있을 것을 필요로 한다. 만일 DVD 드라이브가 /dev/cdrom에 되어있으면, 다음과 같이 심볼 링크를 만들어 준다:
# ln -s /dev/cdrom /dev/dvd 일반적으로 심볼 링크를 또 다른 심볼 링크로 만들지 않는 것이 좋다. 왜냐하면, 이렇게 하면 불필요한 입출력을 부과하기 때문이다. /dev/cdrom을 DVD 드라이브가 위치한 정확한 디바이스로 대치하도록 한다. 5. 재생하기DVD를 재생하려면 16비트 컬러 모드에서 X-Window가 필요하다. 드라이브에 DVD 타이틀을 넣고 다음과 같이 명령을 준다:
# ac3dec /tmp/audio& mpeg2dec /tmp/video& oms 모두 제대로 동작한다면, DVDDB에서 디스크 이름을 볼 것인지를 물어보는 문자열이 나타날 것이다. '예'라고 답하는 것이 안전하다. 그리고나서, oms 패널이 팝업화면으로 나타날 것이다. Play버튼을 누르면 비디오 윈도우가 나타나고 재생이 시작된다. 6. 그 밖에
6.1 MTRR 설정하기
** Matrox 비디오 카드를 갖고 있는 사람들은 볼 것 ** matroxfb를 커널에 컴파일했다면, 아마도 MTRR들이 이미 설치되어있을 것이다. 그렇다면 이 장을 건너뛰어도 무방할 것으로 본다. MTRR을 설정함으로써 경우에 따라 비디오 성능이 상당히 좋아질 수 있다. 따라서 설정 하기를 권고한다. 먼저, 다음과 같이 명령을 줘서 여러분의 커널이 MTRR 지원을 포함하고 있는지를 확인할 필요가 있다:
# ls /proc/mtrr 만일 /proc/mtrr과 같은 것이 없다고 하면, 여러분의 커널을 MTRR 지원과 함께 다시 컴파일 할 필요가 있다(이는 커널 컴파일 menuconfig안의 "Processor type and features"에 있다). 일단 MTRR이 제대로 동작하고 있음을 확인했으면, 여러분의 비디오 카드의 기본 메모리 주소와 비디오 램의 크기가 얼마인가를 알고 있어야 한다. 이를 알아보는 가장 손쉬운 방법은 X-Window가 실행할 때 텍스트 화면으로 출력하는 정보를 보는 것이다. 이 텍스트 화면 출력 정보는 대부분 모니터 화면위로 스크롤되어 보이지 않게 되거나 다른 tty로 화면 전환이 일어나면서 사라져 버리기 때문에, 이 X-Window 출력정보를 파일(xoutput)로 리타이렉션해서 저장하면 된다. 다음과 같이 명령을 준다:
# startx 2> xoutput 우리가 필요한 정보를 담고 있는 행은 xouput 파일의 중간 쯤에 있을 것이다. 다음과 같은 행을 찾아 본다:
(--) SVGA: PCI: NVidia Riva TNT2 rev 17, Memory @ 0xee000000, 0xe2000000 일단 xouput 파일에서 해당 위치를 찾았으면 행의 끝 부분에 있는 메모리 주소를 종이에 적어둔다. 이 예에서는 0xe2000000 이다. 여러분의 하드웨어 사양에 따라 복수개의 메모리 주소가 있을 수도, 또는 없을 수도 있으니까, 좀 다르게 나타나더라도 걱정하지 않아도 된다. 메모리 주소를 적었으면 xoutput 파일은 지워도 된다. 다음으로 새 MTRR를 만들도록 한다. 이를 만들려면 여러분의 비디오 카드의 비디오 램의 크기를 16진수값으로 알고 있어야 한다. 다음을 참조한다:
4MB -- 0x400000 8MB -- 0x800000 16MB -- 0x1000000 32MB -- 0x2000000 다음과 같이 MTRR를 추가한다:
# echo "base=0xe2000000 size=0x2000000 type=write-combining" >| /proc/mtrr 단, 위의 "0xe2000000"와 "0x2000000" 부분을 여러분의 비디오 카드의 기본 메모리 주소와 비디오 램의 크기의 값으로 바꿔서 적어준다. 이제 MTRR이 설정되었다, 다음과 같이 확인해 본다:
# cat /proc/mtrr 그러면 다음과 비슷한 결과를 보게 될 것이다:
reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1 reg01: base=0xe2000000 (3616MB), size= 32MB: write-combining, count=1 한번 더, 숫자값들이 아마도 이것과 다를지도 모른다. 걱정하지 않아도 된다. 7. 문제점들7.1 실행 오류들다음은 지금까지 알려진 몇 가지 실행 시 오류(들)이다. Illegal Instruction Error만일 비-인텔 계열의 칩(특히 K6) 사용자가 mpeg2video를 실행하였을 때 이러한 오류가 발생했다면, nist/configure.in 파일의 129번 행과 130번 행 주목한다. 다음과 같을 것이다:
CFLAGS="$CFLAGS -DHAVE_MMX -DLINUX -march=i686 -fschedule-insns2 -malign-doub CXXFLAGS="$CXXFLAGS -DHAVE_MMX -DLINUX -march=i686 -fschedule-insns2 -malign- 양쪽 행에 있는 "-march=i686"를 "-march=i586"로 모두 대체하고, 재컴파일 및 재설치 한다. 7.2 컴파일 오류들다음은 일반적인 컴파일 시 오류들이다. `dvd_struct' undeclared...이 유틸리티 파일들을 컴파일할 때, 사람들이 가장 빈번하게 겪게되는 문제는 oms가 커널 헤더파일들을 이상한 다른 곳에서 찾기 때문에 비롯된다. oms는 기본적으로 /usr/include/[linux|asm]에 있는 헤더파일들을 사용하지만, 이들 헤더파일들은 안정커널 버젼에서나 볼 수 있는 것이다. 따라서 여러분들이 정상적인 프로그램을 검파일할 때, 안정버젼의 헤터파일들이 사용된다. oms는 비안정버젼(또는 패치버젼)의 커널 페더파일들을 필요로한다. 따라서 oms가 컴파일을 시도할 때, 많은 모듈들이 정의되어있지 못하고, 결국은 컴파일 오류가 나오게 되는 것이다. 이 문제를 해결하기위한 가장 좋은 방법은 oms의 Makefile을 수정하여 -I/usr/src/linux/include를 CFLAGS와 CXXFLAGS를 가리키게 해준다.(이 정보를 주신 Adam Powell에게 감사를 드린다)
다음과 같이 명령을 줘서 해결한다: # mkdir /usr/include/old # mv /usr/include/linux /usr/include/old/linux # mv /usr/include/asm /usr/include/old/asm # mv /usr/include/scsi /usr/include/old/scsi # ln -s /usr/src/linux/include/linux /usr/include/linux # ln -s /usr/src/linux/include/scsi /usr/include/scsi # ln -s /usr/src/linux/include/asm /usr/include/asm can't determine absolute dir of '../../../../src/plugin/codec/mpeg2dec/.libs'또 다른 일반적인 오류는 oms/src/plugin/codec/mpeg2dec/.libs 디렉토리에 있다. 몇 가지 이유로 인하여 이 디렉토리는 존재하지 않게 되는데, 이는 컴파일에 필요하다. 이를 해결하기 위해서는 단지 이 디렉토리를 만들어주면 된다:
# mkdir src/plugin/codec/mpeg2dec/.libs 7.3 안되는 기능들원래 의도된 대로 되어야 하는데, 현재 안되는 기능들:
7.4 그밖의 오류들만일 여러분들이 경험한 오류들이 이곳 목록에 없다면, 현재의 CVS 코드에 버그가 존재한다고 봐야 할 것이다. 최상의 방법은 몇 일간 기다려보고, CVS로부터 업데이트하는 것이다. 여러분의 질문을 받을 수 있는 메일링 리스트가 준비되어있다. livid-dev-subscribe@linuxvideo.org로 빈 메일을 보내면 가입할 수 있다. 8. 할 일들
|
Your mind understands what you have been taught; your heart, what is true. |