LINUX.ORG.RU

GStreamer 1.0, сборка и дальнейшее использование (rtsp-server)

 , ,


0

1

Доброго времени суток. Собрал GStreamer 1.0+ из сорцов(вытянул с гита) с оф сайта, кое как поставил. Собрал gst-rtsp-server с помощью вспомогательных скриптов, собрались и примеры. Но как только попробовал собрать свой пример (ну проект в QtCreator набран, т.к. дальше это дело с кутэ будет использовано), так сразу посыпались ошибки. На сколько понимаю ругается на либу gio, но разобраться не могу.

Вот собственно содержимое pro файла:

#-------------------------------------------------
#
# Project created by QtCreator 2013-08-15T11:47:42
#
#-------------------------------------------------
QT       += core
QT       -= gui
TARGET = gstrtspserver-test1_0
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app
SOURCES += main.cpp
PKGCONFIG += gstreamer-1.0
INCLUDEPATH += /usr/local/include/gstreamer-1.0 \
        /usr/include/glib-2.0 \
        /usr/lib/i386-linux-gnu/glib-2.0/include \

LIBS += /usr/local/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgio-2.0 \

Код содержит только подключение библиотек и main.

#include <gst/gst.h>
#include <gst/rtsp-server/rtsp-server.h>

ну вот и собственно сама ошибка:

In file included from /usr/include/glib-2.0/gio/gio.h:54:0,
                 from /usr/local/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h:24,
                 from /usr/local/include/gstreamer-1.0/gst/net/gstnet.h:24,
                 from /usr/local/include/gstreamer-1.0/gst/rtsp-server/rtsp-media.h:23,
                 from /usr/local/include/gstreamer-1.0/gst/rtsp-server/rtsp-session.h:57,
                 from /usr/local/include/gstreamer-1.0/gst/rtsp-server/rtsp-session-pool.h:31,
                 from /usr/local/include/gstreamer-1.0/gst/rtsp-server/rtsp-server.h:31,
                 from ../gstrtspserver-test1_0/main.cpp:3:
/usr/include/glib-2.0/gio/gdbusintrospection.h:157:25: error: expected unqualified-id before 'protected'
/usr/include/glib-2.0/gio/gdbusintrospection.h:157:24: error: expected ';' at end of member declaration
/usr/include/glib-2.0/gio/gdbusintrospection.h:157:32: error: expected ':' before ';' token
make: *** [main.o] Error 1

Вроде бы всё так подключено, либы там вроде бы есть, хедеры тоже. Что странно - примеры собрались при сборке сорцов сервера, а своё уже нет. Посмотрел мэйкфайл тестовых примеров, подключение либ вроде такое же, там конечно есть и дополнительные флаги, но я незнаю могут ли они влиять и как их впихнуть в про файл.

Пробовал тоже самое на Gstreamer 0.10, всё работало, покопался в исходниках и обнаружил, что в новой сервере (с версии 1.0) подключена библиотека <gio>.



Последнее исправление: Blastbit (всего исправлений: 2)

INCLUDEPATH += /usr/local/include/gstreamer-1.0 \ /usr/include/glib-2.0 \ /usr/lib/i386-linux-gnu/glib-2.0/include \

Используй pkg-config, QMake это умеет

И, да, на будущее используй LORCODE.

error: expected unqualified-id before 'protected' /usr/include/glib-2.0/gio/gdbusintrospection.h:157:24:

Покажи-ка сюда 157 строчку этого файлика. Ну и +/-10 до и после нее. В свой я посмотрел, ничего интересного не нашёл

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

А.. вот как оно делается, спасибо за замечание(насчет LORCODE)

151  struct _GDBusInterfaceInfo
152  {
153    /*< public >*/
154    volatile gint         ref_count;
155    gchar                *name;
156    GDBusMethodInfo     **methods;
157    GDBusSignalInfo     **signals;
158    GDBusPropertyInfo   **properties;
159    GDBusAnnotationInfo **annotations;
160  };

ниже/выше только коменты.

Насчет PKGCONFIG - т.е. можно INCLUDEPATH не писать? Он только пути к заголовкам подставляет или библиотки тоже? Т.е. если правильно понял нужно в этот парметр записать gstreamer-1.0 и glib (или gio)?

Blastbit
() автор топика
Ответ на: комментарий от Blastbit

Насчет PKGCONFIG - т.е. можно INCLUDEPATH не писать?

