- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这将是我第一次在 C 程序中使用 Gstreamer。我只使用过管道。我正在尝试编写一个程序,该程序将流存储在缓冲区中,使用 OpenCv 编辑流并使用带有 appsrc 的管道来查看流。我收到错误:
rb1:3231): GStreamer-CRITICAL **: gst_caps_get_structure: assertion `index < caps->structs->len' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_has_field: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_fixate_field_nearest_fraction: assertion `gst_structure_has_field (structure, field_name)' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_get_fraction: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_has_field: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_has_field: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_has_field: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_structure_has_field: assertion `structure != NULL' failed
(rb1:3231): GStreamer-CRITICAL **: gst_pad_set_caps: assertion `caps == NULL || gst_caps_is_fixed (caps)' failed
** ERROR **: not negotiatedaborting...Aborted
如有任何帮助,我们将不胜感激。
作为引用,我已经给出了代码(我还没有实现 OpenCV 部分):
#include <gst/gst.h>
#include <gst/app/gstappsrc.h>
#include <gst/app/gstappbuffer.h>
#include <gst/app/gstappsink.h>
#include <gst/gstbuffer.h>
#include <stdbool.h>
#include <stdio.h>
static GMainLoop *loop;
GstBuffer *buffer;
GstAppSinkCallbacks callbacks;
GstElement *pipeline_in;
GstElement *pipeline_out;
GstBus *bus;
GError *error;
const char app_sink_name[] = "app-sink";
const char app_src_name[] = "app-src";
const char pipeline_in_str[500];
const char pipeline_out_str[500];
static gboolean bus_call(GstBus * bus, GstMessage * msg, void *user_data)
{
gchar *userdata = (gchar *) user_data;
switch (GST_MESSAGE_TYPE(msg)) {
case GST_MESSAGE_EOS:{
//sender check - pipeline1 sends a EOS msg to AppSrc in pipeline2
if (g_ascii_strcasecmp(userdata, gst_element_get_name(pipeline_in)) == 0) {
g_print("EOS detected (%s)n", userdata);
gst_app_src_end_of_stream(GST_APP_SRC(gst_bin_get_by_name(GST_BIN(pipeline_out), app_src_name)));
}
//sender check - when pipeline2 sends the EOS msg, quite.
if (g_ascii_strcasecmp(userdata, gst_element_get_name(pipeline_out)) == 0) {
g_print("Finished playback (%s)n", userdata);
g_main_loop_quit(loop);
}
break;
}
case GST_MESSAGE_ERROR:{
GError *err;
gst_message_parse_error(msg, &err, NULL);
g_error("%s", err->message);
g_error_free(err);
g_main_loop_quit(loop);
break;
}
default:
break;
}
return true;
}
GstFlowReturn newbuffer(GstAppSink * app_sink, gpointer user_data)
{
GstBuffer *buffer = gst_app_sink_pull_buffer((GstAppSink *) gst_bin_get_by_name(GST_BIN(pipeline_in), app_sink_name));
gst_app_src_push_buffer(GST_APP_SRC(gst_bin_get_by_name(GST_BIN(pipeline_out), app_src_name)), buffer);
return GST_FLOW_OK;
}
int main(int argc, char *argv[])
{
int result;
gst_init(&argc, &argv);
loop = g_main_loop_new(NULL, FALSE);
pipeline_in = gst_pipeline_new("my_pipeline");
pipeline_out = gst_pipeline_new("my_pipeline2");
//result=sprintf(pipeline_in_str, "udpsrc port=5000 ! video/x-h264, width=(int)640, height=(int)480, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction )1/1, codec_data=(buffer )0142c01effe100176742c01e92540501ed8088000003000bb9aca00078b17501000468ce3c80, stream-format=(string)avc, alignment=(string)au ! ffdec_h264 ! video/x-raw-yuv,width=640,height=480 ! ffmpegcolorspace ! video/x-raw-rgb,width=640,height=480 ! ffmpegcolorspace ! appsink name="%s"", app_sink_name);
result = sprintf(pipeline_in_str, "videotestsrc ! video/x-raw-rgb, width=640, height=480 ! ffmpegcolorspace ! appsink name=%s", app_sink_name);
printf("First pipeline string nn%sn", pipeline_in_str);
pipeline_in = gst_parse_launch(pipeline_in_str, &error);
if (error) {
g_printerr("Error in first pipeline: %sn", error->message);
return -1;
}
result = sprintf(pipeline_out_str, "appsrc name=%s ! queue ! videoparse format=14 width=640 height=480 ! videorate ! videoscale ! ffmpegcolorspace ! video/x- raw-rgb,width=640,height=480 ! xvimagesink", app_src_name);
printf("Second pipeline stringnn%sn", pipeline_out_str);
pipeline_out = gst_parse_launch(pipeline_out_str, &error);
if (error) {
g_printerr("Error in first pipeline: %sn", error->message);
return -1;
}
bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline_in));
gst_bus_add_watch(bus, bus_call, NULL);
gst_object_unref(bus);
bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline_out));
gst_bus_add_watch(bus, bus_call, NULL);
gst_object_unref(bus);
gst_element_set_state(GST_ELEMENT(pipeline_in), GST_STATE_PLAYING);
gst_element_set_state(GST_ELEMENT(pipeline_out), GST_STATE_PLAYING);
callbacks.eos = NULL;
callbacks.new_preroll = NULL;
callbacks.new_buffer = newbuffer;
gst_app_sink_set_callbacks((GstAppSink *) gst_bin_get_by_name(GST_BIN(pipeline_in), app_sink_name), &callbacks, NULL, NULL);
g_main_loop_run(loop);
gst_element_set_state(GST_ELEMENT(pipeline_in), GST_STATE_NULL);
gst_element_set_state(GST_ELEMENT(pipeline_out), GST_STATE_NULL);
gst_object_unref(GST_OBJECT(pipeline_in));
gst_object_unref(GST_OBJECT(pipeline_out));
return 0;
}
/* indented using http://indentcode.net/ */
最佳答案
检查你为什么得到断言。
例如:
$ G_DEBUG=fatal_warnings gdb g
GNU gdb (GDB) Fedora (7.2-51.fc14)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/thomas/g...(no debugging symbols found)...done.
(gdb) r
Starting program: /home/thomas/g
[Thread debugging using libthread_db enabled]
[New Thread 0x7ffff0e59700 (LWP 24710)]
[New Thread 0x7fffebfff700 (LWP 24711)]
[New Thread 0x7fffeb7fe700 (LWP 24712)]
[New Thread 0x7fffeaffd700 (LWP 24713)]
[New Thread 0x7fffea7fc700 (LWP 24714)]
GStreamer-CRITICAL **: gst_caps_get_structure: assertion `index < caps->structs->len' failed
aborting...
First pipeline string nnvideotestsrc ! video/x-raw-rgb, width=640, height=480 ! ffmpegcolorspace ! appsink name=app-sinknSecond pipeline stringnnappsrc name=app-src ! queue ! videoparse format=14 width=640 height=480 ! videorate ! videoscale ! ffmpegcolorspace ! video/x-raw-rgb,width=640,height=480 ! xvimagesinkn
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffeb7fe700 (LWP 24712)]
0x0000003112e330c5 in raise (sig=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
(gdb) bt
#0 0x0000003112e330c5 in raise (sig=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x0000003112e34a76 in abort () at abort.c:92
#2 0x0000003114a4ab8a in g_logv (log_domain=0x34f3ea7f18 "GStreamer",
log_level=<value optimized out>, format=
0x3114aac838 "%s: assertion `%s' failed", args1=0x7fffeb7fd940)
at gmessages.c:557
#3 0x0000003114a4ac13 in g_log (log_domain=<value optimized out>,
log_level=<value optimized out>, format=<value optimized out>)
at gmessages.c:577
#4 0x00000034f3e3b0a2 in gst_caps_get_structure (caps=0x7fffe40014c0, index=0)
at gstcaps.c:864
#5 0x00007ffff1287417 in gst_video_rate_setcaps (pad=<value optimized out>,
caps=0x7fffe40014c0) at gstvideorate.c:335
#6 0x00000034f3e5e7bf in gst_pad_set_caps (pad=0x864180 [GstPad], caps=
0x7fffdc005e80) at gstpad.c:2667
#7 0x00000034f3e5fa5a in gst_pad_chain_data_unchecked (pad=0x864180 [GstPad],
is_buffer=1, data=0x7fffe0002b30) at gstpad.c:4172
#8 0x00000034f3e60136 in gst_pad_push_data (pad=0x864000 [GstPad], is_buffer=
1, data=0x7fffe0002b30) at gstpad.c:4419
#9 0x00007ffff148e54b in gst_raw_parse_chain (pad=<value optimized out>,
buffer=<value optimized out>) at gstrawparse.c:292
#10 0x00000034f3e5f96d in gst_pad_chain_data_unchecked (pad=0x83edf0 [GstPad],
is_buffer=1, data=0x7fffec002480) at gstpad.c:4190
#11 0x00000034f3e60136 in gst_pad_push_data (pad=0x83ec70 [GstPad], is_buffer=
1, data=0x7fffec002480) at gstpad.c:4419
#12 0x00007ffff16a9e43 in gst_queue_push_one (pad=<value optimized out>)
at gstqueue.c:1144
#13 gst_queue_loop (pad=<value optimized out>) at gstqueue.c:1260
#14 0x00000034f3e88c46 in gst_task_func (task=0x8eb110 [GstTask])
at gsttask.c:271
#15 0x0000003114a6bbc4 in g_thread_pool_thread_proxy (
data=<value optimized out>) at gthreadpool.c:319
#16 0x0000003114a69446 in g_thread_create_proxy (data=0x8debc0)
at gthread.c:1897
#17 0x0000003113206ccb in start_thread (arg=0x7fffeb7fe700)
at pthread_create.c:301
#18 0x0000003112ee0c2d in clone ()
at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
使用 GST_DEBUG=*:5 获取失败原因的更详细输出。
结合 G_DEBUG 设置以确保它在遇到断言时停止。
关于c - 使用 Appsrc Appsink 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869032/
我正在使用 node.js 和 mocha 单元测试,并且希望能够通过 npm 运行测试命令。当我在测试文件夹中运行 Mocha 测试时,测试运行成功。但是,当我运行 npm test 时,测试给出了
我的文本区域中有这些标签 ..... 我正在尝试使用 replaceAll() String 方法替换它们 text.replaceAll("", ""); text.replaceAll("", "
早上好,我是 ZXing 的新手,当我运行我的应用程序时出现以下错误: 异常Ljava/lang/NoClassDefFoundError;初始化 ICOM/google/zxing/client/a
我正在制作一些哈希函数。 它的源代码是... #include #include #include int m_hash(char *input, size_t in_length, char
我正在尝试使用 Spritekit 在 Swift 中编写游戏。目的是带着他的角色迎面而来的矩形逃跑。现在我在 SKPhysicsContactDelegate (didBegin ()) 方法中犯了
我正在尝试创建一个用于导入 CSV 文件的按钮,但出现此错误: actionPerformed(java.awt.event.ActionEvent) in cannot implement
请看下面的代码 public List getNames() { List names = new ArrayList(); try { createConnection(); Sta
我正在尝试添加一个事件以在“dealsArchive”表中创建一个条目,然后从“deals”表中删除该条目。它需要在特定时间执行。 这是我正在尝试使用的: DELIMITER $$ CREATE EV
我试图将两个存储过程的表结果存储到 phpmyadmin 例程窗口中的单个表中,这给了我 mariadb 语法错误。单独调用存储过程给出了结果。 存储过程代码 BEGIN CREATE TABLE t
我想在 videoview 中加载视频之前有一个进度条。但是我收到以下错误。我还添加了所有必要的导入。 我在 ANDROID 中使用 AIDE 这是我的代码 public class MainActi
我已经使用了 AsyncTask,但我不明白为什么在我的设备 (OS 4.0) 上测试时仍然出现错误。我的 apk 构建于 2.3.3 中。我想我把代码弄错了,但我不知道我的错误在哪里。任何人都请帮助
我在测试 friend 网站的安全性时,通过在 URL 末尾添加 ' 发现了 SQL 注入(inject)漏洞该网站是用zend框架构建的我遇到的问题是 MySQL -- 中的注释语法不起作用,因此页
我正在尝试使用堆栈溢出答案之一的交互式信息窗口。 链接如下: interactive infowindow 但是我在代码中使用 getMap() 时遇到错误。虽然我尝试使用 getMapAsync 但
当我编译以下代码时出现错误: The method addMouseListener(Player) is undefined for the type Player 代码: import java.
我是 Android 开发的初学者。我正在开发一个接收 MySql 数据然后将其保存在 SQLite 中的应用程序。 我将 Json 用于同步状态,以便我可以将未同步数据的数量显示为要同步的待处理数据
(这里是Hello world级别的自动化测试人员) 我正在尝试下载一个文件并将其重命名以便于查找。我收到一个错误....这是代码 @Test public void allDownload(
我只是在写另一个程序。并使用: while (cin) words.push_back(s); words是string的vector,s是string。 我的 RAM 使用量在 4 或 5
我是 AngularJS 的新手,我遇到了一个问题。我有一个带有提交按钮的页面,当我单击提交模式时必须打开并且来自 URL 的数据必须存在于模式中。现在,模式打开但它是空的并且没有从 URL 获取数据
我正在尝试读取一个文件(它可以包含任意数量的随机数字,但不会超过 500 个)并将其放入一个数组中。 稍后我将需要使用数组来做很多事情。 但到目前为止,这一小段代码给了我 no match for o
有些人在使用 make 命令进行编译时遇到了问题,所以我想我应该在这里尝试一下,我已经在以下操作系统的 ubuntu 32 位和挤压 64 位上尝试过 我克隆了 git 项目 https://gith
我是一名优秀的程序员,十分优秀!