오늘 Find 명령어를 평소와 다르게 사용하게 되었다.


매번 찾는거야


find / -name '*.h'


찾는다 루트에서 .h 끝나는 파일을


이였지만


오늘은 Event라는 단어가 들어간 파일을 찾아야 했다.


find / -name '*.h' | xargs egrep 'Event'


Event가 들어간 .h 파일을 찾는다. 아주 잘나온다.



/는 루트부터고 . 는 지금 폴더 부터이다. 

'QA > QA 활동' 카테고리의 다른 글

Daily note  (0) 2016.09.28
윈도우즈 GPT Convert MBR  (0) 2016.07.05
Back ground 쉘  (0) 2016.06.21
Find 현재 디렉토리 찾기  (0) 2016.06.17
Freebsd 10.x Ports 설정  (0) 2016.06.15

공백이 있는 파일명을 처리하기 위한 상황이 생겼다.


Program Files 윈도우에선 이렇게 표시되지만


유닉스에선 그렇지 않다.

Program\ Files 로 표시가 된다. 


그렇기에 사용방법은 같을 것으로 보여


_DIR_="/Program\Files/"


을 사용했지만 되지 않는다.... Program 과 Files를 따로 보게 된다.


여러번 삽질후에 찾은 결론 

#!bin/sh


_PROGRAM_DIR_="/Program Files/"


사용시에


ls $_PROGRAM_DIR_이 아닌

ls "$_PROGRAM_DIR_" 로 호출시에 따옴표로 묶어주면 된다. ㄷㄷ



'GNU > bashShell' 카테고리의 다른 글

expect 를 이용한 scp 자동 스크립트 작성 - 2  (0) 2016.06.28
expect 를 이용한 scp 자동 스크립트 작성  (0) 2016.06.23
UNIX set 명령어  (0) 2016.06.15
UNIX Shell 조건문  (0) 2016.06.15
UNIX Shell의 기본  (0) 2016.06.14

까먹지 말자 


현재 디렉토리에서만 P로 시작하는 폴더 명을 찾고 싶을떄 -maxdepth 를 사용한다.


find . -maxdepth 1 -name 'P*' -type d






find . -name '*.cpp' -exec egrep -H get_rank {} \;


내 홈 디렉토리에서, 2단계 까지 들어간 하위 경로에서, result_ 로 시작하고 txt 로 끝나는 모든 파일을 찾아서 지우고 싶으면 다음과 같이 한다. 

find ~ -maxdepth 2 -name 'result_*.txt' -exec rm {} \;

'QA > QA 활동' 카테고리의 다른 글

Daily note  (0) 2016.09.28
윈도우즈 GPT Convert MBR  (0) 2016.07.05
Back ground 쉘  (0) 2016.06.21
Find 명령어로 원하는 파일이 아닌 단어가 들어간 파일 찾기  (0) 2016.06.20
Freebsd 10.x Ports 설정  (0) 2016.06.15

유닉스의 set명령어를 입력하면


현재 쉘에서 사용되고 있는 변수들의 리스트를 확인할 수 있다.


예제(set.sh)


#! /bin/sh

First_temp="FirstString"

Second_temp="SecondString"

Third_temp="ThirdString"

set


결과 값


BLOCKSIZE=K

EDITOR=vi

First_temp=FirstString

GROUP=wheel

HOME=/root

HOST=user-user

HOSTTYPE=FreeBSD

IFS=' 

'

LD_LIBRARY_PATH=/system/lib

LOGNAME=root

MACHTYPE=i386

MAIL=/var/mail/root

OPTIND=1

OSTYPE=FreeBSD

PAGER=more

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin

PPID=87112

PS1='# '

PS2='> '

PS4='+ '

PWD=/home/user/Desktop/test

REMOTEHOST=

SHELL=/bin/csh

SHLVL=1

SUDO_COMMAND=/bin/csh

SUDO_GID=0

SUDO_UID=1001

SUDO_USER=user

Second_temp=SecondString

TERM=vt100

Third_temp=ThirdString

USER=root

USERNAME=root

VENDOR=intel

C나 C++  혹은 VB(Visual Basic)을 사용하였던 사람들에게는 if만큼 쉬운 문장이 아닐수 없다.


if(조건) 

참일시액션

else

아닐시 액션



다중 조건 일경우


if(조건)

참일시 액션

else if(첫번째 if가 참이 아닐시 두번째 조건 확인)

참일시 액션

else

