繁体   English   中英

使用 OpenCV GStreamer 读取 HLS 流时 CPU 使用率高

[英]High CPU usage while reading an HLS stream using OpenCV GStreamer

我有以下代码创建 gstreamer 管道来处理 HLS 流。

cap = cv2.VideoCapture(
    f"souphttpsrc is_live=true location={hls_stream_link} ! hlsdemux ! 
    queue ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! 
    videoconvert ! appsink max-buffers=1 drop=true sync=false",
cv2.CAP_GSTREAMER)

我现在像这样阅读流:

while True:
    success, frame = cap.read()
    time.sleep(1.0)

请注意,我以 1 FPS 读取流并具有属性max-buffers=1 drop=true sync=false 通过这样做,我总是从缓冲区必须提供的流中获取最新的帧。

问题是 CPU 使用率非常高,在我的 i7 机器上有时会飙升至 120%。 取消睡眠会使情况变得更糟。

关于为什么处理 HLS 流如此占用 CPU 的任何解决方案或想法都会很棒。 此外,关于如何减少使用的想法也会很棒。

您正在解码完整的流。 在软件中完成时,这可能会非常昂贵。 我在这里看到的一个潜在的优化步骤是在解码器之前添加一个GstPadProbe并将一点解析到位流中并删除所有不是 IDR 的样本。 然后您将只将 IDR 帧发送到解码器。 什么会减少解码器的负载,但是您只会在每个 IDR 帧间隔后得到一个新帧,这通常是每 2 秒(但每个帧之间可能会有所不同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM