我有一个奇怪的问题
我正在安装了 protoc 3.6.1 的VM上编译应用程序。 然后,它会构建一个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与协议无关,但我想确认这一点。 gstreamer 1.0是否已使用协议2.6.1编译?
如果不是这种情况,为什么在我解压缩的VM上出现此错误?它没有安装协议,并且正在运行Ubuntu 16.04。
答案 0 :(得分:0)
正如您所说,我可以看到,这里没有使用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