Нужно. Пути к заголовочникам/библиотекам могут быть разными на разных системах (и меняться в зависимости от версии компонента).

Он только пути к заголовкам подставляет или библиотки тоже?

И то, и другое в зависимости от опций.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

ну вот я сейчас поставил такие настройки

#-------------------------------------------------
#
# Project created by QtCreator 2013-08-15T11:47:42
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = gstrtspserver-test1_0
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app
SOURCES += main.cpp

CONFIG += link_pkgconfig
PKGCONFIG += gstreamer-1.0 \
            glib-2.0 \
            gio-2.0

INCLUDEPATH += /usr/local/include/gstreamer-1.0 \
        #/opt/gstreamer-sdk/include \
        #/opt/gstreamer-sdk/include/gstreamer-0.10 \
      #  /opt/gstreamer-sdk/lib/glib-2.0/include \
       # /opt/gstreamer-sdk/include/glib-2.0 \
       # /opt/gstreamer-sdk/include/libxml2
        /usr/include/glib-2.0 \
        /usr/lib/i386-linux-gnu/glib-2.0/include \

LIBS += /usr/local/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 \
                        -lgio-2.0 \

Вроде не ругается QMake, но правда проблем это не решило. Может быть конечно что-то упустил. Вот ещё на всякий Makefile(файлообменник мэйлру) из примеров rtsp-server, может быть что-то подскажет, сам что-то не смог разобраться нормально.

Blastbit
() автор топика

и как их впихнуть в про файл

qtcreator сразу же умеет cmake

пока у тебя pro-файл состоит из трех строчек, преврати его в cmake. А то потом будет поздно.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Да может нафиг CMake? Неохота возиться что-то с ним, через pro то тоже наверное нормально можно сделать?

Blastbit
() автор топика
Ответ на: комментарий от Blastbit

Потом ты зафлудишь /development еще сотней вопросов специальной олимпиады, которые cmake за тебя решит автоматически. Ну я чо, мое дело тебе подсказать правильное слово для гугления в гугле, дальше сам решай)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

пока у тебя pro-файл состоит из трех строчек, преврати его в cmake. А то потом будет поздно.

Нууу... это слишком сурово. По моему qmake и cmake одинаково вызывают покраснение глаз хороши.

А ещё последний QtCreator умеет qbs... вроде как. Может его попробовать?

pathfinder ★★★★
()
Ответ на: комментарий от stevejobs

Ну я конечно опробую данный варинат, но с этим работать не только мне потом придется, QMake предпочтительнее, да и QML туда же, вообщем надо разбираться...

Blastbit
() автор топика
Ответ на: комментарий от Blastbit

да и QML туда же

cmake его умеет искаропки. Кроссплатформенно. find_package(Qt5Widgets), find_package(Qt5Declarative), кажется. Видишь, пара вопросов специальной олимпиады отпало само.

ня ссылку: http://www.kdab.com/using-cmake-with-qt-5/ копипастаешь тамошний конфиг, радуешься.

stevejobs ★★★★☆
()
Ответ на: комментарий от Blastbit

GDBusSignalInfo **signals

В Qt есть макрос #define signals protected. Самое простое решение включать заголовочники gstreamer перед заголовочниками Qt.

Dendy ★★★★★
()
Ответ на: комментарий от Blastbit

«Олимпиадные вопросы» продолжаются. Ок, всё собралось нормально. Собраны все плагины GStreamer (base, good, bad, ugly, libav).

Пытаюсь запустить сервер (из примеров, с небольшими изменениями) со стримингом видео с вебкамеры в rtsp. Строчка для media_factory, подходящая в 0.10 версии не подходит(ну не работает вобщем). А вот и она:

  gst_rtsp_media_factory_set_launch (factory,
                                     "( "
                                     "v4l2src device=/dev/video0 "
                                     "! video/x-raw-yuv,width=640,height=480,framerate=30/1"
                                     "! ffmpegcolorspace "
                                     "! videoscale "
                                     "! x264enc cabac=false tune=zerolatency byte-stream=true threads=4 speed-preset=3 "
                                     "! v4l2sink "
                                     "! rtph264pay pt=96 name=pay0 "
                                     ")");
