Конфликт с версиями Protobuf с использованием Gstreamer - PullRequest
0 голосов
/ 11 марта 2019

У меня странный вопрос

Я компилирую приложение на ВМ с установленным protoc 3.6.1 . Затем он создает ZIP-файл, который я копирую на другой компьютер, где я распаковываю его и запускаю.

Ни одна из команд, которые я запускаю на этом компьютере, не требует использования протокольных буферов.

     loop = g_main_loop_new( NULL, FALSE );
     gst_init(NULL, NULL);
     snprintf( str_pipeline, sizeof( str_pipeline ), "appsrc name=mysource ! videoconvert ! " "video/x-raw,width=1920,height=1080,format=NV12 ! vaapih264enc ! h264parse ! rtph264pay ! " "udpsink host=%s port=5600", "xxx.xx.xx.xxx");

    // Instruct GStreamer to construct the pipeline 
    pipeline = gst_parse_launch( str_pipeline, &gerror );

    if( !pipeline )
    {
       printf( "gst_parse_launch error. Cannot launch GStreamer..: %s\n", gerror->message );

      return false;
    }

    appsrc = gst_bin_get_by_name( GST_BIN( pipeline ), "mysource" );
    app_caps = gst_caps_new_simple( "video/x-raw", "format", G_TYPE_STRING, "RGB", "width", G_TYPE_INT, WIDTH, "height", G_TYPE_INT, HEIGHT, NULL );

Однако, когда я запускаю приведенный выше код командой gstreamer (в частности, gst_parse_launch ()), это дает мне эту ошибку -

[libprotobuf FATAL google/protobuf/stubs/common.cc:79] This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.6.1).  Contact the program author for an update.  If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.  (Version verification failed in "/build/mir-O8_xaj/mir-0.26.3+16.04.20170605/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc".)

Я не думаю, что gstreamer имеет какое-либо отношение к protoc, но я хотел это подтвердить. Gstreamer 1.0 скомпилирован с протоколом 2.6.1?

Если это не так, почему я получаю эту ошибку на ВМ, где я разархивирую? Он не имеет установленного протокола и работает на Ubuntu 16.04.

1 Ответ

0 голосов
/ 12 марта 2019

Как вы говорите, и я вижу, что здесь нет необходимости использовать protobuf.

В таком случае первое, что я подозреваю, это то, что какой-то ваш случайный файл указывает на какой-то файл protobuf на вашем компьютере во время компиляции.(Хотя я не уверен почему).Безопасная вещь здесь - удалить protoc (все версии).Вы можете выбрать способ удаления в зависимости от вашей ОС.

Затем попробуйте скомпилировать его снова.может быть, это может показать нам какой-то путь к небу мирно : P

EDIT1:

Я пробовал это в своей системе (У меня установлены gstreamer, protobuf и grpc)

str_pipeline ="audiotestsrc ! audioconvert ! autoaudiosink";

cout << str_pipeline << endl;

// Instruct GStreamer to construct the pipeline
pipeline = gst_parse_launch(static_cast<const gchar*>(str_pipeline), &gerror);

if (!pipeline) {
    printf("gst_parse_launch error. Cannot launch GStreamer..: %s\n",
            gerror->message);

    return false;
}

, и я не получаю ту же ошибку, что и вы.(может быть, вы можете попробовать это на своем)

Я получаю ошибку:

GStreamer-CRITICAL **: gst_parse_launch_full: assertion 'error == NULL || *error == NULL' failed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...