如何在简单的 TcpServerSrc 到 TcpServerSink 管道中解决失败的 gstreamer 断言
How to solve failing gstreamer assertions in a simple TcpServerSrc to TcpServerSink pipeline
我目前有一个简单的管道,由一个tcpserversrc组成,该管道将其输入中继到tcpserversink。但此管道每g_main_loop迭代重复以下 4 条错误消息。
(dmp-server:9726): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed
(dmp-server:9726): GStreamer-CRITICAL **: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed
(dmp-server:9726): GStreamer-CRITICAL **: gst_structure_has_field: assertion 'structure != NULL' failed
(dmp-server:9726): GStreamer-CRITICAL **: gst_mini_object_unref: assertion 'mini_object != NULL' failed
在我的对象的构造函数中,我初始化 Gstreamer 元素,如下所示
GMainLoop* loop = g_main_loop_new(nullptr, false);
GstElement* pipeline = gst_pipeline_new("tcp_bridge");
GstElement* source = gst_element_factory_make("tcpserversrc", "recv");
GstElement* sink = gst_element_factory_make("tcpserversink", "send");
GstBus* bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline))
uint16_t recv_port = 2000
uint16_t send_port = 2001
if (!pipeline || !source || !sink)
{
throw std::runtime_error("Could not create the pipeline components for this radio.");
}
g_object_set(G_OBJECT(source), "port", gint(recv_port), nullptr);
g_object_set(G_OBJECT(sink), "port", gint(send_port), nullptr);
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_watch (bus, bus_call, this);
gst_bin_add_many (GST_BIN(pipeline), source, sink, nullptr);
gst_element_link_many(source, sink, nullptr);
在一个单独的函数中,我调用 g_main_loop_run() 函数
这些错误建议了一些关于上限的信息,但文档没有建议 tcpserver 接收器和/或源需要它。 2 其他管道解码到 mp3 并从中编码,以及发送到此管道和从此管道接收,它们都没有附加上限,并且这些管道中没有断言失败。
我还应该说管道运行正常,这并不意味着我的代码没有错误,但如果管道仍然按预期工作,我发现 CRITICAL 断言有点尴尬。我想摆脱这些消息的主要原因是一个可能的错误,它可能会回来咬我,以及阻塞我的应用程序日志的大量输出。
在这种情况下,tcpServerSink不知道它在发送什么,这触发了断言。因此,就我而言,当我通过此管道流式传输 MP3 音频时,我必须向我的管道添加一个 mpegaudioparse 元素。
这确保了 tcpserversink 知道它将要发送什么(它设置了上限),以便它不再生成这些断言。
一些提示 遇到相同问题时,将 G_DEBUG=fatal_warnings 环境变量与调试器结合使用,以获取堆栈跟踪,以识别具有失败(关键)断言的组件。
这是此处找到的堆栈溢出问题的摘要和略有变化:带有TCPservers的GST启动无法正常工作
相关文章:
- 如果没有malloc,链表实现将失败
- 运行同一解决方案的另一个项目的项目
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 我应该如何在C++中使用结构体解决输入失败的问题?
- mapreduce c编程与-fPIC链接失败,如何解决?
- 解决由于在哈希函数中使用了不完整的类型而导致的编译失败
- 如何解决来自 arduino 的 post 请求的问题,在失败之前只收到 2-3 次
- C++ 由于无法解决过载功能而导致绑定失败
- 枚举作为基类的模板参数总是会因未解决的错误而失败
- 解决方案重新生成在 30% 的情况下失败
- 调试器使用新的UWP C++解决方案失败
- Windows高速模式(C++):等待信号量(WaitForSingleObjectEx):失败,访问被拒绝[部分解决]
- ::createFile winApi 失败,出现错误 5 (access_denied).是外壳编程或其他解决方案或任
- 当变量传递给函数无关紧要时,如何解决 gmock EXPECT_CALL失败
- 运行时检查失败 #2 - 变量周围的堆栈'A'已损坏。需要的解决方案
- 由于抽象模板arg的实例化,Boost::lambda表达式编译失败.任何解释和/或解决方法
- 无法读取 c++ 中的 txt 文件.我不断收到我的输入文件失败文本.谁能帮我弄清楚要解决什么
- 如何在简单的 TcpServerSrc 到 TcpServerSink 管道中解决失败的 gstreamer 断言