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 |