Gstreamer pipleline的CPU使用率和内存

我正在使用gstreamer从网络摄像头捕获视频,使用x264对其进行编码并使用gstrtpbin对其进行流式处理。它很棒。但是,它使用了我所有四个内核中的大约50%和大量内存。有什么办法可以降低CPU和内存使用量吗?这是管道。
pipeline_description = "gstrtpbin latency=0 max-latency=100 drop-on-latency=true use-pipeline-clock=true ntp-sync=true name=rtpbin " 
        "autovideosrc ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! " 
        "tee name=t_vid ! queue ! fpsdisplaysink name=fpssink text-overlay=false video-sink=xvimagesink signal-fps-measurements=true t_vid. ! " 
        "queue ! videorate ! ffmpegcolorspace ! x264enc pass=qual tune=zerolatency quantizer=40 ! queue ! rtph264pay ! rtpbin.send_rtp_sink_0 " 
        "rtpbin.send_rtp_src_0 ! udpsink port=%d host=%s sync=false async=false rtpbin.send_rtcp_src_0 ! " 
        "udpsink port=%d host=%s sync=false async=false name=vrtcpsink udpsrc port=%d ! " 
        "rtpbin.recv_rtcp_sink_0 autoaudiosrc ! queue ! audioresample ! audioconvert ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_1 " 
        "rtpbin.send_rtp_src_1 ! udpsink port=%d host=%s sync=false async=false rtpbin.send_rtcp_src_1 ! " 
        "udpsink port=%d host=%s sync=false async=false udpsrc port=%d ! rtpbin.recv_rtcp_sink_1" % (VRTP_SEND_PORT, DEST,
        VRTCP_SEND_PORT, DEST, VRTCP_RECV_PORT, ARTP_SEND_PORT, DEST, ARTCP_SEND_PORT, DEST, ARTCP_RECV_PORT)
    
已邀请:
我会运行oprofile / sysprof来查看哪个代码是最大的罪犯。您可以通过使用较少的抽象接收器和源来节省一点(例如,直接使用xvimagesink而不是fpsdisplaysink)。如果可以,请避免使用ffmpegcolorspace(原则上是颜色空间转换,如果不需要,元素将不会执行任何操作,只会产生很少的开销)。     
如果你不需要帧速率计算,那么它可以覆盖,你可以通过这种方式减少一些CPU消耗,但正如joeforker所指出的那样,h264在计算上相当密集,所以尽管你的管道中有所有优化,我怀疑你会看到超过10-15%的改善,除非其中一个元素是错误的。这是ensonic对分析的评论非常有用的地方,特别是如果您愿意重写一些元素,即用您自己的元素替换已发布的元素。     
我也见过这个问题 - 使用sync = false似乎会触发100%的CPU。还有另一个线程Streaming RTP / RTSP:sync / timestamp问题可以解决这个问题。 HTH     

要回复问题请先登录注册