# 커스텀 GStreamer 플러그인 개발

자체 GStreamer 플러그인을 작성하기 전에 핵심 개념과 튜토리얼을 숙지해야 합니다.

![../_images/guidelines-gstreamer-plugin.png](data:image/png;base64,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)

**새로운 GStreamer 플러그인을 구현하기 위한 전반적인 워크플로우**

커스텀 플러그인을 구현하려면 다음과 같이 해야 합니다.

- 기존의 기본 템플릿 클래스에서 상속할지, GstElement 스켈레톤 클래스에서 바로 상속할지를 결정합니다.
- Pads, 요소 및 caps(capabilities)를 지정합니다.
- init, set\_caps, set\_property, transform 등의 주요 함수를 구현합니다.
- 플러그인을 등록합니다.

주요 튜토리얼, 가이드 및 리소스

- 튜토리얼:

    [https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c)
- 플러그인 작성자 가이드:

    [https://gstreamer.freedesktop.org/documentation/plugin-development/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/plugin-development/index.html?gi-language=c)
- 추가 문서:

    [https://gstreamer.freedesktop.org/documentation/additional/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/additional/index.html?gi-language=c)
- API 참조:

    [https://gstreamer.freedesktop.org/documentation/libs.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/libs.html?gi-language=c)
- Caps 기능:

    [https://gstreamer.freedesktop.org/documentation/gstreamer/gstcapsfeatures.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcapsfeatures.html?gi-language=c)
- Caps 협상:

    [https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/negotiation.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/negotiation.html?gi-language=c)

주요 사항

새로운 플러그인을 개발할 때는 항상 다음과 같은 주요 사항에 유의하세요.

- 상속 및 기본 클래스

    - 각 GStreamer 플러그인은 기본 템플릿 클래스에서 상속되거나 GstElement 스켈레톤 클래스에서 바로 상속됩니다.
    - GstElement 클래스는 최소한의 프레임워크 역할을 하며 개발자는 이벤트 처리, 쿼리, 버퍼 관리 및 기타 필수 기능 구현을 담당합니다.
    - 플러그인 요구사항을 충족하는 기존의 기본 템플릿 클래스가 없는 경우 개발자는 GstElement를 출발점으로 사용할 수 있습니다.
- 기본 템플릿 클래스

    - GStreamer는 대부분의 이벤트와 쿼리를 처리하는 기본 템플릿 클래스를 제공하지만 이러한 기본 클래스는 버퍼 처리를 관리하지 않습니다.
- 버퍼 관리

    - 개발자는 선택한 기본 클래스에 따라 버퍼 관리를 구현하고 관련 가상 메서드를 재정의해야 합니다.
    - 일부 메서드에는 기본 구현이 있지만 일부는 순수한 가상 함수입니다.
- Capabilities

    - Caps는 GstPadTemplates에 표시되어 Pads에 지원되는 미디어 유형을 지정합니다.
    - Pads는 caps를 사용하여 지원되는 형식에 대한 정보를 교환합니다. 연결된 Pads서 교차하는 caps에 따라 통신을 위한 실제 데이터 형식이 결정됩니다.
- 기본 클래스의 이점

    - 기본 클래스는 개발자가 커스텀 구현을 재정의할 수 있는 가상 메서드를 제공합니다.
    - 개발자는 기존의 기본 클래스 기능을 활용하여 플러그인 디자인에 따라 필요한 특정 사용자 지정에 집중할 수 있습니다.

참고

- 이러한 지침은 `imsdk.lnx.2.0.0.r1-rel` 릴리스를 기반으로 합니다.
- 기존 플러그인을 기반으로, 지원되지 않는 사용 사례(예: 초고해상도)에 대응할 수 있는 Qualcomm IM SDK 플러그인을 제작하는 숙련된 개발자를 위한 지침입니다.
- 커스텀 GStreamer 플러그인 만들기는 고급 작업이며 숙련된 GStreamer 개발자만 사용하게 되어 있습니다.
- 오픈 소스 도메인과 공식 GStreamer 포털에서 이 작업에 대한 광범위한 튜토리얼을 확인할 수 있습니다.
- 이 가이드를 템플릿으로 사용하고 오픈 소스 리소스를 사용하여 커스텀 플러그인 개발에 대해 알아보세요.

Last Published: Dec 23, 2025

[Previous Topic
사용자 지정 모델에 대한 후처리 지원 추가](https://docs.qualcomm.com/bundle/publicresource/80-70020-15BK/topics/add-postprocessing-support-custom-model.md) [Next Topic
초고해상도 플러그인 개발](https://docs.qualcomm.com/bundle/publicresource/80-70020-15BK/topics/development-process-for-new-plugin.md)