Использование процессора и памяти Gstreamer pipleline - PullRequest
3 голосов
/ 03 апреля 2011

Я использую gstreamer для захвата видео с веб-камеры, кодирования его с помощью x264 и потоковой передачи с помощью gstrtpbin. Работает отлично. Тем не менее, он использует около 50% всех четырех моих ядер и много памяти. Что я могу сделать, чтобы уменьшить использование процессора и памяти? Вот трубопровод.

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)

Ответы [ 3 ]

0 голосов
/ 05 октября 2011

Если вам не нужны вычисления с частотой кадров и, более того, с наложением, вы можете сократить потребление ресурсов процессора таким образом, но, как указал joeforker, h264 в вычислительном отношении довольно интенсивен, поэтому несмотря на всеваш трубопровод, я сомневаюсь, что вы увидите улучшение более чем на 10-15%, если только один из элементов не глючит.Именно поэтому комментарий Enson по поводу профилирования был бы весьма полезен, особенно если вы готовы переписать некоторые элементы, то есть заменить отправленные, своими собственными.

0 голосов
/ 10 марта 2013

Я также видел эту проблему - использование sync = false, кажется, запускает 100% CPU. Существует еще один поток Потоковая передача RTP / RTSP: проблемы синхронизации / отметки времени , который говорит об этом. НТН

0 голосов
/ 18 мая 2011

Я бы запустил oprofile / sysprof, чтобы увидеть, какой код является самым большим нарушителем. Вы можете сэкономить немного, используя меньше абстрактных приемников и источников (например, используйте xvimagesink напрямую вместо fpsdisplaysink). Если вы можете, избегайте ffmpegcolorspace (преобразование цветового пространства в принципе, элемент не будет делать ничего, если не нужно, и только вызовет небольшие накладные расходы).

...