위에 두 if문이 참이 아닐시 액션


으로 이루어지며 매우 간단하며 하드 코딩의 시초가 된다. 모든것을 조건문으로 해결할수 있으며 


디버깅 방식 중 하나로 분류 되기도 한다. 


Shell을 다시 시작하자

맨 첫줄에 #!/bin/sh


변수


변수를 적을때 그냥 변수명만 적으면 된다. (자바스크립트에서는 var라고도 명시하였지만 그럴 필요가 없다.)

NULL로초기화 하고 다음에 값을 할당시에는


Temp= 로 설정 한다.   값할당에는 = 사용하게 되며 이 사이에 공백이 있으면 안된다. 


temp=TEMP        O

temp = TEMP      X

temp="TEMP A"   O


변수명과 =의 사이에는 절대 떨어져선 안된다. 


변수의 내용을 출력하기 위해선 echo 를 이용하며 $를 사용한다.


기본 터미널에서 echo $SHELL 을 입력시 SHELL변수를 불러서 현재 쉘을 확인할수 있듯이


echo $temp 를 할시에는 TEMP 가 출력됨을 확인 할수 있다. 


기본 예제 4 (Variable.sh)


#!/bin/sh


txtList=*.txt


echo $txtList


결과 a.txt b.txt

//같은 폴더 내에 a.txt b.txt파일이 있는 상태에서 



재 할당 도 가능 하다

#!/bin/sh

Process="aux"

Process="Riven"

echo ps-$Process   -> 결과값 ps-Riven 


재할당이 가능


재할당이 불가능하게 하기 위해선 상수로 선언할수 있는데 readonly 라는 키워드를 쓴다. (대문자 Readonly는 안된다.)


#!/bin/sh

Process="aux"

readonly Process

Process="Riven"

echo ps-$Process  -> 결과값  Process : is read only 라는 에러가 나타난다.



#!/bin/sh

Process="aux"

unset Process

echo ps-$Process   -> 결과값 ps- 


unset은 변수를 제거한다. Process= 상태로 만들어 버린다.



C언어에서 scanf

C++  cin>> 

java에서 System.in  Scanner등있고 쉘에선


read라는 키워드를 사용 한다.


기본 예제 4 (read.sh)



#!/bin/sh


echo "First ps Option "

read option1


echo "second input ps"

read option2 


ps $option1


echo "Second Input ps "


sleep 2


ps $option2 


결과는 첫번째 입력은 그냥  엔터 2번째 입력은 -aux로 입력했을시 두개의 결과를 첫번째 ps 를 보여주고 2초뒤에 ps -aux 를 보여준다.






Open JDK 와 Oracle JDK는 차이가 없다고 봐도 무방하다.


// 처음에 포트 업데이팅 시  // /usr/ports 가 없을 시에 

portsnap fetch extract


// /usr/ports 가 있을시 그 이후 업데이트시에는

portsnap fetch update



fetch ports tree를 가져옴 , /var/db/portsnap 에 압축된 snapshot이 저장된다.


extract : 가져온 ports tree를 /usr/ports에 푼다.


update  : 가져온 ports tree를 update한다.



예를 들어 sudo 를 설치시에는 cd /usr/ports/security/sudo  -> make install clean  or pkg_add -r sudo 

(일반적인 Freebsd 에서는 )




'QA > QA 활동' 카테고리의 다른 글

Daily note  (0) 2016.09.28
윈도우즈 GPT Convert MBR  (0) 2016.07.05
Back ground 쉘  (0) 2016.06.21
Find 명령어로 원하는 파일이 아닌 단어가 들어간 파일 찾기  (0) 2016.06.20
Find 현재 디렉토리 찾기  (0) 2016.06.17

type java = 무언가 나오면 자바가 설치 되었거나 설정 되었다는 뜻 


java -version : 자바 버전 확인


Open JDK 와 Oracle JDK 의 차이 


Open JDK 는 2007 년 Java의 오픈소스화를 위하여 Sun 에서 저작권자가 제공을 거부한 컴포넌트들을 제외한 JDK를 제공하여 시작된 프로젝트 이다.


별개로 oracle에서 제공하는 JDK는 Oracle JDK 라고 한다.


OpenJDK Overview

Sun(현재 Oracle)이 JDK 7을 개발하기 시작할 때 이전과 다른 점이 하나 있었는데, Sun이 JDK를 오픈소스화 하기 위해 2007년 OpenJDK를 만들었다는 것이다. (OpenJDK는 완전한 Free의 오픈소스 코드를 기반으로 Fully buildable한 Java Development Kit을 배포하기 위한 Sun의 노력이다.)

