본문 바로가기
IT와 개발/GStreamer Study

Programs

by 도서 임보자 2024. 8. 2.

gst-launch

이것은 커맨드라인을 기반으로 파이프라인을 구성하는 도구입니다.


간단한 커맨드라인은 다음과 같습니다.

gst-launch filesrc location=hello.mp3 ! mad ! audioresample ! osssink

 

더 복잡한 파이프라인은 다음과 같습니다.

gst-launch filesrc location=redpill.vob ! dvddemux name=demux \
 demux.audio_00 ! queue ! a52dec ! audioconvert ! audioresample ! osssink \
 demux.video_00 ! queue ! mpeg2dec ! videoconvert ! xvimagesink

 

또한 parser를 자신의 코드에서 사용할 수 있습니다. GStreamer는 파이프라인을 구성하는 데 사용할 수 있는 gst_parse_launch() 함수를 제공합니다. 다음 프로그램을 사용하면 gst_parse_launch() 함수를 사용하여 MP3 파이프라인을 만들 수 있습니다.

#include <gst/gst.h>

int
main (int argc, char *argv[])
{
  GstElement *pipeline;
  GstElement *filesrc;
  GstMessage *msg;
  GstBus *bus;
  GError *error = NULL;

  gst_init (&argc, &argv);

  if (argc != 2) {
    g_print ("usage: %s <filename>\n", argv[0]);
    return -1;
  }

  pipeline = gst_parse_launch ("filesrc name=my_filesrc ! mad ! osssink", &error);
  if (!pipeline) {
    g_print ("Parse error: %s\n", error->message);
    exit (1);
  }

  filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc");
  g_object_set (filesrc, "location", argv[1], NULL);
  g_object_unref (filesrc);

  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  bus = gst_element_get_bus (pipeline);

  /* wait until we either get an EOS or an ERROR message. Note that in a real
   * program you would probably not use gst_bus_poll(), but rather set up an
   * async signal watch on the bus and run a main loop and connect to the
   * bus's signals to catch certain messages or all messages */
  msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);

  switch (GST_MESSAGE_TYPE (msg)) {
    case GST_MESSAGE_EOS: {
      g_print ("EOS\n");
      break;
    }
    case GST_MESSAGE_ERROR: {
      GError *err = NULL; /* error to show to users                 */
      gchar *dbg = NULL;  /* additional debug string for developers */

      gst_message_parse_error (msg, &err, &dbg);
      if (err) {
        g_printerr ("ERROR: %s\n", err->message);
        g_error_free (err);
      }
      if (dbg) {
        g_printerr ("[Debug details: %s]\n", dbg);
        g_free (dbg);
      }
    }
    default:
      g_printerr ("Unexpected message of type %d", GST_MESSAGE_TYPE (msg));
      break;
  }
  gst_message_unref (msg);

  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);
  gst_object_unref (bus);

  return 0;
}

 

구성된 bin에서 element 이름을 사용하여 filesrc element를 검색하는 방법에 주목하세요.

 

Grammar Reference

gst-launch 구문은 flex/bison parser에 의해 처리됩니다. 이 섹션은 문법의 전체 사양을 제공하기 위한 것입니다. 이 사양에서 벗어나는 모든 사항은 버그로 간주됩니다.

 

Element

          ... mad ...

 

Bare 식별자 (문자로 시작하고 문자, 숫자, 대시, 밑줄, 퍼센트 기호 또는 콜론만 포함하는 문자열)는 주어진 element factory에서 element를 생성합니다. 이 예에서 "mad" MP3 디코딩 플러그인의 인스턴스가 생성됩니다.

 

Links

          ... !sink ...

 

느낌표는 선택적으로 양쪽에서 한정된 pad 이름 (pad 이름, 선택적으로 element 이름 앞에 올 수 있음)을 가지며, 두 pad를 연결합니다. Source pad가 지정되지 않으면 바로 앞의 element에서 source pad가 자동으로 선택됩니다. Sink pad가 지정되지 않으면 다음으로 구성될 element에서 sink pad가 선택됩니다. 호환되는 pad를 찾으려고 시도합니다. Pad 이름 앞에는 my_element_name.sink_pad처럼 element 이름이 올 수 있습니다.

 

Properties

          ... location="http://gstreamer.net" ...

 

속성의 이름은 선택적으로 element 이름과 등호로 구분된 값으로 한정되며, element에 속성을 설정합니다. Element가 지정되지 않으면 이전 element가 가정됩니다. 문자열은 선택적으로 따옴표로 묶을 수 있습니다. 문자열의 문자는 backtick (\)으로 이스케이프할 수 있습니다. 오른쪽이 모두 숫자이면 정수로 간주됩니다. 모두 숫자와 소수점인 경우 실수입니다. "true", "false", "TRUE" 또는 "FALSE"이면 boolean으로 간주됩니다. 그렇지 않으면 문자열로 구문 분석됩니다. 속성의 유형은 나중에 구문 분석에서 결정되고 값은 대상 유형으로 변환됩니다. 이 변환은 작동이 보장되지 않으며 g_value_convert 루틴에 의존합니다. 값 변환 API의 제한으로 인해 잘못된 변환에는 오류 메시지가 표시되지 않습니다.

 

Bins, Threads, and Pipelines

          ( ... )

 

