<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://old.wiki.ubuntu-kr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=27.122.242.71</id>
	<title>Ubuntu Korea Community Wiki - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://old.wiki.ubuntu-kr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=27.122.242.71"/>
	<link rel="alternate" type="text/html" href="https://old.wiki.ubuntu-kr.org/index.php?title=%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/27.122.242.71"/>
	<updated>2026-10-17T03:14:49Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://old.wiki.ubuntu-kr.org/index.php?title=SDL_Programming&amp;diff=4345</id>
		<title>SDL Programming</title>
		<link rel="alternate" type="text/html" href="https://old.wiki.ubuntu-kr.org/index.php?title=SDL_Programming&amp;diff=4345"/>
		<updated>2020-12-30T09:04:01Z</updated>

		<summary type="html">&lt;p&gt;27.122.242.71: /* SDL_Image 설치 및 테스트 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 소개 =&lt;br /&gt;
== 목적 ==&lt;br /&gt;
* 이 문서는 무료 컴파일러 IDE 및 그래픽 라이브러리를 사용하여 2D 게임을 작성하는 방법에 대해 설명합니다.&lt;br /&gt;
* 이 문서에서 다루는 특정 그래픽 도구는 Simple Directmedia Layer Graphics Library의 약어 인 SDL입니다.&lt;br /&gt;
* SDL에 대해 알아야 할 중요한 점은 이것이 크로스 플랫폼이라는 것입니다.&lt;br /&gt;
* SDL을 사용하여 작성된 프로그램은 코드를 거의 변경하지 않고 Windows, Mac 및 많은 UNIX 변형과 같은 다양한 운영 체제 플랫폼에서 실행되도록 다시 컴파일 할 수 있습니다.&lt;br /&gt;
* SDL 라이브러리는 2D 유형의 게임을 쉽게 만들 수있는 기능을 제공합니다.&lt;br /&gt;
* 2D 게임은 정적 필드 (예 : Pong, Donkey Kong) 또는 스크롤 (예 : Mario Bros.)에서 이루어지는 게임입니다.&lt;br /&gt;
* 그래픽은 처음 설계되었을 때 사용 된 게임 시스템과 컴퓨터의 초기 제한 때문에 간단합니다.&lt;br /&gt;
* 액션과 게임 플레이는 오늘날 만들어진 모든 현대 3D 게임만큼 재미있을 수 있습니다.&lt;br /&gt;
* 2D 게임의 재미와 성공에 대한 간증은 Xbox Live Arcade 및 Wii Virtual Console에 대한 그들의 부활과 인기입니다.&lt;br /&gt;
* SDL 라이브러리 및 SDL과 함께 작동하도록 설계된 모든 추가 지원 라이브러리가 활용됩니다.&lt;br /&gt;
* 우리는 간단한 게임 인 Pong, Breakout, Minesweeper, Tetris를 만들 것입니다.&lt;br /&gt;
* 또한, 끝으로 우리는 좀 더 진보 된 게임 기술을 보여주기 위해 플랫폼 스크롤링 게임을 제작합니다.&lt;br /&gt;
&lt;br /&gt;
== 전제조건 ==&lt;br /&gt;
* 이 노트를 이해하고 시간과 노력에 투자할만한 가치가 있으려면 C++을 어느정도 알아야 됩니다.&lt;br /&gt;
* 당신이 스스로 C ++을 배우고 있다면 많은 유용한 웹 사이트가 있습니다.&lt;br /&gt;
* http://www.steveheller.com/cppad/Output/dialogTOC.html&lt;br /&gt;
&lt;br /&gt;
== 왜 SDL인가 ==&lt;br /&gt;
* Id Software가 Commander Keen 게임을 실행하는 게임 엔진의 공개 버전으로 Klone Keen이라는게 있습니다.&lt;br /&gt;
* 게임 커맨더 킨 (Keen Commander)은 1990 년대 초반 일련의 게임에서 셰어웨어 4로 출시되었습니다.&lt;br /&gt;
* 이 게임은 닌텐도 엔터테인먼트 시스템 슈퍼 마리오 브라더스 게임의 사이드 스크롤링 동작을 복제 할 수 있다는 점에서 주목할 만했습니다.&lt;br /&gt;
* 클론 킨 (Klone Keen)을 운영하려면 원본 데이터 파일이 필요합니다.&lt;br /&gt;
* 이 게임은 사운드, 비디오 및 키보드 프로세싱을위한 SDL 중 하나 인 몇 가지 무료 라이브러리를 사용했습니다.&lt;br /&gt;
* SDL은 일반적으로 두 번째 C ++ 과정에서 학생들에게 제공하는 일반적인 프로그래밍 과제보다 더 재미있는 프로그램을 만들 수 있도록 학생들이 배우기에 완벽한 라이브러리였습니다.&lt;br /&gt;
&lt;br /&gt;
== 역사 ==&lt;br /&gt;
* SDL은 Sam Lantinga에 의해 만들어졌으며 1998 년에 일반인에게 공개되었습니다.&lt;br /&gt;
* 그는 많은 게임 프로젝트에 참여했으며 2009 년부터 블리자드 엔터테인먼트와 함께했습니다.&lt;br /&gt;
* http://www.devolution.com에서 온라인으로 이력서를 확인할 수 있습니다.&lt;br /&gt;
* 전 세계에서 가장 좋아하는 게임 인 World of Warcraft에 큰 기여를 한 것을보고 감명 받았습니다.&lt;br /&gt;
* Lantinga는 Windows에서 Mac으로 응용 프로그램을 이식하려는 노력을 지원하기 위해 SDL을 만들도록 영감을 받았습니다.&lt;br /&gt;
* 라이브러리는 응용 프로그램 생성 및 포팅을 용이하게하기 위해 만들어졌습니다.&lt;br /&gt;
* 최소한의 코드 변경으로 다른 플랫폼에 게임을 추가 할 수 있습니다.&lt;br /&gt;
* 오늘날 많은 응용 프로그램은 SDL의 다양한 구성 요소를 사용하여 키보드 처리 또는 조이스틱 지원과 같은 기능을 수행하고 OpenGL6 또는 다른 라이브러리로이를 보완합니다.&lt;br /&gt;
* SDL은 C로 작성되었지만 C++, Perl, C, Python 등과 함께 사용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
== SDL 컴포넌트 ==&lt;br /&gt;
* SDL은 다음과 같은 서브시스템으로 구성되어 있습니다.&lt;br /&gt;
* Video - 이 서브 시스템은 화면에 보이는 것을 처리합니다.&lt;br /&gt;
* 게임의 시각적 구성 요소를 구성하는 창, 색상 및 스프라이트입니다.&lt;br /&gt;
* 이 구성 요소는 단순한 그래픽 작업을 지원하기위한 것으로 사용자는 선, 원 등을 그릴 수있는 추가 기능을 만들 수있을 정도로 정교하다고 가정합니다.&lt;br /&gt;
* Event Handling - 이 하위 시스템은 사용자가 게임과 상호 작용하는 방식을 처리합니다.&lt;br /&gt;
* 사용자 창을 최소화하거나 마우스를 움직이거나 키를 누를 때마다 이벤트를 생성합니다.&lt;br /&gt;
* 다른 라이브러리로 3D 게임을 제작하려는 경우에도 SDL의 이 구성 요소를 사용하면 유용합니다.&lt;br /&gt;
* Joystick Handling - 이 서브 시스템은 오늘날의 조이스틱과 관련된 다양한 복잡성을 다룹니다.&lt;br /&gt;
* 각 조이스틱에는 다른 수의 버튼, 다이얼, 스위치, 조이스틱 및 휠이 있습니다.&lt;br /&gt;
* 이 구성 요소는 조이스틱을 관리하는 일련의 기능을 제공합니다.&lt;br /&gt;
* File I/O - 이 하위 시스템은 bmp파일. SDL은 일반적으로 게임과 같은 멀티미디어 응용 프로그램을 작성할 때 씁니다.&lt;br /&gt;
* 프로그래머가 cout이나 cerr를 고려할 경우 멋진 기능이 있습니다.&lt;br /&gt;
* 메시지는 자동으로 데이터 파일 (stdout.txt 및 stderr.txt)에 저장됩니다.&lt;br /&gt;
* 이것은 바로 사용할 수있는 훌륭한 로깅 시스템입니다.&lt;br /&gt;
* Audio - 이 하위 시스템은 게임에 추가 할 수있는 사운드를 지원합니다.&lt;br /&gt;
* CDROM - 이 깔끔한 하위 시스템은 사용자 CD ROM 장치에 대한 액세스 및 통신을 지원합니다.&lt;br /&gt;
* Timer - 이 서브 시스템은 이벤트 또는 프로세스의 순서가 주기적으로 발생하는시기를 설정하고 제어하는 ​​기능을 제공합니다.&lt;br /&gt;
* 그것은 당신이 특정 시간에 당신을 깨우기 위해 매일 설정하는 자명종과 비슷합니다.&lt;br /&gt;
* Threading - SDL은 두 개 이상의 실행 스레드를 설정하고 제어하는 ​​기능을 제공합니다.&lt;br /&gt;
* 독립적으로 실행되는 대규모 프로세스 내에 존재하는 하위 프로세스입니다.&lt;br /&gt;
* 이 기능은 한 번에 두 가지 이상의 작업을 수행 할 수있는 기능을 프로그래머에게 제공합니다.&lt;br /&gt;
* 스레드를 사용하면 통신을 관리하고 자원에 액세스해야하므로 프로그램에 복잡성이 추가됩니다.&lt;br /&gt;
* 여기까지 기본 라이브러리고 추가 라이브러리로 다음과 같은게 있습니다.&lt;br /&gt;
* SDL_image - 이 라이브러리는 PNG, GIF, JPEG 및 기타 여러 가지와 같은 bmp 이외의 이미지 형식을 지원합니다.&lt;br /&gt;
* SDL_mixer - 이 라이브러리는 더 많은 형식 세트에서 음악 및 사운드 샘플을 재생할 수 있도록 지원합니다.&lt;br /&gt;
* WAV, MOD, MP3 등 - 인기있는 MikMod MOD, Timidity MIDI, Ogg Vorbis 및 SMPEG MP3 라이브러리로 믹스 된 16 비트 스테레오 오디오와 동시에 단일 채널의 음악을 동시에 재생할 수 있습니다.&lt;br /&gt;
* SDL_net - 이 라이브러리는 &amp;quot;크로스 플랫폼 네트워킹&amp;quot;기능 세트를 제공합니다.&lt;br /&gt;
* 채팅 클라이언트 및 서버 응용 프로그램이 포함되어 있습니다.&lt;br /&gt;
* SDL_ttf -이 라이브러리는 트루 타입 글꼴을 사용할 수 있는 기능을 제공합니다.&lt;br /&gt;
* 우리는 이것을 게임 스크린에 텍스트를 표시하기 위해 사용할 것입니다.&lt;br /&gt;
* 이 라이브러리는 운영 체제 기능에 대한 계층 또는 랩퍼를 제공합니다.&lt;br /&gt;
* 라이브러리는 Macintosh와 Windows와 같은 플랫폼 간의 복잡성과 차이점을 숨기는 일련의 공통 기능을 제공합니다.&lt;br /&gt;
* Microsoft Windows의 경우 SDL은 기본적으로 GDI 백엔드를 사용합니다.&lt;br /&gt;
* GDI는 Graphics Device Interface (그래픽 장치 인터페이스)의 약자로, Windows의 경우 프린터의 컴퓨터 모니터에 표시되거나 표시 될 그래픽 개체 표현에 대한 프로그래밍 지원을 제공하는 API입니다.&lt;br /&gt;
* GDI는 Windows 플랫폼에서 게임을 개발하는 가장 빠르고 빠른 방법으로 알려져 있지 않습니다.&lt;br /&gt;
* 다른 두 가지 인기있는 옵션은 DirectX와 OpenGL입니다. 현재 버전의 SDL은 DirectX7을 사용하도록 설계되었습니다.&lt;br /&gt;
* 최신 DirectX를 직접 배우는 것보다 Windows에서 SDL에 대해 논의 할 이유가 궁금 할 것입니다.&lt;br /&gt;
* 학생들은 수업이나 가정에서 Windows를 사용할 수 있지만 Linux와 같은 다른 운영 체제 플랫폼을 선호하는 학생도 모든 프로그래밍 예제를 사용할 수 있습니다.&lt;br /&gt;
* Windows 운영 체제에 모든 소프트웨어를 설치한다고 가정하는 자세한 설치 지침 이외의 Windows 관련 항목은 없습니다.&lt;br /&gt;
* 학생들은 아직 WinMain을 배울 필요가 없습니다. SDL Windows 응용 프로그램의 진입 점은 여전히 main()입니다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main (int argc, char * argv [])&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* main() 형식이 WinMain()보다 아무래도 플랫폼에서 자유롭기 때문입니다.&lt;br /&gt;
* 이 문서는 다음 C++ 개념을 알고 있다고 가정하고 쓰여집니다.&lt;br /&gt;
** 데이터 타입&lt;br /&gt;
** 입출력&lt;br /&gt;
** 사칙연산&lt;br /&gt;
** 제어문(if, else, switch, while, for)&lt;br /&gt;
** 함수&lt;br /&gt;
* 다음 개념을 알고 있다면 이해하기가 좀더 수월합니다.&lt;br /&gt;
** Enumeration Types(열거형)&lt;br /&gt;
** typedef&lt;br /&gt;
** Pointers(포인터)&lt;br /&gt;
** Arrays(배열)&lt;br /&gt;
** Records(Struct 구조체)&lt;br /&gt;
** Classes(클래스)&lt;br /&gt;
&lt;br /&gt;
* SDL이나 다른 라이브러리 사용 방법도 알아야 하지만, 아무래도 게임을 만드는게 메인입니다.&lt;br /&gt;
* 프로그래밍 과정 이외에도 게임을 만들기 위한 팁들을 알려드릴것입니다.&lt;br /&gt;
* 헤더파일을 만들고 사용하는 방법이라던지, 직접 변경하고 확장하기 위한 프로그램 설계 방법이라던지, 조이스틱이나 마우스 사용 방법 등을 설명할 것입니다.&lt;br /&gt;
* 초보 프로그래머에게 좋은 소식은 SDL이 오픈소스라는 것입니다. 실제 작동 원리는 소스를 까보면 알 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
= SDL 설치 =&lt;br /&gt;
== SDL 라이브러리 패키지 받아오기 ==&lt;br /&gt;
* 라이브러리 받아오기&lt;br /&gt;
* SDL - http://www.libsdl.org/download-1.2.php&lt;br /&gt;
* SDL_image - http://www.libsdl.org/projects/SDL_image&lt;br /&gt;
* SDL_mixer - http://www.libsdl.org/projects/SDL_mixer&lt;br /&gt;
* SDL_net - http://www.libsdl.org/projects/SDL_net&lt;br /&gt;
* SDL_ttf - http://www.libsdl.org/projects/SDL_ttf&lt;br /&gt;
* Ubuntu / Debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-net1.2-dev libsdl-ttf2.0-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code::Blocks 설치 ==&lt;br /&gt;
* 다운로드 : http://www.codeblocks.org&lt;br /&gt;
* Ubuntu / Debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install codeblocks&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code::Blocks SDL 마법사 ==&lt;br /&gt;
== SDL 커스텀 템플릿 만들기 ==&lt;br /&gt;
== WxDev-C++ 설치 ==&lt;br /&gt;
* 다운로드 - http://wxdsgn.sourceforge.net&lt;br /&gt;
* Ubuntu / Debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libwxbase3.0-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WxDev-C++ SDL 템플릿 파일 만들기 ==&lt;br /&gt;
=== SDL_Image 설치 및 테스트 ===&lt;br /&gt;
&lt;br /&gt;
=== SDL_tff 설치 및 테스트 ===&lt;br /&gt;
=== SDL_mixer 설치 및 테스트 ===&lt;br /&gt;
=== SDL_net 설치 및 테스트 ===&lt;br /&gt;
== 요약 ==&lt;br /&gt;
= SDL 시작하기 =&lt;br /&gt;
== SDL 초기화 ==&lt;br /&gt;
&lt;br /&gt;
== SDL Subsystems 초기화, 닫기 ==&lt;br /&gt;
== 비디오 컴포넌트 ==&lt;br /&gt;
== SDL 비디오 스트럭쳐 ==&lt;br /&gt;
== 비디오 프로그램 만들어보기 ==&lt;br /&gt;
== 스크린 디스플레이 ==&lt;br /&gt;
== 디스플레이 방법 이해하기 ==&lt;br /&gt;
== 선긋기 ==&lt;br /&gt;
=== 선긋기에 대한 역사 ===&lt;br /&gt;
=== Slope-Intercept 알고리듬 ===&lt;br /&gt;
=== 균형 알고리듬 ===&lt;br /&gt;
== SDL_Rect ==&lt;br /&gt;
== 자르기 ==&lt;br /&gt;
== SDL_VideoInfo ==&lt;br /&gt;
== 이미지 로드 ==&lt;br /&gt;
== 공굴리기 ==&lt;br /&gt;
== 더블 버퍼링과 페이지 플리핑 ==&lt;br /&gt;
=== 더블 버퍼링 ===&lt;br /&gt;
=== 페이지 플리핑 ===&lt;br /&gt;
== 다른 타입 이미지 로드 ==&lt;br /&gt;
== 알파 블렌딩 ==&lt;br /&gt;
== Other Topics ==&lt;br /&gt;
== 요약 ==&lt;br /&gt;
== 질답 ==&lt;br /&gt;
== 연습문제 ==&lt;br /&gt;
=== 원그리기 알고리듬 ===&lt;br /&gt;
= 스프라이트, 심플뷰 =&lt;br /&gt;
= 프로세스 이벤트 =&lt;br /&gt;
== 키보드 이벤트 ==&lt;br /&gt;
== 조이스틱 이벤트 ==&lt;br /&gt;
== 시스템 이벤트 ==&lt;br /&gt;
== 마우스 이벤트&lt;br /&gt;
= 게임 구성 =&lt;br /&gt;
== 게임 템플릿 ==&lt;br /&gt;
== 간단한 게임 ==&lt;br /&gt;
= 퐁 =&lt;br /&gt;
== SDL_TTF 사용해보기 ==&lt;br /&gt;
== SDL Audio ==&lt;br /&gt;
=== 간단한 오디오 ===&lt;br /&gt;
=== 준비된 SDL 함수 ===&lt;br /&gt;
== SDL Joystick ==&lt;br /&gt;
= MindSweeper 만들어보기 =&lt;br /&gt;
= Breakout 만들어보기 =&lt;br /&gt;
= SDL Thread와 Timer =&lt;br /&gt;
= 멀티플레이어 온라인 게임 =&lt;br /&gt;
== SDL_NET ==&lt;br /&gt;
== SDL_MIXER ==&lt;br /&gt;
= 플랫폼 게임 =&lt;br /&gt;
== Crisis Mountain ==&lt;br /&gt;
== Mario ==&lt;br /&gt;
= 게임 빌드를 위한 다른 라이브러리들 =&lt;/div&gt;</summary>
		<author><name>27.122.242.71</name></author>
	</entry>
	<entry>
		<id>https://old.wiki.ubuntu-kr.org/index.php?title=Minidlna&amp;diff=1947</id>
		<title>Minidlna</title>
		<link rel="alternate" type="text/html" href="https://old.wiki.ubuntu-kr.org/index.php?title=Minidlna&amp;diff=1947"/>
		<updated>2020-01-10T08:01:32Z</updated>

		<summary type="html">&lt;p&gt;27.122.242.71: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
http://www.dlna.org/consumer-home&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
minidlna에 대한 설명에 앞서서 DLNA에 대해서 설명한다.&lt;br /&gt;
DLNA(Digital Living Network Alliance)는 정확히는 소니를 필두로한 Home Media네트워크 목적의 비영리 단체이자 표준이다. DLNA라는 새로운 프로토콜은 사용한것이 아니다. 기존의 UPnP를 이용하면서, 몇가지 새로운것을 첨부한것에 불과하다. UPnP에 대해서 처음 듣는 사람들을 위해서 간단히 소개하면, 브로드캐스팅이 유효한 범위의 네트워크에서 자동으로 장치를 찾고 원격조종이 가능한 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
국내에는 대형 TV제조사들(삼성,LG)의 제품에서 DLNA를 지원한다.  &lt;br /&gt;
&lt;br /&gt;
== DLNA 구성 디바이스 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
DMS : 미디어를 제공하는 서버이다. minidlna가 여기 해당된다.&lt;br /&gt;
DMR : 미디어를 재생하는 기능만 있는 장비이다. 미디어서버를 찾는 기능은 없다&lt;br /&gt;
DMC : DLNA장비를 제어하는 컨트롤러. DMS,DMC,DMR,DMP등을 원격조종한다.&lt;br /&gt;
DMP : 간단히 DMR+DMC이다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
minidlna는 DMS에 해당되는 데몬이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 기본설치와 설정 ===&lt;br /&gt;
apt-get 명령으로 곧바로 실행이 가능하다. 먼저 설치부터 하자.&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|sudo apt-get install minidlna}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로 익숙하게 conf파일을 수정해야한다.&lt;br /&gt;
핵심은 포트번호인 port,공유할 동영상 미디어 디렉토리 media_dir,미디어의 정보를 담은 sqlite 디렉터리 db_dir&lt;br /&gt;
가 핵심이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
minidlna.conf&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# port for HTTP (descriptions, SOAP, media transfer) traffic&lt;br /&gt;
port=8200&lt;br /&gt;
&lt;br /&gt;
# network interfaces to serve, comma delimited&lt;br /&gt;
#network_interface=eth0&lt;br /&gt;
&lt;br /&gt;
# specify the user account name or uid to run as&lt;br /&gt;
#user=jmaggard&lt;br /&gt;
&lt;br /&gt;
# set this to the directory you want scanned.&lt;br /&gt;
# * if you want multiple directories, you can have multiple media_dir= lines&lt;br /&gt;
# * if you want to restrict a media_dir to specific content types, you&lt;br /&gt;
#   can prepend the types, followed by a comma, to the directory:&lt;br /&gt;
#   + &amp;quot;A&amp;quot; for audio  (eg. media_dir=A,/home/jmaggard/Music)&lt;br /&gt;
#   + &amp;quot;V&amp;quot; for video  (eg. media_dir=V,/home/jmaggard/Videos)&lt;br /&gt;
#   + &amp;quot;P&amp;quot; for images (eg. media_dir=P,/home/jmaggard/Pictures)&lt;br /&gt;
#   + &amp;quot;PV&amp;quot; for pictures and video (eg. media_dir=AV,/home/jmaggard/digital_camera)&lt;br /&gt;
#media_dir=/opt&lt;br /&gt;
media_dir=V,/home/user/video&lt;br /&gt;
# set this if you want to customize the name that shows up on your clients&lt;br /&gt;
#friendly_name=My DLNA Server&lt;br /&gt;
&lt;br /&gt;
# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache&lt;br /&gt;
#db_dir=/var/cache/minidlna&lt;br /&gt;
db_dir=/home/user/code/minidlna-1.1.2/minidlna_db&lt;br /&gt;
&lt;br /&gt;
# set this if you would like to specify the directory where you want MiniDLNA to store its log file&lt;br /&gt;
#log_dir=/var/log&lt;br /&gt;
&lt;br /&gt;
# set this to change the verbosity of the information that is logged&lt;br /&gt;
# each section can use a different level: off, fatal, error, warn, info, or debug&lt;br /&gt;
#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn&lt;br /&gt;
&lt;br /&gt;
# this should be a list of file names to check for when searching for album art&lt;br /&gt;
# note: names should be delimited with a forward slash (&amp;quot;/&amp;quot;)&lt;br /&gt;
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg&lt;br /&gt;
&lt;br /&gt;
# set this to no to disable inotify monitoring to automatically discover new files&lt;br /&gt;
# note: the default is yes&lt;br /&gt;
inotify=yes&lt;br /&gt;
&lt;br /&gt;
# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO&lt;br /&gt;
enable_tivo=no&lt;br /&gt;
&lt;br /&gt;
# set this to strictly adhere to DLNA standards.&lt;br /&gt;
# * This will allow server-side downscaling of very large JPEG images,&lt;br /&gt;
#   which may hurt JPEG serving performance on (at least) Sony DLNA products.&lt;br /&gt;
strict_dlna=no&lt;br /&gt;
&lt;br /&gt;
# default presentation url is http address on port 80&lt;br /&gt;
#presentation_url=http://www.mylan/index.php&lt;br /&gt;
&lt;br /&gt;
# notify interval in seconds. default is 895 seconds.&lt;br /&gt;
notify_interval=900&lt;br /&gt;
&lt;br /&gt;
# serial and model number the daemon will report to clients&lt;br /&gt;
# in its XML description&lt;br /&gt;
serial=12345678&lt;br /&gt;
model_number=1&lt;br /&gt;
&lt;br /&gt;
# specify the path to the MiniSSDPd socket&lt;br /&gt;
#minissdpdsocket=/var/run/minissdpd.sock&lt;br /&gt;
&lt;br /&gt;
# use different container as root of the tree&lt;br /&gt;
# possible values:&lt;br /&gt;
#   + &amp;quot;.&amp;quot; - use standard container (this is the default)&lt;br /&gt;
#   + &amp;quot;B&amp;quot; - &amp;quot;Browse Directory&amp;quot;&lt;br /&gt;
#   + &amp;quot;M&amp;quot; - &amp;quot;Music&amp;quot;&lt;br /&gt;
#   + &amp;quot;V&amp;quot; - &amp;quot;Video&amp;quot;&lt;br /&gt;
#   + &amp;quot;P&amp;quot; - &amp;quot;Pictures&amp;quot;&lt;br /&gt;
# if you specify &amp;quot;B&amp;quot; and client device is audio-only then &amp;quot;Music/Folders&amp;quot; will be used as root&lt;br /&gt;
#root_container=.&lt;br /&gt;
&lt;br /&gt;
# always force SortCriteria to this value, regardless of the SortCriteria passed by the client&lt;br /&gt;
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title&lt;br /&gt;
&lt;br /&gt;
# maximum number of simultaneous connections&lt;br /&gt;
# note: many clients open several simultaneous connections while streaming&lt;br /&gt;
#max_connections=50&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 데이터베이스를 갱신하자, 새로운 파일을 추가할때마다 필요한 작업이다.&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|minidlna -R}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로 서비스를 실행한다면, 결과물을 확인할수있다. restart를 사용하는 이유는 apt로 설치를 한다면 설치가 끝나자마자 실행되기때문에 &lt;br /&gt;
restart를 이용하여 다시 실행하는것이다.&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|sudo service minidlna restart}}}}&lt;br /&gt;
&lt;br /&gt;
=== smi 자막지원 추가 ===&lt;br /&gt;
DLNA의 치명적인 단점중에 하나가 smi자막지원이 기본이 아니라는점이다. 그렇지만, 해당되는 minidlna의 소스를 수정함으로서 &lt;br /&gt;
smi지원이 가능하게 할수있다. 당연하겠지만, 개발자용 패키지와 소스코드가  필요하다. 기준이되는 버젼은 1.13이다.&lt;br /&gt;
&lt;br /&gt;
라이브러리 먼저 설치하자.&lt;br /&gt;
&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|sudo apt-get install debhelper libavformat-dev libavutil-dev libavcodec-dev libflac-dev libvorbis-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev libogg-dev}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로 아래의 url로 접속하여 소스코드를 다운받고 압축을 해체한다. &lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
http://sourceforge.net/projects/minidlna/&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
압축이 해체된 디렉토리의 metadata.c의 check_for_captions 함수를 편집하는것이 핵심이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
metadata.c&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
&amp;lt;SyntaxHighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
check_for_captions(const char *path, int64_t detailID)&lt;br /&gt;
{&lt;br /&gt;
    char *file = malloc(MAXPATHLEN);&lt;br /&gt;
    char *id = NULL;&lt;br /&gt;
&lt;br /&gt;
    sprintf(file, &amp;quot;%s&amp;quot;, path);&lt;br /&gt;
    strip_ext(file);&lt;br /&gt;
&lt;br /&gt;
    /* If we weren't given a detail ID, look for one. */&lt;br /&gt;
    if( !detailID )&lt;br /&gt;
    {&lt;br /&gt;
   	 id = sql_get_text_field(db, &amp;quot;SELECT ID from DETAILS where (PATH &amp;gt; '%q.' and PATH &amp;lt;= '%q.z')&amp;quot;&lt;br /&gt;
   	                         	&amp;quot; and MIME glob 'video/*' limit 1&amp;quot;, file, file);&lt;br /&gt;
   	 if( id )&lt;br /&gt;
   	 {&lt;br /&gt;
   		 //DPRINTF(E_MAXDEBUG, L_METADATA, &amp;quot;New file %s looks like a caption file.\n&amp;quot;, path);&lt;br /&gt;
   		 detailID = strtoll(id, NULL, 10);&lt;br /&gt;
   	 }&lt;br /&gt;
   	 else&lt;br /&gt;
   	 {&lt;br /&gt;
   		 //DPRINTF(E_MAXDEBUG, L_METADATA, &amp;quot;No file found for caption %s.\n&amp;quot;, path);&lt;br /&gt;
   		 goto no_source_video;&lt;br /&gt;
   	 }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    strcat(file, &amp;quot;.srt&amp;quot;);&lt;br /&gt;
    if( access(file, R_OK) == 0 )&lt;br /&gt;
    {&lt;br /&gt;
   	 sql_exec(db, &amp;quot;INSERT into CAPTIONS&amp;quot;&lt;br /&gt;
   	          	&amp;quot; (ID, PATH) &amp;quot;&lt;br /&gt;
   	          	&amp;quot;VALUES&amp;quot;&lt;br /&gt;
   	          	&amp;quot; (%lld, %Q)&amp;quot;, detailID, file);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
    strip_ext(file);&lt;br /&gt;
    strcat(file, &amp;quot;.smi&amp;quot;);&lt;br /&gt;
                if( access(file, R_OK) == 0 )&lt;br /&gt;
            	{&lt;br /&gt;
                    	sql_exec(db, &amp;quot;INSERT into CAPTIONS&amp;quot;&lt;br /&gt;
                                 	&amp;quot; (ID, PATH) &amp;quot;&lt;br /&gt;
                                 	&amp;quot;VALUES&amp;quot;&lt;br /&gt;
                                 	&amp;quot; (%lld, %Q)&amp;quot;, detailID, file);&lt;br /&gt;
            	}&lt;br /&gt;
    }&lt;br /&gt;
no_source_video:&lt;br /&gt;
    if( id )&lt;br /&gt;
   	 sqlite3_free(id);&lt;br /&gt;
    free(file);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SyntaxHighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 컴파일을 실행하자.&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|./configure}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{TerminalLine|prompt=user|~|make}}}}&lt;br /&gt;
&lt;br /&gt;
기존의 설치된 실행파일을 중단시키고, 이전과 같이 설정파일을 편집한뒤 실행하자.&lt;br /&gt;
&lt;br /&gt;
{{TerminalWindow|{{TerminalLine|prompt=user|~|sudo minidlnad -R -f ./minidlna.conf}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{TerminalLine|prompt=user|~|sudo minidlnad -f ./minidlna.conf}}}}&lt;/div&gt;</summary>
		<author><name>27.122.242.71</name></author>
	</entry>
</feed>