Gstreamer调试管道c++
Gstreamer debug pipeline c++
我正试图将gstreamer bash脚本代码转换为c++代码,但我无法将调试日志保存到文件中
这是我的代码
int main(int argc, char *argv[])
{
YoctoLinuxSystem* hola;
//hola->YoctoLinuxSystem();
CustomData DataTest, DataDvi;
GstBus *bus;
GstMessage *msg;
GstStateChangeReturn ret;
GMainLoop *loop;
//vector<string> lines = YoctoLinuxSystem::getCmdOutputAsLines("./scripts/get_system_temps.sh");
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
/******************************/
/****AJUSTES GSTREAMER TEST****/
/******************************/
DataTest.source = gst_element_factory_make ("videotestsrc", "source");
DataTest.capsfilter = gst_element_factory_make ("capsfilter","caps");
DataTest.sink = gst_element_factory_make ("imxipuvideosink", "sink");
DataTest.pipeline = gst_pipeline_new ("test-pipeline");
if (!DataTest.pipeline || !DataTest.source || !DataTest.capsfilter || !DataTest.sink) {
g_printerr ("Not all elements could be created.n");
return -1;
}
/* Modify the source's properties */
g_object_set (DataTest.source, "pattern", 0, NULL);
g_object_set(DataTest.capsfilter, "caps", gst_caps_new_simple("video/x-raw", "framerate", GST_TYPE_FRACTION, 25, 1,"width", G_TYPE_INT, 1920, "height", G_TYPE_INT, 1080, "format", G_TYPE_STRING, "RGB", NULL), NULL);
/* Build the pipeline */
gst_bin_add_many (GST_BIN (DataTest.pipeline), DataTest.source, DataTest.capsfilter, DataTest.sink, NULL);
if (gst_element_link (DataTest.source, DataTest.capsfilter) != TRUE) {
g_printerr ("Elements source-caps could not be linked.n");
gst_object_unref (DataTest.pipeline);
return -1;
}
if (gst_element_link (DataTest.capsfilter, DataTest.sink) != TRUE) {
g_printerr ("Elements caps-sink could not be linked.n");
gst_object_unref (DataTest.pipeline);
return -1;
}
gst_element_link_many (DataTest.source, DataTest.capsfilter, DataTest.sink, NULL);
/******************************/
/****AJUSTES GSTREAMER DVI****/
/******************************/
DataDvi.source = gst_element_factory_make ("v4l2src", "source");
DataDvi.sink = gst_element_factory_make ("imxipuvideosink", "sink");
DataDvi.pipeline = gst_pipeline_new ("test-pipeline");
if (!DataDvi.pipeline || !DataDvi.source || !DataDvi.sink) {
g_printerr ("Not all elements could be created.n");
return -1;
}
/* Modify the source's properties */
g_object_set (DataDvi.source, "device", "/dev/video0", NULL);
/* Build the pipeline */
gst_bin_add_many (GST_BIN (DataDvi.pipeline), DataDvi.source, DataDvi.sink, NULL);
if (gst_element_link (DataDvi.source, DataDvi.sink) != TRUE) {
g_printerr ("Elements caps-sink could not be linked.n");
gst_object_unref (DataDvi.pipeline);
return -1;
}
gst_element_link_many (DataDvi.source, DataDvi.sink, NULL);
GST_DEBUG=2;
ifstream fileread;
// fileread.open("/var/log/data.log");
while(1)
{
ifstream fileread("/var/log/data.log");
if (!fileread.good())
{
/* Start playing */
//g_print ("Now playing: n");
gst_element_set_state (DataDvi.pipeline, GST_STATE_PAUSED);
ret = gst_element_set_state (DataTest.pipeline, GST_STATE_PLAYING);
if (ret == GST_STATE_CHANGE_FAILURE) {
g_printerr ("Unable to set the pipeline to the playing state.n");
gst_object_unref (DataTest.pipeline);
return -1;
}
}
else
{
gst_element_set_state (DataTest.pipeline, GST_STATE_PAUSED);
ret = gst_element_set_state (DataDvi.pipeline, GST_STATE_PLAYING);
/*HERE I NEED TO KNOW THE DEBUG OF THE PIPELINE*/
if (ret == GST_STATE_CHANGE_FAILURE) {
g_printerr ("Unable to set the pipeline to the playing state.n");
gst_object_unref (DataDvi.pipeline);
return -1;
}
}
}
g_print ("SALEn");
return 0;
}
我正在使用gstreamer-1.0库,我已经看到我需要使用GST_DEBUG_FILE,但我不知道如何从c++调用这些函数。
谢谢你的帮助!
调试和日志记录基础设施背后有丰富的API。请查看此文档。
例如,当环境变量尚未设置时,可以设置一些默认值。
if (!gst_debug_is_active()) {
gst_debug_set_active(TRUE);
GstDebugLevel dbglevel = gst_debug_get_default_threshold();
if (dbglevel < GST_LEVEL_ERROR) {
dbglevel = GST_LEVEL_ERROR;
gst_debug_set_default_threshold(dbglevel);
}
}
为此,上一张海报正确地向您建议了环境变量GST_DEBUG_FILE。您可以在gst_init()之前执行putenv()。
如果你想获得更多的乐趣,你可以替换默认的日志函数gst_debug_log_default()
。您可以添加自己的via gst_debug_add_log_function()
;则删除默认值gst_debug_remove_log_function(gst_debug_log_default)
。如果你只是想更改文件,那么gst_debug_add_log_function (gst_debug_log_default, log_file, NULL)
,对于一些打开并准备好的FILE* log_file
。
GST_DEBUG_FILE是环境变量,所以它与C++无关。
你可以用之类的东西
export GST_DEBUG_FILE=~/gst.log
在运行应用程序之前。或者在bash启动脚本中添加类似的内容。
相关文章:
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- IPC使用多个管道和分支进程来运行Python程序
- 如何创建函数管道,以便函数一个接一个地运行?
- Gstreamer 管道从命令 lne 到 c 代码
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 将旧管道转换为现代 openGL 时出现问题
- 如何使用管道在父级和子级之间来回传递文件
- 在没有管理员权限的情况下连接到同一网络中的命名管道
- 如何测量管道延迟?
- 我如何使用此程序管道多个命令?C++
- 先进先出:一个进程永远不会从管道读取
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 使用模板而不是虚拟方法的管道模式
- 我可以写入关闭的套接字并强制纠正损坏的管道错误吗?
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- Opencv GStreamer管道在Raspberry Pi 4上不起作用
- 阻塞管道连接命名管道不触发
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- 向 vulkan 管道添加额外的 UBO 会停止所有几何体渲染
- 在命名管道中发送标准::字符串流