괄호 사이의 파이프라인 설명은 bin에 배치됩니다. 열린 괄호 앞에는 jackbin.( ... ) 처럼 유형 이름이 올 수 있어 지정된 유형의 bin을 만들 수 있습니다. 대괄호는 파이프라인을 만들고 중괄호는 스레드를 만듭니다. 기본 최상위 bin 유형은 파이프라인이지만 전체 설명을 괄호나 중괄호 안에 넣으면 이 기본값을 재정의할 수 있습니다.

 

gst-inspect

플러그인이나 element의 속성에 대해 쿼리하는 도구입니다.


mad element에 대한 정보를 쿼리하려면 다음을 지정합니다.

gst-inspect mad

 

다음은 osssink element에 대한 쿼리의 출력입니다.

Factory Details:
  Rank:         secondary (128)
  Long-name:            Audio Sink (OSS)
  Klass:                Sink/Audio
  Description:          Output to a sound card via OSS
  Author:               Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim.taymans@chello.be>

Plugin Details:
  Name:                 ossaudio
  Description:          OSS (Open Sound System) support for GStreamer
  Filename:             /home/wim/gst/head/gst-plugins-good/sys/oss/.libs/libgstossaudio.so
  Version:              1.0.0.1
  License:              LGPL
  Source module:        gst-plugins-good
  Source release date:  2012-09-25 12:52 (UTC)
  Binary package:       GStreamer Good Plug-ins git
  Origin URL:           Unknown package origin

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseSink
                         +----GstAudioBaseSink
                               +----GstAudioSink
                                     +----GstOssSink

Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      audio/x-raw
                 format: { S16LE, U16LE, S8, U8 }
                 layout: interleaved
                   rate: [ 1, 2147483647 ]
               channels: 1
      audio/x-raw
                 format: { S16LE, U16LE, S8, U8 }
                 layout: interleaved
                   rate: [ 1, 2147483647 ]
               channels: 2
           channel-mask: 0x0000000000000003


Element Flags:
  no flags set

Element Implementation:
  Has change_state() function: gst_audio_base_sink_change_state

Clocking Interaction:
  element is supposed to provide a clock but returned NULL

Element has no indexing capabilities.
Element has no URI handling capabilities.

Pads:
  SINK: 'sink'
    Implementation:
      Has chainfunc(): gst_base_sink_chain
      Has custom eventfunc(): gst_base_sink_event
      Has custom queryfunc(): gst_base_sink_sink_query
      Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
    Pad Template: 'sink'

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "osssink0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  sync                : Sync on the clock
                        flags: readable, writable
                        Boolean. Default: true
  max-lateness        : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
                        flags: readable, writable
                        Integer64. Range: -1 - 9223372036854775807 Default: -1
  qos                 : Generate Quality-of-Service events upstream
                        flags: readable, writable
                        Boolean. Default: false
  async               : Go asynchronously to PAUSED
                        flags: readable, writable
                        Boolean. Default: true
  ts-offset           : Timestamp offset in nanoseconds
                        flags: readable, writable
                        Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0
  enable-last-sample  : Enable the last-sample property
                        flags: readable, writable
                        Boolean. Default: false
  last-sample         : The last sample received in the sink
                        flags: readable
                        Boxed pointer of type "GstSample"
  blocksize           : Size in bytes to pull per buffer (0 = default)
                        flags: readable, writable
                        Unsigned Integer. Range: 0 - 4294967295 Default: 4096
  render-delay        : Additional render delay of the sink in nanoseconds
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
  throttle-time       : The time to keep between rendered buffers
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
  buffer-time         : Size of audio buffer in microseconds, this is the minimum latency that the sink reports
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 200000
  latency-time        : The minimum amount of data to write in each iteration in microseconds
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 10000
  provide-clock       : Provide a clock to be used as the global pipeline clock
                        flags: readable, writable
                        Boolean. Default: true
  slave-method        : Algorithm to use to match the rate of the masterclock
                        flags: readable, writable
                        Enum "GstAudioBaseSinkSlaveMethod" Default: 1, "skew"
                           (0): resample         - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE
                           (1): skew             - GST_AUDIO_BASE_SINK_SLAVE_SKEW
                           (2): none             - GST_AUDIO_BASE_SINK_SLAVE_NONE
  can-activate-pull   : Allow pull-based scheduling
                        flags: readable, writable
                        Boolean. Default: false
  alignment-threshold : Timestamp alignment threshold in nanoseconds
                        flags: readable, writable
                        Unsigned Integer64. Range: 1 - 18446744073709551614 Default: 40000000
  drift-tolerance     : Tolerance for clock drift in microseconds
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 40000
  discont-wait        : Window of time in nanoseconds to wait before creating a discontinuity
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551614 Default: 1000000000
  device              : OSS device (usually /dev/dspN)
                        flags: readable, writable
                        String. Default: "/dev/dsp"

 

플러그인에 대한 정보를 쿼리하려면 다음을 수행합니다.

gst-inspect gstelements

 

 

원문: Programs (gstreamer.freedesktop.org)

 

Programs

Programs gst-launch This is a tool that will construct pipelines based on a command-line syntax. A simple commandline looks like: gst-launch filesrc location=hello.mp3 ! mad ! audioresample ! osssink A more complex pipeline looks like: gst-launch filesrc l

gstreamer.freedesktop.org

 

반응형

'IT와 개발 > GStreamer Study' 카테고리의 다른 글

Plugin Writer's Guide: Foundations  (0) 2024.08.16
Things to check when writing an application  (0) 2024.08.09
Playback Components  (0) 2024.07.26
Pipeline manipulation  (0) 2024.07.19
Autoplugging  (2) 2024.07.05