Sun이 3rd-Party 라이브러리의 저작권자에게 오픈소스로 공개할 수 있도록 설득하고자 했으나 잘되지 않았고, 저작권자가 오픈소스화를 거부한 일부 컴포넌트를 제외한 나머지 JDK 소스코드 전부를 OpenJDK에 제공했고, OpenJDK는 이를 기반으로 이외의 컴포넌트들의 대안 코드를 마련하면서 JDK7 프로젝트를 시작했다.

Oracle's Plan for OpenJDK

아래는 OpenJDK FAQ (http://openjdk.java.net/faq/) 의 주요 내용을 요약한 내용 이다.

Oracle은 OpenJDK에 참여하는가?

Oracle은 OpenJDK 프로젝트를 주도하는 주체이며, 오픈소스모델은 기술적인 발전을 위한 가장 좋은 방법이기 때문에 OpenJDK를 향상시키기 위한 노력을 계속 할 것이다.

OpenJDK의 License 모델을 변경될수 있는가?

OpenJDK Community는 지속적으로 Oracle에 의해 운영되며, 뿐만 아니라 이외의 기업, 연구원 또는 개인에 의해 GPL-based 라이센스를 가지며, 변경될 계획은 없다.

OpenJDK Users & Contributors

Ubuntu / Fedora / Red Hat Enterprise 와 같은 메이저 리눅스 제공자는 배포시에 OpenJDK를 기본 Java SE 구현체로 제공하고 있다.
추가적으로 Eclipse Community의 2010 설문에서는 개발자의 21%가 OpenJDK를 사용하고 있다고 응답하였다.

OpenJDK 와 OracleJDK 스펙

Oracle JDK는 OpenJDK를 기본으로 하는가?

그렇다. Oracle JDK는 OpenJDK의 JDK7 기반에 추가로 OpenJDK에 포함되지 않은 Component까지 모두 갖춘 프로젝트이다.

아래와 같이 Vendor에 의한 분리된 Version이 존재하는데,

  • Oracle's JDK (Commertial support from oracle)
  • OpenJDK, the open source java

JDK7 이전에는 두 Version간 큰 차이가 존재해 OpenJDK는 Oracle JDK에 비해 누락된 기능 및 성능이슈가 존재 했으나,
현재는 java-web-plugin(http://en.wikipedia.org/wiki/IcedTea - 저작권이 있는 라이브러리의 대안으로 작성된)을 제외하고는 정확하게 같다고 볼 수 있다. 몇몇 사람들은 아직도 OpenJDK가 Oracle JDK에 비해 성능이 떨어진다고 하지만, 이것은 근거없는 말이다.

  • 두 Version은 모두 Java SE 7 JSR(JSR 336) Spec 을 구현하였다.

Dodgy Version History

OpenJDK7를 사용 한다면 Oracle JDK7와 동일하게 안전하다고 볼 수 있지만, 그에 비해 OpenJDK6은 안정적이지 않는 History가 있는데, 진행 중인 프로젝트인 OpenJDK7를 기초로 JDK7 스펙을 제거하는 방식으로 JDK6과 Compatible 하도록 진행 됐기 때문이다.
OpenJDK6에서는 파일 처리와 같은 기본적인 OS-Integration 관련 기능과 네트워크 처리 및 Swing 에서 몇몇 문제점이 Report 되고 있다고 한다. OpenJDK를 사용시에는 꼭 OpenJDK7 를 사용하도록 한다.



  • JDK6을 사용하고 있을 때, OpenJDK로 이관한다면 JDK6 -> JDK7로의 변경시의 이슈가 더욱 중요해 보인다.

JVM

OpenJDK 프로젝트는 아래와 같은 몇몇 Component로 구성되어 있는데,

  • HotSpot VM
  • The Java Class Library
  • Java Compiler

VM 역시 Oracle에 의해 제공되는 HotSpot VM Spec과 동일하다.

이외 Vendors
OpenJDK는 오픈소스이기 때문에 RedHat 과 같은 Vendors에 의해서 Customized 되어 배포된다면 VM에 차이가 있을 수 있다. 하지만 물론 Vendor's VM은 배포시에 Java Trademark를 사용하기를 원한다면 Java TCK에 일치하는 것을 증명해야 한다.

Source 빌드 및 Binary 배포 이슈

OpenJDK는 소스코드만 배포하고 있어, 직접 빌드해야하나? 라는 의문이 생길수 있지만 아래와 같이 리눅스에서 rpm 패키지로 다운로드 및 설치가 가능 하다.


Debian, Ubuntu, etc
$ sudo apt-get install openjdk-7-jre
Fedora, Oracle Linux, Red Hat Enterprise Linux, etc.
$ su -c "yum install java-1.7.0-openjdk"


OpenJDK Quality Metrics

http://openjdk.java.net/groups/quality/metrics/


OpenJDK의 사용 범위

OpenJDK를 통해 JVM기반의 오픈소스를 이용하여 서비스 및 플랫폼 운영 시에 성능 이슈가 있는지 확인한다.



JVM 기반의 오픈소스 플랫폼 및 Spring과 같은 Java기반의 오픈소스

JVM기반의 오픈소스 사용시에는 Requirements 스펙에 JDK Version이 명시되어 있는지 확인한다.

  • Apache Kafka / Netty / MongoDB / Cassandra ...
  • https://github.com/apache/cassandra 페이지를 예를 들면 Requirements 항목에 Java >= 1.7 (OpenJDK and Oracle JVMS have been tested) 라고 명시되어 있는 것을 볼 수 있다.

CI / Build

  • Java 기반의 Ant/Maven/Gradle 과 같은 빌드 도구를 사용하는 빌드서버는 OpenJDK를 이용한다.

Tomcat / Application

  • Tomcat 및 Application 레벨에서 OpenJDK를 이용한다.


OpenJDK 설치

JDK Download

JDK 설치 및 Tomcat 설치 Script


결론 & OpenJDK 이관시 Risk

위의 내용을 바탕으로 OpenJDK 는 Java 플랫폼의 Next Version인 JDK7의 근간이 되는 프로젝트로서, JDK7를 기준으로 Oracle 에서 Binary로 배포되는 JDK와 OpenJDK는 차이가 없다고 봐도 무방하다.
하지만 실제 서비스에 적용하기 위해서는 사내에 OpenJDK 적용 사례가 있는지 확인 할 필요가 있어보이고, 서비스에 직접적으로 영향을 미치지 않는 관리자도구 등에 시범적으로 적용하여 레퍼런스를 쌓아가는 것도 바람직해보인다.

만약 JDK6 기반에서 운영하는 서비스가 있다면 JDK7으로의 변경으로 인한 이슈를 살펴 볼 필요가 있다.
추가적으로 어플리케이션/빌드 및 배포/플랫폼 전반에 JVM기반의 오픈소스를 사용시에는 OpenJDK의 지원여부 및 성능 및 안정성에 대한 이슈를 자세히 체크 해야 한다.

참고

References
FAQ



출처 : http://stunstun.tistory.com/222 


extern "C"{

#include <libavformat/avformat.h>

}


#pragma comment(lib,"avformat.lib")

#pragma comment(lib,"avutil.lib")

//avutil.lib



const char *AVMediaType2Str(AVMediaType type);

const char *AVCodecID2Str(AVCodecID id);


int main(void)

{

const char *szFilePath = "파일경로"


// Init

av_register_all();



// Init to play streaming contents, 

avformat_network_init();

int ret;

AVFormatContext *pFmtCtx = NULL;


// avformat_open_input

// 1, AVFormatContext,

// 2, 파일이름

// 3, 강제로 Input Format 지정 NULL 시 자동 Input Format

// 4, demuxer 추가 옵션

ret = avformat_open_input(&pFmtCtx, szFilePath, NULL, NULL);

if (ret != 0)

{

av_log(NULL, AV_LOG_ERROR, "File [%s] Open Fail (ret: %d)\n", szFilePath, ret);

exit(-1);

}

av_log(NULL, AV_LOG_INFO, "File[%s] Open Success\n", szFilePath);

// 포맷 확인 

av_log(NULL, AV_LOG_INFO, "Format: %s\n", pFmtCtx->iformat->name);



// 해당 함수가 있어야 Duration 에서 0 값 들어 오는 경우가 생기지 않음 

// read packets of a media file to get stream information.

ret = avformat_find_stream_info(pFmtCtx, NULL);


// avformat_find_stream_info

// 1, AVFormatContext 객체 사용

// 2, Codec 옵션 지정  // 정보를 얻기 위한 미리 Data를 Decode해야 되는 경우

// 임시로 생성할 Codec을 넘겨줄 Codec 옵션을 지정 대부분 NULL

// ** avformat_find_stream_info blocking 함수 (Input Source로 Network Protocol 사용시)

// 패킷이 발견될때까지 Read하기 때문에 시간이 지연되거나, 최악의 경우 패킷이 들어오지않으면

// block 되어버리는 일이 발생할 수 있다.


if (ret < 0)

{

av_log(NULL, AV_LOG_ERROR, "Fail to get Stream Information\n");

exit(-1);

}


av_log(NULL, AV_LOG_INFO, "Get Stream Information Success\n");



// Get Stream Duration 


if (pFmtCtx->duration > 0)

{


// Dev-C++ 에서는 long long 타입 정상적으로 작동 하지않음 

// __int64 vc 에서만 쓰는 자료형 

// __int64 nn1 = 2147483647ll;

// __int64 nn2 = -2147483648ll;

// __int64 vv = 100ll;

// __int64 rr1 = nn1+vv;

// __int64 rr2 = nn2 -vv;

// size_t t1 = sizeof(long long int);

// size_t t2 = sizeof(__int64)

// long long int r1 = 

int tns, thh, tmm, tss;

// duration 값을 받았을 경우에 롱롱 타입으로(64bit) 32bit일경우에는 롱롱 타입이 지원되지않음 유의바람! 빠셍

// 

tns = pFmtCtx->duration / 1000000LL;

thh = tns / 3600;

tmm = (tns % 3600) / 60;

tss = (tns % 60);


if (tns > 0) {

av_log(NULL, AV_LOG_INFO, "Duration : %2d:%02d:%02d\n", thh, tmm, tss);

// av_log(NULL, AV_LOG_INFO, "Duration : duration %d  thh : %d \n ", pFmtCtx->duration, thh);

}


}



// 일반적인 미디어의 스트림은 Video 와 Audio 로 나누어져 있으며 두가지의 각각 스트림이 인코딩 -> 먹싱 -> 미디어 

// 미디어의 역활은 반대로 -> 디먹싱 -> 디코딩 -> Video,Audio  Source로 나타나게 된다. 

// 영상 편집 어플리케이션의경우  디먹싱 과정에서 나타나는 Elements들을 제어해서 편집을 하는 경우가 대다수 


av_log(NULL, AV_LOG_INFO, "Number of Stream: %d\n", pFmtCtx->nb_streams);


// print Stream Information


int i;

for (i = 0; i < pFmtCtx->nb_streams; i++) {

AVStream *pStream = pFmtCtx->streams[i];

const char *szType = AVMediaType2Str(pStream->codec->codec_type);

const char *szCodecName = AVCodecID2Str(pStream->codec->codec_id);

av_log(NULL, AV_LOG_INFO, "    > Stream[%d]: %s: %s ", i, szType, szCodecName);

if (pStream->codec->codec_type == AVMEDIA_TYPE_VIDEO) {

av_log(NULL, AV_LOG_INFO, "%dx%d (%.2f fps)", pStream->codec->width, pStream->codec->height, av_q2d(pStream->r_frame_rate));

}

else if (pStream->codec->codec_type == AVMEDIA_TYPE_AUDIO) {

av_log(NULL, AV_LOG_INFO, "%d Hz", pStream->codec->sample_rate);

}

av_log(NULL, AV_LOG_INFO, "\n");

}






// Close an opened input AVFormatContext

avformat_close_input(&pFmtCtx);

// avformat_close_input 

// avformat_open_input 혹은 avformat_alloc_context()

// 함수를 통해서 할당된 AVFormatContext 객체 S를 해제까지 해준다. 따로 free가 필요없다.



// Undo the initialization done by avformat_network_init

avformat_network_deinit();





return 0;



}


이상태로 돌리게 되면 함수 2개가 선언이 안되어있어서 빨간 줄이 갈텐데 

const char *AVMediaType2Str(AVMediaType type);

const char *AVCodecID2Str(AVCodecID id);

함수는 .txt로 첨부 한다. 

AvMediaType2Str_AvCodecID2str_Method.txt



'개발일지(Platform & Library) > ffmpeg' 카테고리의 다른 글

미디어 파일의 기초  (0) 2016.06.14
ffmpeg 준비 및 환경 설정(Windows)  (0) 2016.06.14

ffmpeg으로 미디어 플레이어를 만들기 전에 기본적인 미디어의 만들어지는 과정을 좀 대충 공부를 해야된다.



일단


Video Source -> Video Encoder -> Video Element

-> Muxer(Muxing)먹싱 작업 -> Media

Audio Source -> Audio Encoder -> Audio Element 




Muxing -> MultiPlexing의 약자 


1. 가공되지 않은 원본소리 (Video/Audio Source) -> Encoding 과정 -> 결과물(Video / Audio Elements)

* Encoder -> Encoder + Decoder = Codec(H.264, H.265 HEVC)

가공되지 않은 원본의 크기가 너무 크기 때문에 인코딩 과정을 거쳐야 한다. 


결과물이 나왔을 시에 (Elements) 결과물을 담기 위한 상자가 필요하다 = Container(.avi , .mkv, .ts 등등)


컨테이너 포맷과 코덱은 다른것이다. mp4에는 h.264를 권장 (컨테이너 = mp4 코덱 = h.264)


그럼 여기서 플레이어가 해주는일은 뭔가 


-> Video Element -> Video Decoder -> Video Source

Media -> Demuxer(Demuxing) 

-> Audio Element -> Audio Decoder -> Audio Source


1. 디먹싱 과정의 각각의 Elements들을 하나씩 꺼냄


2. 컨테이너(.mp4, avi 드에서 꺼낸) Elements을 디코더에 의해 디코딩 진행 -> 각각 원본 영상 및 소리로 변환


3. 이 단계에서 후처리 가능 (소리 보정 왜곡)


4. 영상과 소리를 시간에 맞게 잘 동기화하여서 화면 혹은 스피커로 출력 -> 소리시간에 맞추어 영상을 출력해주는 동기화 방법이 가장 많이 사용 된다.


이중 ffmpeeg 의 역할은 출력을 제외한 모든 과정 


을 뜻하게 된다. 




지금은 좀 미뤄 줬지만

ffmpeg 과 GUI 크로스플랫폼 (qt 등)을 이용하여서 멀티미디어 를 하나 제작해 볼까 한다.



우선 ffmpeg을 Windows 버전에서 사용해볼라 한다. 어차피 ffmpeg소스야 어디서든 똑같이 돌아가기에


문제는 없다.


//Windows 버전 Build 용 ffmpeg을 다운로드 한다.



https://ffmpeg.zeranoe.com/builds/ // ffmpeg 다운 // dev 버전과 shared 버전 다운로드 bin , include, lib 폴더만 따로 압축 풀기


1. win32-dev 파일에서는 include / lib 만 풀고


2. win32-shared 파일에서는 bin 폴더만 압축을 푼다. 


3. D:\ffmpeg 폴더를 하나 생성후 3개의 폴더를 넣어 놓는다.

이런식으로 



혹시 visual studio 2013 버전 이하라면 inttypes.h 파일을 추가해주어야 한다. 


// 다운로드 경로 https://code.google.com/p/msinttypes/


관련 정보는 


// 정보 공유 

http://trac.ffmpeg.org/wiki // 위키 


http://www.ffmpeg.org //공홈



64bit을 받았을시에


구성관리자 -> 활성 솔루션 플랫폼 -> 새로 추가하기 x64(새로운 프로젝트 생성 체크 해제) -> Visual Studio 에서 


프로젝트 플랫폼 x64로 새로 추가한다. (Visual Studio 2013 프리미엄 기준) Windows



1.   구성관리자 -> 

2. -> 활성 솔루션 플랫폼 -> 새로 만들기 -> 

3. -> 새 플랫폼 선택 x64 선택후 추가 


4. 프로젝트 플랫폼도 새로만들기 하여 64를 추가 해주어야 한다. 




여기까지 한 후에 Alt + F7 


1. 구성 속성 디버깅 -> 환경 : PATH=%PATH%;$폴더위치/bin  

-> PATH=%PATH%;D:\ffmpeg\bin


2. C/C++  추가 포함 디렉터리 (Additional Directory ) 


-> "D:\ffmpeg\include"


3. 링커    추가 라이브러리 디렉터리 


-> "D:\ffmpeg\lib"



여기까지 설정이 되었다면 ffmpeg을 windows 에서 build하기 위한 준비를 모두 끝났다고 보면 된다. 



'개발일지(Platform & Library) > ffmpeg' 카테고리의 다른 글

ffmpeg의 시작 (파일 분석)  (0) 2016.06.14
미디어 파일의 기초  (0) 2016.06.14

+ Recent posts