이 장에서는 GStreamer 기반 애플리케이션을 작성할 때 염두에 두는 것이 유용할 수 있는 꽤 무작위적인 사항을 선별하여 담았습니다. 여기에 제공된 정보를 얼마나 많이 사용할지는 여러분에게 달려 있습니다. GStreamer 애플리케이션을 사용하여 파이프라인 문제를 디버깅하는 방법을 곧 논의할 것입니다. 또한 플러그인과 element에 대한 지식을 습득하는 방법과 이를 중심으로 애플리케이션을 빌드하기 전에 간단한 파이프라인을 테스트하는 방법에 대해서도 다룰 것입니다.
Good programming habits
- 파이프라인에 항상 GstBus 핸들러를 추가하세요. 항상 애플리케이션에서 오류를 보고하고 경고 및 정보 메시지로 무언가를 시도하세요.
- 항상 GStreamer 함수의 반환 값을 확인하세요. 특히 gst_element_link() 및 gst_element_set_state()의 반환 값을 확인하세요.
- gst_element_get_pad()와 같이 non-base type을 반환하는 모든 함수의 반환 값을 역참조하세요. 또한 gst_object_get_name()과 같이 항상 non-const 문자열 반환을 해제하세요.
- 항상 파이프라인 객체를 사용하여 파이프라인의 현재 상태를 추적하세요. 애플리케이션에 private 변수를 보관하지 마세요. 또한 사용자가 "재생" 버튼을 눌러도 사용자 인터페이스를 업데이트하지 마세요. 대신 GstBus에서 "state-changed" 메시지를 수신하고 이 메시지를 받을 때마다 사용자 인터페이스만 업데이트하세요.
- 발견한 모든 버그는 https://gitlab.freedesktop.org/gstreamer/에서 Gitlab에 보고하세요.
Debugging
애플리케이션은 광범위한 GStreamer 디버깅 시스템을 사용하여 파이프라인 문제를 디버깅할 수 있습니다. Element는 이 시스템에 출력을 작성하여 수행 중인 작업을 기록합니다. 오류 보고에는 사용되지 않지만 element가 정확히 무엇을 하는지 추적하는 데 매우 유용하여 애플리케이션 문제 (예: 검색 실패, 동기화되지 않은 미디어 등)를 디버깅할 때 유용할 수 있습니다.
대부분의 GStreamer 기반 애플리케이션은 커맨드라인 옵션 --gst-debug=LIST 및 관련 패밀리 멤버를 허용합니다. 목록은 범주/레벨 쌍의 쉼표로 구분된 목록으로 구성되며, 이를 통해 특정 디버깅 범주에 대한 디버깅 레벨을 설정할 수 있습니다. 예를 들어, --gst-debug=oggdemux:5는 Ogg demuxer element에 대한 디버깅을 켭니다. 와일드카드도 사용할 수 있습니다. 디버깅 레벨 0은 모든 디버깅을 끄고 레벨 9는 모든 디버깅을 켭니다. 중간 값은 일부 디버깅만 켭니다 (메시지 심각도에 따라 다름, 예를 들어 2는 오류와 경고만 표시함). 사용 가능한 모든 옵션 목록은 다음과 같습니다.
- --gst-debug-help는 사용 가능한 디버그 범주를 인쇄하고 종료합니다.
- --gst-debug-level=LEVEL은 기본 디버그 레벨을 설정합니다( 0 (출력 없음)에서 9 (모든 것)까지 가능).
- --gst-debug=LIST는 범주_이름:레벨 쌍의 쉼표로 구분된 목록을 사용하여 개별 범주에 대한 특정 레벨을 설정합니다 (예: GST_AUTOPLUG:5,avidemux:3). 또는 동일한 효과가 있는 GST_DEBUG 환경 변수를 설정할 수도 있습니다.
- --gst-debug-no-color는 색상 디버깅을 비활성화합니다. 색상 디버그 출력을 영구적으로 비활성화하려면 GST_DEBUG_NO_COLOR 환경 변수를 1로 설정할 수도 있습니다. 페이저 출력을 엉망으로 만드는 것을 피하기 위해 색상을 비활성화하는 경우 less -R을 사용해 보세요.
- --gst-debug-color-mode=MODE는 디버그 로그 색상 모드를 변경합니다. MODE는 on, off, auto, disable, unix 중 하나일 수 있습니다. 또한 색상이 있는 디버그 출력을 영구적으로 변경하려면 GST_DEBUG_COLOR_MODE 환경 변수를 설정할 수 있습니다. 페이저 출력을 엉망으로 만드는 것을 피하기 위해 색상을 비활성화하는 경우 less -R을 사용해 보세요.
- --gst-debug-disable은 디버깅을 완전히 비활성화합니다.
Conversion plugins
GStreamer에는 대부분 애플리케이션에서 유용하다고 생각되는 변환 플러그인이 많이 들어 있습니다. 구체적으로는 videoscalers (videoscale), colorspace convertors (videoconvert), audio format convertors 및 channel resamplers (audioconvert), audio samplerate convertors (audioresample)입니다. 이러한 변환기는 필요하지 않을 때는 아무것도 하지 않고 패스스루 모드로 작동합니다. 그러나 하드웨어가 특정 요청을 지원하지 않으면 활성화됩니다. 모든 애플리케이션에서 이러한 element를 사용하는 것이 좋습니다.
Utility applications provided with GStreamer
GStreamer에는 애플리케이션 개발에 도움이 되는 기본 커맨드라인 유틸리티 세트가 제공됩니다. 여기서는 gst-launch와 gst-inspect만 논의하겠습니다.
gst-launch
gst-launch는 파이프라인을 테스트하는 데 사용할 수 있는 간단한 스크립트와 같은 커맨드라인 애플리케이션입니다. 예를 들어, 커맨드 gst-launch audiotestsrc ! audioconvert ! audio/x-raw,channels=2 ! alsasink는 사인파 (sine-wave) 오디오 스트림을 생성하고 ALSA 오디오 카드로 재생하는 파이프라인을 실행합니다. gst-launch는 또한 스레드 (필요에 따라 또는 큐 element가 파이프라인에 삽입될 때 자동으로 사용됨) 및 bin (괄호 사용, 즉 "(" 및 ")")을 사용할 수 있습니다. 점 (.)을 사용하여 element에 padname을 암시하거나 padname을 생략하여 자동으로 pad를 선택할 수도 있습니다. 이 모든 것을 사용하여 파이프라인 gst-launch filesrc location=file.ogg ! oggdemux name=d d. ! queue ! theoradec ! videoconvert ! xvimagesink d. ! queue ! vorbisdec ! audioconvert ! audioresample ! alsasink는 Theora 비디오 스트림과 Vorbis 오디오 스트림이 포함된 Ogg 파일을 재생합니다. 커맨드라인에서 decodebin과 같은 autoplugger를 사용할 수도 있습니다. 자세한 내용은 gst-launch의 매뉴얼 페이지를 참조하세요.
gst-inspect
gst-inspect는 element의 모든 속성, 신호, 동적 매개변수 및 객체 계층을 검사하는 데 사용할 수 있습니다. 이는 element가 지원하는 GObject 속성 또는 신호 (및 인수 사용)를 확인하는 데 매우 유용할 수 있습니다. gst-inspect fakesrc를 실행하여 무엇을 하는지 알아보세요. 자세한 내용은 gst-inspect의 매뉴얼 페이지를 참조하세요.
원문: Things to check when writing an application (gstreamer.freedesktop.org)
Things to check when writing an application
Things to check when writing an application This chapter contains a fairly random selection of things that can be useful to keep in mind when writing GStreamer-based applications. It's up to you how much you're going to use the information provided here. W
gstreamer.freedesktop.org
'IT와 개발 > GStreamer Study' 카테고리의 다른 글
Constructing the Boilerplate (0) | 2024.08.23 |
---|---|
Plugin Writer's Guide: Foundations (0) | 2024.08.16 |
Programs (1) | 2024.08.02 |
Playback Components (0) | 2024.07.26 |
Pipeline manipulation (0) | 2024.07.19 |