Gstreamer用tee的多线程中appsink使管道帧率降低严重怎么办??soos!

Gstreamer-tee-appsink,filesink,rtspsink

我是使用Gstreamer对摄像头的源(30帧)接入三个分支:appsink,filesink,rtspsink,
appsink用于输出每一帧
filesink用于保存视频
rtsp用于推流

这是我的管道拓扑图

img

问题描述

我遇到的问题是加入appsink会导致整个管道的输出帧率降低,没有appsink,仅有推流和保存视频是正常的
并且很奇怪的地方是在上面的图片中显示管道间的帧率正常,到输出到文件和网页上不正常,仅有7帧

希望能帮我看看是什么问题,有没有解决方案,困扰我一个星期了55

你是想用appsink从gstreamer里面取数据用来实时处理吧。我也碰到过这个问题,原因是你用的处理线程和gstreamer管道它们是处于不同的虚拟内存下的,gstreamer默认分配用于推流的memory是没法给你自己的处理线程cache的。网上推荐的做法我貌似只看到有说修改并重新编译gstreamer的源码,开启该memory的cache,否则基本无解(或者你再查查别人有什么解决办法,我之前没找到)。我自己的解决办法是抛弃gstreamer,使用v4l2框架改自己的程序,这是一套成熟的东西,到处都是v4l2采集视频的demo,在demo中使用V4L2_MEMORY_USERPTR(一共有四种方式)即可。
https://github.com/biotrump/v4l-capture/blob/master/demo.c
https://community.nxp.com/t5/i-MX-Processors/Why-is-access-to-V4L2-buffers-slower-than-other-memory/m-p/146640