MultiMedia Framework(23)
-
수동으로 파이프라인 구축하기
전 포스팅에는 uri를 가져와서 playbin에 담은 후 gst_parse_launch를 통해 pipeline을 구축하는 방법을 설명했다. 이번에는 직접 pipeline을 구축해 보려고 한다. 이번에도 컴파일을 한 후 재생을 해보자. $> g++ -o tutorial2 tutorial2.c `pkg-config --cflags --libs gstreamer-1.0` 예전에 화면 조정 시간에 많이 봤던 장면이네..코드를 살펴보자.. gst_init(&argc, &argv); 이전 포스팅에서 설명했으니 이번엔 skip.. source = gst_element_factory_make("videotestsrc", "source");sink = gst_element_factory_make("autovideosin..
2015.03.20 -
hello world 찍기
대부분의 언어들은 Hello world를 찍어보는 것을 시작으로 프로그래밍을 이야기한다. 그럼 과연 gstreamer에서도 hello world를 찍어볼 수 있을까?여기서는 hello world를 화면에 찍어보기 보다는 gstreamer에서 hello world 격인 멀티미디어 재생을 해보려고 한다.해당 Tutorial은 gstreamer sdk 문서를 참조하였다. 해당 코드를 우선 실행시켜보자. 아래와 같이 컴파일을 하면 tutorial1 이라는 실행 파일이 생성된다. $> g++ -o tutorial1 tutorial1.c `pkg-config --cflags --libs gstreamer-1.0` 이제 생성된 tutorial1을 실행해보자. $> ./tutorial1 화면이 잘 재생되는가??? 이제..
2015.03.19 -
ffmpeg에서 이미지 추출하기
ffmpeg을 통해 비디오 영상에서 이미지를 추출할 수 있다. $> ffmpeg -ss [시간] -i [파일명] -y -vframes 1 -an -s [사이즈] [이미지 파일 이름] 시간(-ss) : 동영상 파일로부터 이미지를 추출하고 싶은 시간대. ex) 00:00:05 (5초 후의 영상을 이미지로 뽑아라) 파일명(-i) : 동영상 파일 경로 ex) test.mp4사이즈(-s) : 추출할 이미지 사이즈 ex) 1920x1080, 720x405이미지 파일 이름 : 결과 이미지 파일명 ex) test.jpg옵션(-y) : 동일 파일이 존재할땐 덮어쓴다.프레임 인덱스(-vframes) : 추출한 프레임 수오디오(-an) : 오디오를 끄는 기능. 파일에서 영상만 뽑아 쓰고 싶을 경우 -ss 옵션을 쓸 경우에는..
2014.12.13 -
우분투에서 ffmpeg 설치 방법
우분투에서 아래와 같이 apt-get으로 ffmpeg을 설치할 수 있다. $> sudo apt-get install ffmpeg 하지만 위와 같이 설치할 경우 h264 코덱이 포함되지 않아서 h264 인코딩 혹은 디코딩 하는데 제약 사항이 생긴다. 그래서 h264 소스를 다운받은 후 ffmpeg을 다시 빌드를 해주어야 하는데 그 방법은 아래와 같다. 1. 의존 관계가 있는 library 다운로드 및 업데이트ffmpeg을 컴파일 하기 위한 dependency가 있는 라이브러리들을 다운로드 한다. $> sudo apt-get update$> sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-..
2014.12.12 -
Buffer와 Event
Buffer버퍼는 pipeline을 통해 흘러가는 데이터를 포함한다. source Element는 일반적으로 새로운 버퍼를 생성하고 생성된 버퍼를 다음 element로 전송한다. 버퍼는 메모리의 시작 주소, 메모리 크기, 타임스탬프, 레퍼런스 카운트(얼마나 많은 element가 해당 버퍼를 쓰고 있는지를 나타내는 카운트), 그리고 버퍼 플래그로 구성된다.일반적인 버퍼의 사용은, 맨 처음 버퍼가 생성되고 메모리가 할당되며 해당 메모리에 데이터를 복사한다.복사된 메모리를 가진 버퍼를 다음 element에 넘기고, 다음 element는 버퍼에 쓰여진 데이터를 읽은 후 버퍼의 레퍼런스 카운트를 줄인다.버퍼에 대한 보다 정교한 사용은 GStreamer를 이용해보며 차츰 익혀나가야 하겠다. Events이벤트 역시 ..
2013.08.01 -
Ghost pads
Element들은 다른 Element와 연결하기 위해 각각 pads를 가지고 있다. 그렇다면 Bin은? Bin 자체도 내부 Element와 연결하거나 외부로부터 데이터를 받기 위해서는 pad가 있어야 하는 것 아닌가? 그래서 생긴게 바로 Ghost pads이다. 그림에서 보면 Element1의 sink pad는 이제 bin의 sink pad 역할도 함께 담당하게 된다. ghostpad는 gst_ghost_pad_new()를 사용하여 생성한다.
2013.07.31