#gstreamer #gst-launch
#gstreamer #gst-запуск
Вопрос:
как мне установить несколько строк текста в канале textoverlay в gst-launch?
Я хочу настроить конвейер и хочу иметь несколько строк текста по центру как по вертикали, так и по горизонтали. Я могу выполнить 1 строку.
Я не уверен, как указать новую строку.
gst-launch-1.0 videotestsrc pattern=0 horizontal-speed=0 is-live=1
! textoverlay text="PLEASE <b>STAND</b> <span foreground="blue" size="x-large">nBY</span>Next <u>under-line</u>" valignment=center halignment=center font-desc="Sans, 24" ... other pipes ...
Я хотел бы в основном иметь 2 строки. оба должны быть выровнены по вертикали и горизонтали относительно друг друга и всего экрана.
Ответ №1:
Я не знаю, как передать символ новой строки внутри параметра в gst-launch
, но вы можете добиться того же с помощью кода C. Ниже приведен пример:
#include <glib.h>
#include <gst/gst.h>
int main(int argc, char* argv[])
{
GMainLoop* loop;
GstElement *pipeline, *source, *overlay, *sink;
gst_init(amp;argc, amp;argv);
loop = g_main_loop_new(NULL, FALSE);
// initialize elements
pipeline = gst_pipeline_new("audio-player");
source = gst_element_factory_make("videotestsrc", "source");
overlay = gst_element_factory_make("textoverlay", "overlay");
sink = gst_element_factory_make("autovideosink", "sink");
if (!pipeline || !source || !overlay || !sink) {
g_printerr("One element could not be created. Exiting.n");
return -1;
}
g_object_set(G_OBJECT(overlay), "text", "blebleblenble", NULL);
g_object_set(G_OBJECT(overlay), "font-desc", "Sans, 24", NULL);
g_object_set(G_OBJECT(overlay), "halignment", 1, NULL);
g_object_set(G_OBJECT(overlay), "valignment", 1, NULL);
// add elements to pipeline
gst_bin_add_many(GST_BIN(pipeline), source, overlay, sink, NULL);
// link elements
gst_element_link(source, overlay);
gst_element_link_many(overlay, sink, NULL);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
g_main_loop_run(loop);
// cleanup
gst_element_set_state(pipeline, GST_STATE_NULL);
gst_object_unref(GST_OBJECT(pipeline));
g_main_loop_unref(loop);
return 0;
}