Выдает ошибку в логи:
(gstrtspserver-test1_0:9511): GStreamer-WARNING **: 0.10-style raw video caps are being created. Should be video/x-raw,format=(string).. now.
0:00:01.368936415  [332m 9511 [00m  0x8badaf0  [31;01mERROR   [00m  [00;01;37;41m        GST_PIPELINE ./grammar.y:670:priv_gst_parse_yyparse: [00m элемент «ffmpegcolorspace» не найден
0:00:01.370258168  [332m 9511 [00m  0x8badaf0  [31;01mERROR   [00m  [00;01;37;41m        GST_PIPELINE ./grammar.y:670:priv_gst_parse_yyparse: [00m элемент «ffenc_mpeg4» не найден
0:00:01.376584583  [332m 9511 [00m  0x8badaf0  [31;01mERROR   [00m  [00;01;37;41m        GST_PIPELINE ./grammar.y:623:gst_parse_perform_link: [00m не удалось соединить v4l2sink0 и pay0
0:00:01.384794240  [332m 9511 [00m  0x8badaf0  [31;01mERROR   [00m  [00m          rtspclient rtsp-client.c:595:find_media: [00m client 0x8ca4818: can't prepare media
0:00:01.384864614  [332m 9511 [00m  0x8badaf0  [31;01mERROR   [00m  [00m          rtspclient rtsp-client.c:1711:handle_describe_request: [00m client 0x8ca4818: no media

(gstrtspserver-test1_0:9511): GLib-CRITICAL **: unblock_source: assertion `!SOURCE_DESTROYED (source)' failed

(gstrtspserver-test1_0:9511): GLib-CRITICAL **: unblock_source: assertion `!SOURCE_DESTROYED (source)' failed
Если убирать лишние параметры(которые не может подхватить), то собственно работать всёравно не будет.

Поиски в сети привели к такому(и им подобным):

  gst_rtsp_media_factory_set_launch (factory,
                                     "( "
                                     "uvch264src device=/dev/video0 name=src auto-start=true iframe-period=1000 src.vidsrc ! queue ! video/x-h264,width-1920,height=1080,framerate=30/1 ! h264parse ! rtph264pay pt=96 name=pay0 src.vfsrc ! queue ! video/x-raw,width=432,height=240,framerate=30/1 ! xvimagesink "
                                     ")");

Но при попытке приконектиться к серверу выдает ошибку(в логи):

0:00:02.432904256  [333m 9452 [00m  0x96b9af0  [31;01mERROR   [00m  [00;01;37;41m        GST_PIPELINE ./grammar.y:670:priv_gst_parse_yyparse: [00m no element "uvch264src"
0:00:02.432986041  [333m 9452 [00m  0x96b9af0  [31;01mERROR   [00m  [00;01;37;41m        GST_PIPELINE ./grammar.y:940:priv_gst_parse_launch: [00m Unrecoverable syntax error while parsing pipeline ( uvch264src device=/dev/video0 name=src auto-start=true iframe-period=1000 src.vidsrc ! queue ! video/x-h264,width-1920,height=1080,framerate=30/1 ! h264parse ! rtph264pay pt=96 name=pay0 src.vfsrc ! queue ! video/x-raw,width=432,height=240,framerate=30/1 ! xvimagesink )

** (gstrtspserver-test1_0:9452): CRITICAL **: could not parse launch syntax (( uvch264src device=/dev/video0 name=src auto-start=true iframe-period=1000 src.vidsrc ! queue ! video/x-h264,width-1920,height=1080,framerate=30/1 ! h264parse ! rtph264pay pt=96 name=pay0 src.vfsrc ! queue ! video/x-raw,width=432,height=240,framerate=30/1 ! xvimagesink )): no element "uvch264src"

** (gstrtspserver-test1_0:9452): CRITICAL **: could not create element
0:00:02.433144674  [333m 9452 [00m  0x96b9af0  [31;01mERROR   [00m  [00m          rtspclient rtsp-client.c:577:find_media: [00m client 0x9853420: can't create media
0:00:02.433241761  [333m 9452 [00m  0x96b9af0  [31;01mERROR   [00m  [00m          rtspclient rtsp-client.c:1711:handle_describe_request: [00m client 0x9853420: no media

(gstrtspserver-test1_0:9452): GLib-CRITICAL **: unblock_source: assertion `!SOURCE_DESTROYED (source)' failed

(gstrtspserver-test1_0:9452): GLib-CRITICAL **: unblock_source: assertion `!SOURCE_DESTROYED (source)' failed

Насколько понял не может подцепить uvch264src, но он есть в bad плагинах. Так вот, кто может помочь?

Blastbit
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.