Skip to main content
Version: 1.0.0

GStreamer 이해하기

시작하면서

NuFiStreamer의 기반이 되는 GStreamer에 대해 이해해보려합니다.
간단한 GStreamer 파이프라인을 실행시켜보고 GStreamer element 개념에 대해 이해해보겠습니다.

Goal

  • GStreamer 파이프라인 이해하기

GStreamer 개요

GStreamer는 실시간으로 데이터가 계속 주어지는 영상, 음성과 같은 미디어 스트림 데이터를 처리하는데 특화된 프레임워크입니다.

GStreamer는 기본적으로 element 단위로 데이터를 처리합니다. 인코더, 디코더, 해상도 변환, 비디오 포맷 변환, 영상 화면 출력 등 다양한 element들이 존재합니다. 이 다양한 element를 조립하여 파이프라인을 구축하는 방식으로 개발자가 쉽게 미디어 스트림 처리 애플리케이션을 개발할 수 있습니다.

또한 원하는 기능을 가지는 element 또한 직접 개발해서 파이프라인에 추가할 수도 있기 때문에 확장성이 뛰어납니다.

더 자세한 내용은 다음 링크를 참고하시면 됩니다. GStreamer 공식 Document

gstreamer-01

GStreamer 파이프라인 실행

GStreamer는 디버깅 용으로 만들어진 gst-launch-1.0라는 도구를 사용하여 파이프라인을 터미널에서 구축하고 실행해볼 수 있습니다. 다음 파이프라인을 터미널에서 실행시켜보고 결과물을 확인해봅시다.

$ gst-launch-1.0 filesrc location=/tmp/videos/sample_720p.h264 ! decodebin ! videoconvert ! x264enc ! mp4mux ! filesink location=./test_video.mp4

gstreamer-02

파이프라인이 실행되고 약 40초 후에 종료됩니다. 그리고 새로운 test_video.mp4 파일이 생성되는 것을 확인해볼 수 있습니다.

생성된 비디오 파일을 노트북에서 확인해볼 수 있습니다.

gstreamer-03

지금 실행시켰던 파이프라인은 다음과 같은 element들로 구성되어 있습니다.

  • filesrc : /tmp/videos/sample_720p.h264 경로에 있는 H.264 비디오 파일을 읽어 들이는 소스 요소입니다. 미디어 스트림을 생성합니다.
  • decodebin : 입력으로 들어온 미디어 스트림의 형식을 자동으로 감지하고 적절한 디코더를 선택하여 비디오 데이터를 디코딩하는 역할을 합니다.
  • videoconvert : 디코딩된 비디오 스트림의 형식을 변환합니다.
  • x264enc : 디코딩된 원시비디오 데이터를 압축된 H.264 형식으로 인코딩합니다.
  • mp4mux : 인코딩된 H.264 비디오 데이터를 MP4 컨테이너 형식으로 패키징합니다.
  • filesink : 처리된 비디오 스트림을 지정된 파일 경로(./test_video.mp4)에 저장합니다. 최종 출력이 되는 MP4 파일이 이 위치에 생성됩니다.

이처럼 여러 element를 조합해 파이프라인을 만드는 것으로 h264 형식의 비디오 파일을 mp4 형식의 비디오 파일로 변환할 수 있었습니다.